# Spis treści:
* [Adresy i wersje API] (#adresy-i-wersje-api)
* [Struktura danych] (#struktura-danych)
* [Lista dostępnych tabel i funkcji - GetCapabilities] (#getcapabilities)
* [Struktura tabeli - DescribeFeatureType] (#describefeaturetype)
* [Struktura tabeli z dodatkowymi atrybutami - DescribeFeatureTypeAdvanced] (#describefeaturetypeadvanced)
* [Struktury wielu tabel] (#multiple-describefeaturetype)
* [Pobieranie danych] (#pobieranie-danych)
* [GetFeature] (#getfeature)
* [Filtry] (#getfeature-filtry)
* [Filtr ogc:PropertyIsEqualTo] (#getfeature-filtr-ogcpropertyisequalto)
* [Filtr ogc:PropertyIsLike] (#getfeature-filtr-ogcpropertyislike)
* [Filtr ogc:PropertyIsNull] (#getfeature-filtr-ogcpropertyisnull)
* [Filtr ogc:Function] (#getfeature-filtr-ogcfunction)
* [Filtr ogc: IsLessThan, IsGreaterThen] (#getfeature-filtr-ogc-islessthan-isgreaterthen)
* [Error - Not implemented tag] (#error-not-implemented-tag)
* [Request-URI Too Long - ogc:Filter z POST] (#request-uri-too-long-ogcfilter-z-post)
* [GetFeatureAdvanced] (#getfeatureadvanced)
* [GetFeature - Hits] (#getfeature-hits)
* [Modyfikacja danych] (#modyfikacja-danych)
* [Edycja danych] (#edycja-danych)
* [Wprowadzanie danych] (#wprowadzanie-danych)
* [Modyfikacja wielu danych] (#modyfikacja-wielu-danych)
* [Usuwanie danych] (#usuwanie-danych)
* [Wynik operacji] (#wynik-operacji)
* [Pliki] (#pliki)
* [Pliki - download] (#pliki-download)
* [Pliki - upload] (#pliki-upload)
* [Pliki - wgranie pliku wraz z przypisaniem do obiektu] (#pliki-wgranie-pliku-wraz-z-przypisaniem-do-obiektu)
# Adresy i wersje API
- Wersja Data (ze wszystkimi danymi): `/wfs-data.php/default_db/`
- Wersja QGIS (tyko rekordy z geom): `/wfs-qgis.php/default_db/`
- Poprzedni link (wersja QGIS): `/wfs.php/xml/wfs/default_db/`
- Uprawnienia wg procesu:
- wersja Data - proces 5040: `/wfs-data.php/filtr_proces_5040/default_db/`
- wersja QGIS - proces 5040: `/wfs-qgis.php/filtr_proces_5040/default_db/`
API BIALL-NET:
- Wersja ze wszystkimi danymi: https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/
- Wersja QGIS (tyko rekordy z geom): https://biuro.biall-net.pl/SE/version-git/wfs-qgis.php/default_db/
- Poprzedni link (wersja QGIS): https://biuro.biall-net.pl/SE/version-git/wfs.php/xml/wfs/default_db/
### Examples
- [Postman Collection](https://biuro.biall-net.pl/gitlab/plabudda/procesy5-wfs-api-doc/raw/master/Postman.wfs-server-data.json)
# Struktura danych
## GetCapabilities:
```
?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.0.0
```
## DescribeFeatureType
Struktura danych dla tabeli TEST_PERMS (namespace: "p5_default_db:TEST_PERMS")
```
?SERVICE=WFS&VERSION=1.0.0&TYPENAME=p5_default_db:TEST_PERMS&REQUEST=DescribeFeatureType
```
## DescribeFeatureTypeAdvanced
Polskie nazwy kolumn oraz informacje o uprawnieniach:
https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&TYPENAME=p5_default_db:TEST_PERMS&REQUEST=DescribeFeatureTypeAdvanced
- każde pole dostaje id zasobu w @p5:id_zasobu
- ładniejsza nazwa w @p5:label (z pola `DESC_PL` jeśli jest określona)
- opis w @p5:description (z pola `OPIS` jeśli jest określone)
- enumy rozdzielone do osobnych nazwanych typów
- @atrybut p5:allow_create="true" - możliwość tworzenia nowego rekordu z tą kolumną
- @atrybut p5:allow_write="true" - możliwość edycji tej kolumny
- @atrybut p5:allow_read="false" - brak uprawnień do odczytania zawartości tej kolumny
```xml
```
## Multiple DescribeFeatureType
Struktury wielu tabel
POST na adres `?REQUEST=DescribeFeatureType&version=1.0.0&service=WFS`
```xml
p5_default_db:Rozdzielcza_rurociag_wsg84
p5_default_db:TEST_PERMS
```
# Pobieranie danych
## GetFeature
Parametry url:
- **Limit**: `count` (WFS 2.0.0) lub `maxFeatures` (for earlier WFS versions)
- **Offset**: `startIndex`
- **Sort**: `sortBy` np. sortBy=ID+D,columnName+A
- **Kolumny**: `propertyName` np. propertyName=ID,test_date,A_STATUS
- **Filtry** `ogc:Filter`: parametr `Filter`, więcej na [API-WFS-ogc-Filter](https://biuro.biall-net.pl/gitlab/plabudda/procesy5-wfs-api-doc/wikis/API-WFS-ogc-Filter)
- **featureID**: `featureID`: np. featureID=TEST_PERMS.12
## Przykład - tylko 5 rekordów (MAXFEATURES=5):
```
?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&MAXFEATURES=5
```
- parametr MAXFEATURES - limit
- ID rekordu w atrybucie fid="TEST_PERMS.26"
```xml
26
testowy opis
```
## Pobieranie danych (tylko zawierające dane geometryczne na potrzeby QGIS)
Przykład - tylko 5 rekordów (MAXFEATURES=5):
```
?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&MAXFEATURES=5
```
- parametr MAXFEATURES - limit
- ID rekordu w atrybucie fid="TEST_PERMS.26"
```xml
26
testowy opis
```
## GetFeature Filtry
```
?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&Filter=...
```
https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&Filter=%3Cogc:Filter%3E%3Cogc:Or%3E%3Cogc:PropertyIsEqualTo%3E%3Cogc:PropertyName%3EA_STATUS%3C/ogc:PropertyName%3E%3Cogc:Literal%3ENORMAL%3C/ogc:Literal%3E%3C/ogc:PropertyIsEqualTo%3E%3Cogc:PropertyIsEqualTo%3E%3Cogc:PropertyName%3EA_STATUS%3C/ogc:PropertyName%3E%3Cogc:Literal%3EWARNING%3C/ogc:Literal%3E%3C/ogc:PropertyIsEqualTo%3E%3C/ogc:Or%3E%3C/ogc:Filter%3E
```
https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS
&VERSION=1.0.0
&REQUEST=GetFeature
&TYPENAME=p5_default_db:TEST_PERMS
&SRSNAME=EPSG:3003
&Filter=A_STATUSNORMALA_STATUSWARNING
```
### GetFeature - Filtr ogc:PropertyIsEqualTo
```
?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&Filter=...
```
Sql Filtr:
```sql
`A_STATUS` in('NORMAL','WAITING')
```
```xml
A_STATUS
NORMAL
A_STATUS
WAITING
```
### GetFeature - Filtr ogc:PropertyIsLike
Sql Filtr:
```sql
`A_STATUS` like '%O_MA%' or `A_STATUS` like '%ARNING'
```
```xml
A_STATUS
*O#MA*
A_STATUS
*ARNING
```
### GetFeature - Filtr ogc:PropertyIsNull
```sql
( ! (`t`.`the_geom` is null) or `t`.`ID` = '2' )
```
```xml
the_geom
ID
2
```
### GetFeature - Filtr ogc:Function
```sql
( ! (`t`.`the_geom` is null) or GeometryType(`t`.`the_geom`) = 'POLYGON' )
```
```xml
the_geom
the_geom
POLYGON
```
### GetFeature - Filtr ogc IsLessThan, IsGreaterThen
```sql
(
( `t`.`A_RECORD_CREATE_DATE` < '2015-12-01' or `t`.`A_RECORD_CREATE_DATE` <= '2015-12-01' )
and ( `t`.`A_RECORD_UPDATE_DATE` > '2016-06-01' or `t`.`A_RECORD_UPDATE_DATE` >= '2016-06-01' )
)
```
POST na `wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003`
```xml
A_RECORD_CREATE_DATE
2015-12-01
A_RECORD_CREATE_DATE
2015-12-01
A_RECORD_UPDATE_DATE
2016-06-01
A_RECORD_UPDATE_DATE
2016-06-01
```
### Error - Not implemented tag
```xml
A_STATUS
*O%23MA*
```
Result:
```xml
Not Implemented tag 'ogc:UnsupportedTag'
```
### Request-URI Too Long - ogc:Filter z POST
Odczytuje ogc:Filter z Request. Przydatne w przypadku długich filtrów nie mieszczących się w limicie długości URI.
Przykład - POST na: `/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003`
```xml
A_STATUS
*O%23MA*
A_STATUS
*ARNING
```
## GetFeatureAdvanced
Dodatkowe atrybuty z informają o uprawnieniach:
- @atrybut p5:allow_create="true" - możliwość tworzenia nowego rekordu z tą kolumną
- @atrybut p5:allow_write="true" - możliwość edycji tej kolumny
- @atrybut p5:allow_read="false" - brak uprawnień do odczytania zawartości tej kolumny
## GetFeature - Hits
Parametr url dla GetFeature i GetFeatureAdvanced:
- **resultType=hits**: zwraca liczbę pasujących rekordów do zapytania
Przykład:
```
/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003
&REQUEST=GetFeatureAdvanced
&TYPENAME=p5_default_db:TEST_PERMS
&resultType=hits
```
Wynik:
```xml
```
# Modyfikacja danych
## Edycja danych
POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
```xml
OPIS
testowy opis
```
## Wprowadzanie danych
POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
```xml
test
18.44569262058692871,54.36867274376898251 18.44884659456100096,54.35193242036815064 18.48208462798003637,54.34368356535905065 18.44569262058692871,54.36867274376898251
```
Jeśli zostanie wysłana również wartość dla klucza (ID) to zostanie wykonana operacja **Update**
`24`
```xml
24
test
18.44569262058692871,54.36867274376898251 18.44884659456100096,54.35193242036815064 18.48208462798003637,54.34368356535905065 18.44569262058692871,54.36867274376898251
```
## Modyfikacja wielu danych
POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
Przykład - wprowadzenie trzech rekrodów do tabeli TEST_GEOM_LINESTRING:
```xml
test1z3
18.25240580856418049,54.48879768607960017 18.27014261382555915,54.46219247818753217
test2z3
18.2629370366881254,54.43447871996662712 18.28621659359368223,54.40621068658131065
test3z3
18.26404558701696246,54.39512518329294721 18.29841064721088273,54.39179953230643605
```
Wynik:
```
```
ID rekordów podane w tagu `` w takiej samej kolejności jak w treści zapytania.
Czyli rekord 522 ma OPIS = test1z3, 523 ma OPIS = test2z3, 524 ma OPIS = test3z3
## Usuwanie danych
POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
Usuwanie rekordów 1 i 2 z tabeli TEST_GEOM_POINT
```xml
```
## Wynik operacji
```xml
```
# Pliki
typeName: `p5_objects:File`
Obecnie działa:
- DescribeFeatureTypeAdvanced - file content is `xsd:base64Binary`
- GetFeatureAdvanced - file content returned as base64
- AddFeature
## Pliki - download
```
https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS
&VERSION=1.0.0
&REQUEST=GetFeatureAdvanced
&TYPENAME=p5_objects:File
&SRSNAME=EPSG:3003
&Filter=id35
```
Wynik:
```xml
35
blank-test-wfs.gif
64
image/gif
0
R0lGODlhAQABAIAAAP///////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
```
## Pliki - upload
POST na: `wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003`
```xml
blank.gif
R0lGODlhAQABAIAAAP///////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
```
Wynik:
```xml
```
## Pliki - wgranie pliku wraz z przypisaniem do obiektu
POST na: `wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003`
```xml
test addFeature p5_objects:TestPerms with p5_objects:File
NORMAL
blank-wfs.gif
R0lGODlhAQABAIAAAP///////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
Test Name
```
Wynik:
```xml
```