중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.

3.3. WFS(웹 피처 서비스)

QGIS 서버에 구현된 WFS 1.0.0 및 1.1.0 표준은 QGIS 프로젝트로부터 지리 피처를 쿼리할 수 있는 HTTP 인터페이스를 제공합니다. 전형적인 WFS 요청은 사용할 QGIS 프로젝트와 쿼리할 레이어를 정의합니다.

서비스 버전에 따른 사양 문서:

QGIS 서버가 제공하는 표준 요청:

요청

설명

GetCapabilities

서버에 대한 정보를 담은 XML 메타데이터를 반환

GetFeature

피처 집합을 반환

DescribeFeatureType

피처 유형 및 속성의 설명을 반환

Transaction

피처를 삽입, 업데이트, 삭제 가능

3.3.1. GetCapabilities

OGC WFS 1.0.0 및 1.1.0 사양에 따른 GetCapabilities 요청용 표준 파라미터:

파라미터

필수 여부

설명

SERVICE

Ο

서비스(WFS)의 이름

REQUEST

Ο

요청(GetCapabilities)의 이름

VERSION

X

서비스의 버전

표준 파라미터 이외에도, QGIS 서버는 다음과 같은 추가 파라미터를 지원합니다:

파라미터

필수 여부

설명

MAP

Ο

QGIS 프로젝트 파일

VERSION

이 파라미터는 사용할 서비스의 버전을 지정할 수 있습니다. VERSION 파라미터가 사용할 수 있는 값은 다음과 같습니다:

  • 1.0.0

  • 1.1.0

요청에서 버전을 지정하지 않을 경우, 1.1.0 을 기본값으로 사용합니다.

URL 예시:

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&...

3.3.2. GetFeature

OGC WFS 1.0.0 및 1.1.0 사양에 따른 GetFeature 요청용 표준 파라미터:

파라미터

필수 여부

설명

SERVICE

Ο

서비스(WFS)의 이름

REQUEST

Ο

요청(GetFeature)의 이름

VERSION

X

서비스의 버전

TYPENAME

X

레이어 이름

FEATUREID

X

피처를 ID로 필터링

OUTPUTFORMAT

X

출력물 포맷

RESULTTYPE

X

산출물 유형

PROPERTYNAME

X

반환할 속성의 이름

MAXFEATURES

X

반환할 피처의 최대 개수

SRSNAME

X

좌표계

FILTER

X

OGC 필터 인코딩

BBOX

X

맵 범위

SORTBY

X

산출물 정렬

표준 파라미터 이외에도, QGIS 서버는 다음과 같은 추가 파라미터를 지원합니다:

파라미터

필수 여부

설명

MAP

Ο

QGIS 프로젝트 파일

STARTINDEX

X

페이지 번호 붙이기

GEOMETRYNAME

X

반환할 도형의 유형

EXP_FILTER

X

표현식 필터링

TYPENAME

이 파라미터를 통해 레이어 이름을 지정할 수 있습니다. FEATUREID 파라미터를 설정하지 않은 경우 반드시 이 파라미터를 지정해줘야만 합니다.

URL 예시:

http://localhost/qgisserver?
SERVICE=WFS
&VERSION=1.1.0
&REQUEST=GetFeature
&TYPENAME=countries

FEATUREID

이 파라미터를 통해 특정 피처의 ID를 지정할 수 있습니다. 파라미터 서식은 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를 사용합니다.

다음과 같은 값으로 설정할 수 있습니다:

  • gml2

  • text/xml; subtype=gml/2.1.2

  • gml3

  • text/xml; subtype=gml/3.1.1

  • geojson

  • application/vnd.geo+json,

  • application/vnd.geo json

  • application/geo+json

  • application/geo json

  • application/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

이 파라미터를 통해 OGC 필터 인코딩 표준 이 정의하는 필터 인코딩(Filter Encoding) 으로 응답을 필터링할 수 있습니다. 다음은 그 예시입니다:

http://localhost/qgisserver?
SERVICE=WFS&
REQUEST=GetFeature&
TYPENAME=places&
FILTER=<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName><Literal>Paris</Literal></PropertyIsEqualTo></Filter>

TYPENAME 이 여러 개인 경우, 필터를 다음과 같이 괄호로 묶어줘야 합니다:

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

BBOX 파라미터는 FEATUREID 파라미터와 함께 사용할 수 없습니다. 어떻게 시도하더라도 예외가 발생할 것입니다:

<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

  • +D

  • DESC

  • +DESC

오름차순으로 정렬하는 경우 SORTRULE 에 다음과 같은 값을 설정할 수 있습니다:

  • A

  • +A

  • ASC

  • +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

이 파라미터는 피처에 대해 반환할 도형의 종류를 지정할 수 있습니다. 사용할 수 있는 값은 다음과 같습니다:

  • extent

  • centroid

  • none

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 표현식으로 필터링할 수 있습니다. TYPENAME 이 여러 개인 경우 ; 문자를 이용해서 필터를 구분합니다.

URL 예시:

http://localhost/qgisserver?
SERVICE=WFS
&REQUEST=GetFeature
&TYPENAME=places,countries
&EXP_FILTER="name"='Paris';"name"='France'

3.3.3. DescribeFeatureType

OGC WFS 1.0.0 및 1.1.0 사양에 따른 DescribeFeatureType 요청용 표준 파라미터:

파라미터

필수 여부

설명

SERVICE

Ο

서비스(WFS)의 이름

REQUEST

Ο

요청(DescribeFeatureType)의 이름

VERSION

X

서비스의 버전

OUTPUTFORMAT

X

응답 포맷

TYPENAME

X

레이어 이름

표준 파라미터 이외에도, QGIS 서버는 다음과 같은 추가 파라미터를 지원합니다:

파라미터

필수 여부

설명

MAP

Ο

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 요청을 통해서만 달성할 수 있습니다.

OGC WFS 1.0.0 및 1.1.0 사양에 따른 Transaction 요청용 표준 파라미터:

파라미터

필수 여부

설명

SERVICE

Ο

서비스(WFS)의 이름

REQUEST

Ο

요청(Transaction)의 이름

VERSION

X

서비스의 버전

FILTER

X

OGC 필터 인코딩

BBOX

X

맵 범위

FEATUREID

X

피처를 ID로 필터링

TYPENAME

X

레이어 이름

표준 파라미터 이외에도, QGIS 서버는 다음과 같은 추가 파라미터를 지원합니다:

파라미터

필수 여부

설명

MAP

Ο

QGIS 프로젝트 파일

OPERATION

X

작업을 지정

EXP_FILTER

X

표현식 필터링

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>