WFS: Web Feature Service ile Vektör Veri Erişimi
WFS (Web Feature Service), OGC tarafından standartlaştırılan ve web üzerinden vektör coğrafi özellik (feature) verisi sorgulamayı ve almayı sağlayan bir protokoldür.
WFS Nedir?
Web Feature Service (WFS), Open Geospatial Consortium (OGC) tarafından standartlaştırılan bir web servisi protokolüdür. WMS'in harita görüntüsü döndürmesinin aksine WFS, vektör coğrafi özellik (feature) verilerini GML, GeoJSON veya Shapefile gibi formatlarda döndürür. Bu sayede istemci tarafında veri manipülasyonu ve analizi mümkün olur.
WFS ve WMS Karşılaştırması
| Özellik | WMS | WFS |
|---|---|---|
| Döndürdüğü | Harita görüntüsü (PNG/JPEG) | Vektör veri (GML/GeoJSON) |
| İstemci kontrolü | Sınırlı (bbox, boyut) | Tam (filtre, öznitelik) |
| Bant genişliği | Değişken (görüntü boyutu) | Veri miktarına bağlı |
| Analiz | İstemcide imkansız | İstemcide mümkün |
| Güncelleme | Hayır | WFS-T ile evet |
WFS Sürümleri
- WFS 1.0.0 (2002): Temel özellik alma ve filtreleme.
- WFS 1.1.0 (2005): GML 3 desteği, koordinat sistemi dönüşümü.
- WFS 2.0.0 (2010): Stored queries, paging desteği, gelişmiş sorgulama.
Temel WFS İstekleri
GetCapabilities
Sunucunun yeteneklerini ve mevcut feature tiplerini listeler:
https://example.com/geoserver/wfs?
SERVICE=WFS
&VERSION=2.0.0
&REQUEST=GetCapabilities
DescribeFeatureType
Bir feature tipinin öznitelik şemasını (XSD formatında) döndürür:
https://example.com/geoserver/wfs?
SERVICE=WFS&VERSION=2.0.0
&REQUEST=DescribeFeatureType
&TYPENAMES=cbs:iller
GetFeature
Özellikleri sorgular ve döndürür:
# Tüm nüfusu 1 milyonun üzerindeki iller
https://example.com/geoserver/wfs?
SERVICE=WFS&VERSION=2.0.0
&REQUEST=GetFeature
&TYPENAMES=cbs:iller
&OUTPUTFORMAT=application/json
&CQL_FILTER=nufus>1000000
WFS-T: Transactional WFS
WFS'in transactional versiyonu (WFS-T), sadece veri okumakla kalmaz; aynı zamanda veri ekleme, güncelleme ve silme işlemlerine de izin verir. Bu sayede web tabanlı GIS editörleri oluşturmak mümkündür.
<wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs">
<wfs:Insert>
<cbs:iller>
<cbs:il_adi>Test İl</cbs:il_adi>
<cbs:geom>
<gml:Point srsName="EPSG:4326">
<gml:pos>32.85 39.93</gml:pos>
</gml:Point>
</cbs:geom>
</cbs:iller>
</wfs:Insert>
</wfs:Transaction>
CQL ve OGC Filtre Dili
WFS sorgulamalarında iki filtre dili kullanılır:
- CQL (Common Query Language): Daha basit ve okunabilir sözdizimi. GeoServer tarafından desteklenir.
- OGC Filter Encoding: XML tabanlı resmi OGC standardı. Tüm WFS sunucuları destekler.
# CQL örnekleri
nufus > 1000000 AND il_adi LIKE 'İ%'
BBOX(geom, 28.0, 36.0, 45.0, 42.0)
DWITHIN(geom, POINT(32.86 39.93), 100, kilometers)
WFS'i JavaScript'te Kullanma
// OpenLayers ile WFS katmanı
import VectorSource from 'ol/source/Vector';
import GeoJSON from 'ol/format/GeoJSON';
const wfsSource = new VectorSource({
url: 'https://example.com/geoserver/wfs?service=WFS&version=2.0.0' +
'&request=GetFeature&typenames=cbs:iller&outputFormat=application/json',
format: new GeoJSON()
});
Performans İpuçları
- Büyük veri setlerinde
countparametresiyle sonuç sayısını sınırlayın. - Sadece ihtiyaç duyulan öznitelikleri
PROPERTYNAMEile belirtin. - Mekansal filtre (
BBOX) kullanarak gereksiz veri transferini önleyin. - Sunucu tarafında mekansal indeks (PostGIS'te GIST indeksi) oluşturun.