3.3. خدمة المعالم على الويب Web Feature Service (WFS)¶
يوفر معيارا WFS 1.0.0 و 1.1.0 المطبَّقان في QGIS Server واجهة HTTP للاستعلام عن المعالم الجغرافية من مشروع QGIS. يحدد طلب WFS النموذجي مشروع QGIS المراد استخدامه والطبقة المراد الاستعلام عنها.
مستندات المواصفات بحسب رقم إصدار الخدمة:
الطلبات القياسية التي يوفرها QGIS Server:
الطلب |
وصف |
|---|---|
يُرجع بيانات وصفية بصيغة XML تتضمن معلومات عن الخادم |
|
يُرجع مجموعة مختارة من المعالم |
|
يُرجع وصفًا لأنواع المعالم وخصائصها |
|
يتيح إدراج المعالم أو تحديثها أو حذفها |
3.3.1. GetCapabilities¶
المعاملات القياسية للطلب GetCapabilities وفق مواصفات OGC WFS 1.0.0 و 1.1.0:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
اسم الخدمة (WFS) |
|
نعم |
اسم الطلب (GetCapabilities) |
|
لا |
إصدار الخدمة |
إضافة إلى المعاملات القياسية، يدعم QGIS Server المعاملات الإضافية التالية:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
ملف مشروع QGIS |
VERSION¶
يتيح هذا المعامل تحديد إصدار الخدمة المراد استخدامه. القيم المتاحة للمعامل VERSION هي:
1.0.01.1.0
إذا لم يُحدَّد إصدار في الطلب، فيُستخدم 1.1.0 افتراضيًا.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&...
3.3.2. GetFeature¶
المعاملات القياسية للطلب GetFeature وفق مواصفات OGC WFS 1.0.0 و 1.1.0:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
اسم الخدمة (WFS) |
|
نعم |
اسم الطلب (GetFeature) |
|
لا |
إصدار الخدمة |
|
لا |
أسماء الطبقات |
|
لا |
تصفية المعالم حسب المعرّفات |
|
لا |
صيغة المخرجات |
|
لا |
نوع النتيجة |
|
لا |
أسماء الخصائص المراد إرجاعها |
|
لا |
الحد الأقصى لعدد المعالم المراد إرجاعها |
|
لا |
نظام الإحداثيات المرجعي |
|
لا |
ترميز المرشِّحات OGC Filter Encoding |
|
لا |
امتداد الخريطة |
|
لا |
ترتيب النتائج |
إضافة إلى المعاملات القياسية، يدعم QGIS Server المعاملات الإضافية التالية:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
ملف مشروع QGIS |
|
لا |
ترقيم الصفحات |
|
لا |
نوع الشكل الهندسي المراد إرجاعه |
|
لا |
التصفية بالتعبيرات |
TYPENAME¶
يتيح هذا المعامل تحديد أسماء الطبقات، وهو إلزامي إذا لم يُضبط FEATUREID.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&TYPENAME=countries
FEATUREID¶
يتيح هذا المعامل تحديد معرّف معلم معين، ويُكتب بالشكل typename.fid,typename.fid,....
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0,places.1
استجابة XML:
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.qgis.org/gml http://192.168.1.15/qgisserver?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=countries,places&OUTPUTFORMAT=text/xml; subtype%3Dgml/3.1.1">
<gml:boundedBy>
...
</gml:boundedBy>
<gml:featureMember>
<qgs:countries gml:id="countries.1">
...
</qgs:countries>
</gml:featureMember>
<gml:featureMember>
<qgs:places gml:id="places.1">
...
</qgs:places>
</gml:featureMember>
</wfs:FeatureCollection>
OUTPUTFORMAT¶
يمكن استخدام هذا المعامل لتحديد صيغة الاستجابة. إذا كان VERSION أكبر من أو يساوي 1.1.0، فإن GML3 هي الصيغة الافتراضية، وإلا تُستخدم GML2.
القيم المتاحة هي:
gml2text/xml; subtype=gml/2.1.2gml3text/xml; subtype=gml/3.1.1geojsonapplication/vnd.geo+json,application/vnd.geo jsonapplication/geo+jsonapplication/geo jsonapplication/json
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&FEATUREID=countries.0
&OUTPUTFORMAT=geojson
استجابة GeoJSON:
{
"type":"FeatureCollection",
"bbox":[
-180,
-90,
180,
83.6236
],
"features":[
{
"bbox":[
-61.891113,
16.989719,
-61.666389,
17.724998
],
"geometry":{
"coordinates":[
"..."
],
"type":"MultiPolygon"
},
"id":"countries.1",
"properties":{
"id":1,
"name":"Antigua and Barbuda"
},
"type":"Feature"
}
]
}
RESULTTYPE¶
يمكن استخدام هذا المعامل لتحديد نوع النتيجة المراد إرجاعها. القيم المتاحة هي:
results: السلوك الافتراضيhits: يُرجع عدد المعالم فقط
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&RESULTTYPE=hits
&...
PROPERTYNAME¶
يمكن استخدام هذا المعامل لتحديد خاصية معينة لإرجاعها. يجب ربط الخاصية بـ TYPENAME أو FEATUREID:
مثال على عنوان URL صالح:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places
على العكس من ذلك، سيُرجع عنوان URL التالي استثناءً:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&PROPERTYNAME=name
&TYPENAME=places,countries
<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.2.0">
<ServiceException code="RequestNotWellFormed">There has to be a 1:1 mapping between each element in a TYPENAME and the PROPERTYNAME list</ServiceException>
</ServiceExceptionReport>
MAXFEATURES¶
يتيح هذا المعامل تقييد عدد المعالم التي يُرجعها الطلب.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&MAXFEATURES=1000
ملاحظة
قد يفيد هذا المعامل في تحسين الأداء عندما تكون الطبقات المتجهية الأساسية ثقيلة.
SRSNAME¶
يتيح هذا المعامل الإشارة إلى نظام الإسناد المكاني لاستجابة المخرجات وكذلك نظام الإحداثيات المرجعي للمعامل BBOX، ويجب أن يُكتب بالشكل EPSG:XXXX.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&SRSNAME=EPSG:32620
FILTER¶
يتيح هذا المعامل تصفية الاستجابة بلغة Filter Encoding المعرَّفة في معيار OGC Filter Encoding. على سبيل المثال:
http://localhost/qgisserver?
SERVICE=WFS&
REQUEST=GetFeature&
TYPENAME=places&
FILTER=<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>
في حالة تعدد أسماء الأنواع (typenames)، يجب وضع المرشِّحات بين أقواس:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places,countries
&FILTER=(<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>)(<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>France</Literal></PropertyIsEqualTo></Filter>)
تصفية المعالم التي تتقاطع مع مضلع:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&VERSION=1.1.0
&TYPENAME=places
&FILTER=<Filter xmlns="http://www.opengis.net/ogc">
<Intersects>
<PropertyName>geometry</PropertyName>
<Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
<exterior>
<LinearRing>
<posList>
-0.6389 42.5922
10.2683 51.9106
14.5196 41.0320
-0.6389 42.5922
</posList>
</LinearRing>
</exterior>
</Polygon>
</Intersects>
</Filter>
BBOX¶
يتيح هذا المعامل تحديد امتداد الخريطة بوحدات نظام الإحداثيات المرجعي الحالي. يجب فصل الإحداثيات بفاصلة.
يمكن أن يحدد المعامل SRSNAME نظام الإحداثيات المرجعي للامتداد. وإذا لم يُحدَّد، يُستخدم نظام الإحداثيات المرجعي للطبقة.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&BBOX=-11.84,42.53,8.46,50.98
لا يمكن استخدام المعامل FEATUREID مع BBOX. وأي محاولة لذلك ستؤدي إلى استثناء:
<ServiceExceptionReport xmlns="http://www.opengis.net/ogc" version="1.2.0">
<ServiceException code="RequestNotWellFormed">FEATUREID FILTER and BBOX parameters are mutually exclusive</ServiceException>
</ServiceExceptionReport>
SORTBY¶
يتيح هذا المعامل ترتيب المعالم الناتجة حسب قيم الخصائص، ويجب أن يُكتب بالشكل propertyname SORTRULE.
القيم المتاحة لـ SORTRULE في حالة الترتيب التنازلي:
D+DDESC+DESC
القيم المتاحة لـ SORTRULE في حالة الترتيب التصاعدي:
A+AASC+ASC
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places
&PROPERTYNAME=name
&MAXFEATURES=3
&SORTBY=name DESC
النتيجة المقابلة:
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.qgis.org/gml http://192.168.1.15/qgisserver?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=places&OUTPUTFORMAT=text/xml; subtype%3Dgml/3.1.1">
<gml:boundedBy>
...
</gml:boundedBy>
<gml:featureMember>
<qgs:places gml:id="places.90">
<qgs:name>Zagreb</qgs:name>
</qgs:places>
</gml:featureMember>
<gml:featureMember>
<qgs:places gml:id="places.113">
<qgs:name>Yerevan</qgs:name>
</qgs:places>
</gml:featureMember>
<gml:featureMember>
<qgs:places gml:id="places.111">
<qgs:name>Yaounde</qgs:name>
</qgs:places>
</gml:featureMember>
</wfs:FeatureCollection>
GEOMETRYNAME¶
يمكن استخدام هذا المعامل لتحديد نوع الشكل الهندسي المراد إرجاعه للمعالم. القيم المتاحة هي:
extentcentroidnone
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&GEOMETRYNAME=centroid
&...
STARTINDEX¶
هذا المعامل قياسي في WFS 2.0، لكنه امتداد في WFS 1.0.0.
في الواقع، يمكن استخدامه لتخطي بعض المعالم في مجموعة النتائج، وبالاقتران مع MAXFEATURES يتيح التنقل بين النتائج صفحةً صفحة.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&STARTINDEX=2
&...
EXP_FILTER¶
يتيح هذا المعامل تصفية الاستجابة باستخدام تعبيرات QGIS. ويُستخدم المحرف ; للفصل بين المرشِّحات في حالة تعدد أسماء الأنواع.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places,countries
&EXP_FILTER="name"='Paris';"name"='France'
3.3.3. DescribeFeatureType¶
المعاملات القياسية للطلب DescribeFeatureType وفق مواصفات OGC WFS 1.0.0 و 1.1.0:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
اسم الخدمة (WFS) |
|
نعم |
اسم الطلب (DescribeFeatureType) |
|
لا |
إصدار الخدمة |
|
لا |
صيغة الاستجابة |
|
لا |
أسماء الطبقات |
إضافة إلى المعاملات القياسية، يدعم QGIS Server المعاملات الإضافية التالية:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
ملف مشروع QGIS |
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=DescribeFeatureType
&TYPENAME=countries
استجابة المخرجات:
<schema xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:qgs="http://www.qgis.org/gml" xmlns:gml="http://www.opengis.net/gml" targetNamespace="http://www.qgis.org/gml" version="1.0" elementFormDefault="qualified">
<import schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd" namespace="http://www.opengis.net/gml"/>
<element type="qgs:countriesType" substitutionGroup="gml:_Feature" name="countries"/>
<complexType name="countriesType">
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element minOccurs="0" type="gml:MultiPolygonPropertyType" maxOccurs="1" name="geometry"/>
<element type="long" name="id"/>
<element nillable="true" type="string" name="name"/>
</sequence>
</extension>
</complexContent>
</complexType>
</schema>
3.3.4. Transaction¶
يتيح هذا الطلب تحديث معلم أو أكثر أو حذفه أو إضافته بواسطة مستند XML. يمكن تنفيذ إجراء الحذف بطلب POST وكذلك بالمعامل OPERATION، بينما لا يمكن تنفيذ عمليتي الإضافة و التحديث إلا بطلب POST.
المعاملات القياسية للطلب Transaction وفق مواصفات OGC WFS 1.0.0 و 1.1.0:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
اسم الخدمة (WFS) |
|
نعم |
اسم الطلب (Transaction) |
|
لا |
إصدار الخدمة |
|
لا |
ترميز المرشِّحات OGC Filter Encoding |
|
لا |
امتداد الخريطة |
|
لا |
تصفية المعالم حسب المعرّفات |
|
لا |
أسماء الطبقات |
إضافة إلى المعاملات القياسية، يدعم QGIS Server المعاملات الإضافية التالية:
المعامل |
إلزامي |
وصف |
|---|---|---|
نعم |
ملف مشروع QGIS |
|
لا |
تحديد العملية |
|
لا |
التصفية بالتعبيرات |
OPERATION¶
يتيح هذا المعامل حذف معلم دون استخدام طلب POST مع مستند XML مخصص.
مثال على عنوان URL:
http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=Transaction
&OPERATION=DELETE
&FEATUREID=24
ملاحظة
المعاملات FEATUREID و BBOX و FILTER متنافية فيما بينها، وتُعطى الأولوية بهذا الترتيب.
إضافة معالم¶
مثال على طلب POST:
wget --post-file=add.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
مع المستند add.xml:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows">
<wfs:Insert idgen="GenerateNew">
<qgs:places>
<qgs:geometry>
<gml:Point srsDimension="2" srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
<gml:coordinates decimal="." cs="," ts=" ">-4.6167,48.3833</gml:coordinates>
</gml:Point>
</qgs:geometry>
<qgs:name>Locmaria-Plouzané</qgs:name>
</qgs:places>
</wfs:Insert>
</wfs:Transaction>
تحديث معالم¶
مثال على طلب POST:
wget --post-file=update.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
مع المستند update.xml:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows">
<wfs:Update typeName="places">
<wfs:Property>
<wfs:Name>name</wfs:Name>
<wfs:Value>Lutece</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:FeatureId fid="24"/>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
حذف معالم¶
مثال على طلب POST:
wget --post-file=delete.xml "http://localhost/qgisserver?SERVICE=WFS&REQUEST=Transaction"
مع المستند delete.xml:
<?xml version="1.0" encoding="UTF-8"?>
<wfs:Transaction service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/wfs" updateSequence="0" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows">
<wfs:Delete typeName="places">
<ogc:Filter>
<ogc:FeatureId fid="24"/>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>