Skip To Content

Comunicación con un servicio WFS en un navegador Web

El recurso online de cada operación admitida por un servidor WFS compatible es un localizador de recursos uniforme (URL) de HTTP, de modo que un servicio WFS se puede considerar como un servicio de Transferencia de estado representacional (REST). A través de los parámetros de la dirección URL, puede utilizar estas operaciones para obtener metadatos de servicio, información del tipo de entidad y entidades codificadas de GML desde el servicio WFS. Estas operaciones y parámetros se detallan en las Especificaciones WFS del OGC.

Tipos de clientes

Los servicios WFS se pueden utilizar en cualquier cliente que admita WFS. Casi siempre, un navegador Web es el cliente básico de un servicio WFS. Las solicitudes WFS pueden realizarse mediante HTTP y las respuestas o excepciones se devuelven a través del navegador. Todos los servicios WFS son compatibles con tres operaciones principales: GetCapabilities, DescribeFeatureType y GetFeature. La implementación de ArcGIS Server de WFS 2.0.0 define operaciones adicionales: GetFeatureByID, ListStoredQueries y DescribeStoredQueries.

Existen muchos clientes de terceros disponibles para utilizar servicios WFS. Para utilizar los servicios WFS, el cliente debe ser compatible con WFS 1.0.0, 1.1.0 o 2.0.0 y el perfil de entidades simples de GML. Además, ArcGIS Desktop puede utilizar los servicios WFS. Si desea obtener ayuda sobre el uso de los servicios WFS en ArcMap, consulte Agregar un servicio de WFS a ArcMap.

Estructura de la dirección URL de WFS

Para conectarse al servicio, es necesario conocer la dirección URL, que sigue este patrón:

http://gisserver.domain.com:6080/arcgis/services/<folder name (if applicable)>/<service name>/MapServer/WFSServer?

  • El nombre del servidor es el nombre del equipo del servidor Web.
  • El número de puerto es el puerto de su equipo del servidor Web que utiliza para comunicarse con otros equipos.

Por ejemplo, si ha habilitado el recurso WFS en el servicio de mapas WFSDemoService en una carpeta llamada DemoFolder en el servidor gisserver.domain.com que se ejecuta en el puerto 6080, la URL de GetCapabilities sería:

http://gisserver.domain.com:6080/arcgis/services/DemoFolder/WFSDemoService/MapServer/WFSServer?service=WFS&request=GetCapabilities

Utilizar filtros

El parámetro Filtro se puede utilizar en las solicitudes de WFS para obtener entidades específicas en un servicio de WFS. El beneficio del parámetro Filtro es que forma parte de la codificación de par de palabra clave-valor estándar definido en la sección 9.5 de la Especificación de WFS 1.1 y se puede incorporar al final de solicitudes de HTTP. Los servicios WFS 1.0.0 y 1.1.0 utilizan la especificación de implementación de codificación de filtro (FE) de OpenGIS OGC, versión 1.1.0. WFS 2.0.0 utiliza la versión 2.0.0 de la especificación de filtro.

La tabla a continuación enumera los filtros que puede aplicar:

GeometríaEspacialLógicaComparaciónOrdenar

Contorno

BBOX

And

EqualTo

SortBy*

Point

Es igual a

O

NotEqualTo

Multipunto

Inconexa

No

LessThan

Cadena de texto

Interseca

GreaterThan

Polygon

Cruza

LessThanOrEqualTo

Toca

GreaterThanOrEqualTo

Dentro de

Me gusta

Contiene

Entre

Superpone

NullCheck

Nota:

*El filtro SortBy únicamente se puede aplicar a servicios WFS basados en los datos almacenados en una geodatabase corporativa.

Por ejemplo, si creó un Tipo de entidad denominado "grupos de bloques" en un servicio de WFS, puede solicitar entidades de grupos de bloques dentro de la extensión -122.423192682619, 37.7877919206256, -122.421377806544, 37.7893634225143 enviando la siguiente solicitud de GetFeature:

http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:BBOX><ogc:PropertyName>Shape</ogc:PropertyName><gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:coordinates>37.7877919206256,-122.423192682619 37.7893634225143,-122.421377806544</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>

Si desea solicitar una entidad de grupos de bloques que contenga una entidad de punto específica, como 122,431577, 37,749936, puede enviar la siguiente solicitud de GetFeature:

http://gisserver.domain.com:6080/arcgis/services/playground/sanfrancisco_wfs/MapServer/WFSServer?service=WFS&request=GetFeature&version=1.1.0&typename=esri:blockgroups&Filter=<ogc:Filter><ogc:Contains><ogc:PropertyName>Shape</ogc:PropertyName><gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326"><gml:pos srsName="urn:x-ogc:def:crs:EPSG:4326">37.749936 -122.431577</gml:pos></gml:Point></ogc:Contains></ogc:Filter>

Nota:

WFS requiere prefijos de espacio de nombre incluidos en la cadena de texto XML del filtro. Además, para evitar que los navegadores Web o servidores Web completen conversiones incorrectas, la dirección URL codifica la cadena de caracteres XML del filtro antes de enviarla al servidor.

Consumir el servicio de WFS 1.0.0 o 1.1.0 en un navegador Web

Los siguientes ejemplos utilizan los parámetros de dirección URL para comunicarse con los servicios WFS y WFS-T 1.0.0 y 1.1.0 en un navegador Web. Para aprender a utilizar las operaciones de WFS 2.0.0 en un navegador web, consulte la sección Consumir un servicio de WFS 2.0 en un navegador web a continuación.

GetCapabilities

Esta solicitud devuelve todos los tipos de entidades y funciones disponibles a través del servicio en formato GML. Para utilizar la operación GetCapabilities, copie y pegue la URL del servicio WFS en la barra de direcciones y agregue ?service=WFS&request=getcapabilities al final de la URL.

Ejemplo de URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&request=GetCapabilities

El siguiente gráfico es un ejemplo de una funcionalidad devuelta en la operación GetCapabilities:

Funcionalidad devuelta en la operación GetCapabilities

La operación GetCapabilities también devuelve una lista de todas las clases de entidades y tablas disponibles:

Clases de entidad y tablas disponibles devueltas en la operación GetCapabilities

DescribeFeatureType

Esta solicitud describe la información del campo sobre una o más entidades en el servicio de WFS. Incluye los nombres de campo, los tipos de campo, los valores de campo máximo y mínimo permitidos y cualquier otra restricción establecida en un campo de las clases de entidad o tablas.

Para utilizar la operación DescribeFeatureType, copie y pegue la dirección URL del WFS en la barra de direcciones y agregue ?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0 al final de la dirección URL. Esto devuelve toda la información del campo de cada una de las tablas y tipos de entidad disponibles en el servicio de entidades.

Ejemplo de URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&VERSION=1.1.0

Clases de entidad, información del campo y tablas devueltas en la operación DescribeFeatureType

Agregar filtros

Puede también especificar una única tabla o clase de entidad de la que desea información del campo incorporando la siguiente solicitud al final de la dirección URL con el nombre de la tabla o tipo de entidad:

?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&typeName=<enter feature type here>

En el siguiente ejemplo, la solicitud DescribeFeatureType se utiliza para identificar la información del campo para el tipo de entidad denominado continente:

Ejemplo de URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TypeName=continent

La clase de entidad Continente y su información del campo correspondiente devueltas en la operación filtrada DescribeFeatureType

GetFeature

Esta solicitud devuelve información sobre tipos de entidad específicos disponibles a través del servicio WFS.

Para utilizar la operación GetFeature en un navegador web, copie y pegue la URL del WFS en la barra de direcciones y agregue ?service=WFS&version=1.1.0&request=GetFeature&typeName=<enter feature type here> al final de la URL. Esto devuelve toda la información sobre atributos y geometría de cada entidad o fila en el tipo de entidad.

Ejemplo de URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities

Información sobre atributos y geometría de la clase de entidad de ciudades devuelta en la operación GetFeature

Agregar filtros

También puede agregar filtros en la solicitud para refinar los resultados obtenidos. Por ejemplo, puede solicitar todas las ciudades dentro un intervalo especificado de coordenadas. En el ejemplo siguiente, tres ciudades están dentro de un intervalo especificado de coordenadas:

Ejemplo de URL: http://gisserver.domain.com:6080/arcgis/services/wfs_services/enterprise_wfs/MapServer/WFSServer?service=WFS&version=1.1.0&request=GetFeature&typeName=cities&BBOX=46.90,-76.21,42.12,-72.88

Ciudades dentro del rango especificado de coordenadas devueltas en la operación filtrada GetFeature

Insertar

Insertar se usa para crear nuevas entidades en una sola petición de transacción. De forma predeterminada, el estado inicial para que se cree una entidad se expresa con GML3 y debe validar con relación a un esquema de aplicación GML3 generado por la operación DescribeFeatureType.

Por ejemplo, en la siguiente muestra POST se inserta una entidad de puntos que representa una ciudad:

<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">>
  <wfs:Insert>
    <esri:Cities>
      <esri:NAME>Tofino</esri:NAME>
      <esri:CAPITAL>N</esri:CAPITAL>
      <esri:PROV_NAME>British Columbia</esri:PROV_NAME>
      <esri:POPULATION>12345</esri:POPULATION>
      <esri:RepRowID>1000</esri:RepRowID>
      <esri:Shape>
        <gml:Point>
          <gml:coordinates>59.163182034 -133.844892907</gml:coordinates>
        </gml:Point>
      </esri:Shape>
    </esri:Cities>
  </wfs:Insert>
</wfs:Transaction>

Actualizar

Actualizar se usa para actualizar una entidad o entidades (de un solo tipo) en una sola petición de transacción.

El elemento <Update> contiene uno o más elementos <Property> que especifican el nombre y valor de reemplazo de una propiedad que pertenece al tipo de entidad indicado usando el atributo obligatorio typeName. Un elemento <Property> contiene un elemento <Name> que contiene el nombre de la propiedad de la entidad que se va a modificar y un elemento <Value> opcional que contiene el valor de reemplazo de la propiedad de la entidad con nombre. La omisión del elemento <Value> significa que debe asignarse a la propiedad un valor NULO. En el caso de que la propiedad no se pueda anular, WFS debe generar una excepción que indique que el valor NULO no está permitido.

Por ejemplo, en la siguiente muestra POST se actualiza una entidad de puntos en un dataset llamado cities:

<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "1.1.0" service="WFS">
  <wfs:Update typeName="esri:cities">
    <wfs:Property>
    <wfs:Name>POPULATION</wfs:Name>
    <wfs:Value>300000</wfs:Value>
  </wfs:Property>
  <ogc:Filter>
    <ogc:PropertyIsEqualTo>
      <ogc:PropertyName>NAME</ogc:PropertyName>
      <ogc:Literal>Halifax</ogc:Literal>
    </ogc:PropertyIsEqualTo>
  </ogc:Filter>
  </wfs:Update>
</wfs:Transaction>

Eliminar

Eliminar se usa para eliminar una o más entidades (de un solo tipo) en una sola petición de transacción. Eliminar se define usando el elemento <Filter>. En el caso de que el elemento <Filter> no identifique ninguna instancia de entidades para eliminarla, la solicitud de eliminación se ignora.

Por ejemplo, en la siguiente muestra POST se eliminan dos entidades en un dataset llamado cities:

<wfs:Transaction xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:esri="http://www.esri.com" version = "2.0.0" service="WFS">
  <wfs:Delete typeName="esri:cities">
    <ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>NAME</ogc:PropertyName>
          <ogc:Literal>Churchill</ogc:Literal>
        </ogc:PropertyIsEqualTo>
    </ogc:Filter>
  </wfs:Delete>
  <wfs:Delete typeName="esri:cities">
    <ogc:Filter xmlns:ogc='http://www.opengis.net/ogc'>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>NAME</ogc:PropertyName>
          <ogc:Literal>Montreal</ogc:Literal>
        </ogc:PropertyIsEqualTo>
    </ogc:Filter>
  </wfs:Delete>
</wfs:Transaction>

Consumir un servicio de WFS 2.0 en un navegador web

La implementación de ArcGIS Server de la especificación WFS 2.0.0 aborda las entidades obligatorias del perfil WFS básico, como se indica en la especificación de WFS 2.0. Esto incluye las operaciones GetCapabilities, DescribeFeatureType y GetFeature (descritas anteriormente). La implementación de WFS 2.0 también admite transacciones, consultas almacenadas y paginación de respuestas, que no forman parte del perfil WFS básico.

Transacciones

La operación de transacción se utiliza para describir operaciones de transformación de datos aplicadas a instancias de entidades en un servicio WFS. Con la operación de transacción, los clientes pueden crear, modificar, sustituir y eliminar entidades en WFS. Cuando finaliza la transacción, WFS genera un documento de respuesta XML que indica el estado finalizado de la operación.

Consultas almacenadas

Las consultas almacenadas permiten que WFS 2.0 almacene las consultas de filtro complejas y que estas se ejecuten mediante una solicitud básica. Para conseguir el mismo resultado con WFS 1.0.0 o 1.1.0, debe escribir un filtro mediante una especificación de codificación y anexarlo a la URL de WFS. La configuración de consultas almacenadas proporciona las siguientes ventajas que amplían el uso de WFS 2.0 en aplicaciones:

  • Las consultas complejas se pueden racionalizar para que se ejecuten como solicitudes HTTP GET.
  • Las consultas almacenadas pueden reducir los costes de desarrollo de aplicaciones ya que se pueden configurar para que admitan consultas específicas, en lugar de complejas consultas ad hoc y expresiones XPath.
  • Es posible establecer interfaces RESTful encima de WFS conjuntamente con HTTP GET/POST y SOAP para habilitar WFS de modo que pueda utilizarse con aplicaciones cliente ligeras.

Las operaciones siguientes están disponibles para admitir las consultas almacenadas: GetFeatureByID, ListStoredQueries y DescribeStoredQueries (descritas a continuación).

Crear un archivo de consulta almacenada

Un archivo de consulta almacenada es un archivo XML que mantiene una lista de consultas almacenadas creadas por el editor que son de interés para un servicio concreto. Para utilizar consultas almacenadas con WFS 2.0, cree un archivo de consulta almacenada y configure el servicio para que utilice como referencia la dirección URL de su archivo de consultas almacenadas.

El siguiente ejemplo de archivo de consulta almacenada funciona con el servicio de mapas SampleWorldCities suministrado con ArcGIS Server. Puede crear el archivo y configurar el servicio para que lo utilice siguiendo las instrucciones contenidas en Configurar un servicio WFS para utilizar consultadas almacenadas. También puede modificar el archivo para que funcione con un servicio WFS diferente.

<?xml version="1.0" encoding="utf-8" ?>
<wfs:StoredQueryList
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:fes="http://www.opengis.net/fes/2.0"
  xmlns:gml="http://www.opengis.net/gml"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:myns="http://www.someserver.com/myns"
  xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"
  service="WFS"
  version="2.0.0">
  <wfs:StoredQueryDefinition id="urn:StoredQueries:AttributeDemo">
    <wfs:Title>Attribute request</wfs:Title>
    <wfs:Abstract>test Attribute request</wfs:Abstract>
    <wfs:Parameter name="myrank" type="xsd:double"/>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Literal>POP_RANK</fes:Literal>
            <fes:Literal>${myrank}</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialDemo">
      <wfs:Title>Spatial request</wfs:Title>
      <wfs:Abstract>test Spatial Request</wfs:Abstract>
      <wfs:Parameter name="coordinates" type="xsd:string"/>
      <wfs:QueryExpressionText
      returnFeatureTypes="myns:Cities"
      language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
      isPrivate="false">
      <wfs:Query typeName='myns:Cities'>
        <ogc:Filter>
          <ogc:BBOX>
            <ogc:PropertyName>Shape</ogc:PropertyName>
            <gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
              <gml:coordinates>${coordinates}</gml:coordinates>
            </gml:Box>
          </ogc:BBOX>
        </ogc:Filter>
      </wfs:Query>
      </wfs:QueryExpressionText>
    </wfs:StoredQueryDefinition>    
  <wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialAndAttributeDemo">
      <wfs:Title>Spatial and Attribute Request</wfs:Title>
      <wfs:Abstract>Select all cities with POP > 12000000 and BBOX (0,0,180,90)</wfs:Abstract>
      <wfs:QueryExpressionText
      returnFeatureTypes="myns:Cities"
      language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
      isPrivate="false">
      <wfs:Query typeName='myns:Cities'>
        <ogc:Filter>
          <fes:And>
            <ogc:BBOX>
              <ogc:PropertyName>Shape</ogc:PropertyName>
              <gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
                <gml:coordinates>0,0 90,180</gml:coordinates>
              </gml:Box>
            </ogc:BBOX>
            <fes:PropertyIsGreaterThan>
              <fes:Literal>POP</fes:Literal>
              <fes:Literal>12000000</fes:Literal>
            </fes:PropertyIsGreaterThan>
          </fes:And>
        </ogc:Filter>
      </wfs:Query>
      </wfs:QueryExpressionText>
    </wfs:StoredQueryDefinition>    
  <wfs:StoredQueryDefinition id="urn:StoredQueries:QueryCitiesByID">
    <wfs:Title>Select feature by ID</wfs:Title>
    <wfs:Abstract>test selecting feature by ID</wfs:Abstract>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
    <wfs:Title>urn:ogc:def:query:OGC-WFS::GetFeatureById predefined stored query</wfs:Title>
    <wfs:Abstract>This query support all layers in the map</wfs:Abstract>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities,myns:Continent,myns:World"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <!-- Cities -->
      <wfs:Query typeName="myns:Cities">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <!-- Continent -->
      <wfs:Query typeName="myns:Continent">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <!-- World -->
      <wfs:Query typeName="myns:World">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>OBJECTID</ogc:Literal>
            <ogc:Literal>${ID}</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <!-- -->
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionCHAR_LENGTH">
    <wfs:Title>Function CHAR_LENGTH</wfs:Title>
    <wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Cities"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Function name="CHAR_LENGTH">
              <fes:Literal>CITY_NAME</fes:Literal>
            </fes:Function>
            <fes:Literal>2</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:FunctionSUBSTRING">
    <wfs:Title>Function CHAR_LENGTH</wfs:Title>
    <wfs:Abstract>test Function CHAR_LENGTH</wfs:Abstract>
    <wfs:QueryExpressionText>
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Function name="SUBSTRING">
              <fes:Literal>CITY_NAME</fes:Literal>
              <fes:Literal>2</fes:Literal>
              <fes:Literal>3</fes:Literal>
            </fes:Function>
            <fes:Literal>os</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:MyStoredQuery">
    <wfs:Title>MyStoredQuery</wfs:Title>
    <wfs:Abstract>some tested MyStoredQuery</wfs:Abstract>
    <wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
    <wfs:QueryExpressionText
    returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
    language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
    isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <ogc:Filter>
          <ogc:Within>
            <ogc:ValueReference>Shape</ogc:ValueReference>
            ${AreaOfInterest}
          </ogc:Within>
        </ogc:Filter>
      </wfs:Query>
      <wfs:Query typeName="myns:cities">
        <ogc:Filter>
          <ogc:PropertyIsEqualTo>
            <ogc:Literal>POP_RANK</ogc:Literal>
            <ogc:Literal>3</ogc:Literal>
          </ogc:PropertyIsEqualTo>
        </ogc:Filter>
      </wfs:Query>
      <wfs:Query typeNames="myns:Parks">
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>geometry</fes:ValueReference>
            ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
      <wfs:Query typeNames="myns:Lakes">
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>region</fes:ValueReference>
            ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
      <wfs:Query typeNames="myns:Rivers">
        <fes:Filter>
          <fes:Within>
            <fes:ValueReference>region</fes:ValueReference>
            ${AreaOfInterest}
          </fes:Within>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:FeaturesInPolygon">
      <wfs:Title>Features In Polygon</wfs:Title>
      <wfs:Abstract>Find all the features in a Polygon.</wfs:Abstract>
      <wfs:Parameter name="AreaOfInterest" type="gml:PolygonPropertyType"/>
      <wfs:QueryExpressionText
      returnFeatureTypes="myns:Parks myns:Lakes myns:Rivers"
      language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression"
      isPrivate="false">
        <wfs:Query typeNames="myns:Parks">
          <fes:Filter>
            <fes:Within>
              <fes:ValueReference>geometry</fes:ValueReference>
              ${AreaOfInterest}
            </fes:Within>
          </fes:Filter>
        </wfs:Query>
        <wfs:Query typeNames="myns:Lakes">
          <fes:Filter>
            <fes:Within>
              <fes:ValueReference>region</fes:ValueReference>
              ${AreaOfInterest}
            </fes:Within>
          </fes:Filter>
        </wfs:Query>
        <wfs:Query typeNames="myns:Rivers">
          <fes:Filter>
            <fes:Within>
              <fes:ValueReference>region</fes:ValueReference>
              ${AreaOfInterest}
            </fes:Within>
          </fes:Filter>
        </wfs:Query>
      </wfs:QueryExpressionText>
    </wfs:StoredQueryDefinition>    
  </wfs:StoredQueryList>

GetFeatureByID

La operación GetFeatureByID selecciona un solo argumento, denominado id o tipo de xsd:string y devuelve una sola entidad cuyo identificador es igual al valor especificado del argumento id.

El siguiente ejemplo de URL invoca la consulta almacenada GetFeatureByID para obtener y mostrar una sola entidad:

http://gisserver.domain.com/arcgis/services/SampleWorldCities/MapServer/WFSServer?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&STOREDQUERY_ID=urn:ogc:def:query:OGC-WFS::GetFeatureById&ID=Cities.1

ListStoredQueries

La operación ListStoredQueries enumera las consultas almacenadas disponibles en ArcGIS Server. El cliente puede ejecutar una consulta almacenada por vez, por ejemplo:

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=ListStoredQueries&service=WFS&version=2.0.0

<wfs:ListStoredQueriesResponse version="2.0.0" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.opengis.net/ogc http://schemas.opengis.net/filter/2.0/filter.xsd http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsAll.xsd http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/fes/2.0 http://schemas.opengis.net/filter/2.0/filterAll.xsd">
  <wfs:StoredQuery id="urn:StoredQueries:AttributeDemo">
    <ows:Title>Attribute request</ows:Title>
    <ows:Abstract>test Attribute request</ows:Abstract>
  </wfs:StoredQuery>
  <wfs:StoredQuery id="urn:StoredQueries:SpatialDemo">
    <ows:Title>Spatial request</ows:Title>
    <ows:Abstract>test Spatial Request</ows:Abstract>
  </wfs:StoredQuery>
  <wfs:StoredQuery id="urn:StoredQueries:SpatialAndAttributeDemo">
    <ows:Title>Spatial and Attribute Request</ows:Title>
    <ows:Abstract>Select all cities with POP > 12000000 and BBOX (0,0,180,90)</ows:Abstract>
  </wfs:StoredQuery><wfs:StoredQuery id="urn:StoredQueries:QueryCitiesByID">
    <ows:Title>Select feature by ID</ows:Title>
    <ows:Abstract>test selecting feature by ID</ows:Abstract>
  </wfs:StoredQuery>
  <wfs:StoredQuery id="urn:ogc:def:query:OGC-WFS::GetFeatureById">
    <ows:Title>urn:ogc:def:query:OGC-WFS::GetFeatureById predefined stored query</ows:Title>
    <ows:Abstract>This query support all layers in the map</ows:Abstract>
  </wfs:StoredQuery><wfs:StoredQuery id="urn:StoredQueries:FunctionCHAR_LENGTH">
    <ows:Title>Function CHAR_LENGTH</ows:Title>
    <ows:Abstract>test Function CHAR_LENGTH</ows:Abstract>
  </wfs:StoredQuery>
  <wfs:StoredQuery id="urn:StoredQueries:FunctionSUBSTRING">
    <ows:Title>Function CHAR_LENGTH</ows:Title>
    <ows:Abstract>test Function CHAR_LENGTH</ows:Abstract>
  </wfs:StoredQuery>
  <wfs:StoredQuery id="urn:StoredQueries:MyStoredQuery">
    <ows:Title>MyStoredQuery</ows:Title>
    <ows:Abstract>some tested MyStoredQuery</ows:Abstract>
  </wfs:StoredQuery>
  <wfs:StoredQuery id="urn:StoredQueries:FeaturesInPolygon">
    <ows:Title>Features In Polygon</ows:Title>
    <ows:Abstract>Find all the features in a Polygon.</ows:Abstract>
  </wfs:StoredQuery>
</wfs:ListStoredQueriesResponse>

DescribeStoredQueries

La operación DescribeStoredQueries describe las consultas almacenadas disponibles en ArcGIS Server. Esta operación resulta útil para que los clientes WFS interroguen al servidor y comprendan la índole de la consulta almacenada y los parámetros que se deben enviar para ejecutar la consulta almacenada.

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?request=DescribeStoredQueries&service=WFS&version=2.0.0

<wfs:DescribeStoredQueriesResponse version="2.0.0" xsi:schemaLocation="http://www.opengis.net/gml http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.opengis.net/ogc http://schemas.opengis.net/filter/2.0/filter.xsd http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsAll.xsd http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://www.opengis.net/fes/2.0 http://schemas.opengis.net/filter/2.0/filterAll.xsd">
  <wfs:StoredQueryDefinition id="urn:StoredQueries:AttributeDemo">
    <wfs:Title>Attribute request</wfs:Title>
    <wfs:Abstract>test Attribute request</wfs:Abstract>
    <wfs:Parameter name="myrank" type="xsd:double"/>
    <wfs:QueryExpressionText returnFeatureTypes="myns:Cities" language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression" isPrivate="false">
      <wfs:Query typeName="myns:cities">
        <fes:Filter>
          <fes:PropertyIsEqualTo>
            <fes:Literal>POP_RANK</fes:Literal>
            <fes:Literal>${myrank}</fes:Literal>
          </fes:PropertyIsEqualTo>
        </fes:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
  <wfs:StoredQueryDefinition id="urn:StoredQueries:SpatialDemo">
    <wfs:Title>Spatial request</wfs:Title>
    <wfs:Abstract>test Spatial Request</wfs:Abstract>
    <wfs:Parameter name="coordinates" type="xsd:string"/>
    <wfs:QueryExpressionText returnFeatureTypes="myns:Cities" language="urn:ogc:def:queryLanguage:OGC-WFS::WFS_QueryExpression" isPrivate="false">
      <wfs:Query typeName="myns:Cities">
        <ogc:Filter>
          <ogc:BBOX>
            <ogc:PropertyName>Shape</ogc:PropertyName>
            <gml:Box srsName="urn:x-ogc:def:crs:EPSG:4326">
              <gml:coordinates>${coordinates}</gml:coordinates>
            </gml:Box>
          </ogc:BBOX>
        </ogc:Filter>
      </wfs:Query>
    </wfs:QueryExpressionText>
  </wfs:StoredQueryDefinition>
</wfs:DescribeStoredQueriesResponse>

Ejecutar una consulta almacenada como parte de una solicitud GetFeature

El siguiente es un ejemplo de una solicitud de atributo en la cual se llama a una consulta almacenada (AttributeDemo) mediante el parámetro myrank=3:

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=5&STOREDQUERY_ID=urn:StoredQueries:AttributeDemo&myrank=3

El siguiente es un ejemplo en el cual se llama a una consulta almacenada (SpatialDemo) mediante el parámetro coordinadas para obtener una lista de las ciudades estadounidenses que entran dentro de una caja de límite. Solo se devuelven las dos primeras ciudades de esta lista (tenga en cuenta el uso de startindex y count):

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=0&count=2&STOREDQUERY_ID=urn:StoredQueries:SpatialDemo&coordinates=0,-180%2090,0

El siguiente es un ejemplo en el cual se llama a una consulta almacenada (FunctionChat_Length). La consulta almacenada en el servidor se escribe para excluir a las ciudades con nombres cuya longitud sea mayor que dos caracteres:

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=Cities&STOREDQUERY_ID=urn:StoredQueries:FunctionCHAR_LENGTH

Paginación de respuestas

La paginación de respuestas permite a una solicitud especificar el índice de inicio de la entidad que se va a recuperar. También se puede especificar un recuento del número de entidades que se va a recuperar.

Mediante el servicio de mapas SampleWorldCities instalado con ArcGIS Server, la consulta siguiente devuelve dos ciudades (recuento=2): Brasilia y Goiania:

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=1&count=2

Si cambia la solicitud y hace que el índiceinicio comience en 2, la primera ciudad devuelta será Goiania. Como el recuento=2, ahora la solicitud devolverá dos ciudades: Goiania y Campo Grande.

http://gisserver.domain.com:6080/arcgis/services/SampleWorldCities/MapServer/WFSServer?service=WFS&version=2.0.0&REQUEST=GetFeature&typeName=cities&startIndex=2&count=2