Feature Type Service

With our Feature Type Service, you can retrieve the polygons that refers to detections based on our imagery, so you can use them in your own mapping application (GIS). The Feature Type Service is available as a Web Feature Service (WFS).

Picture

Obtain credentials

Before you can start using the Recording Locations Service, you need to have credentials. If you do not have them yet, please use this form to request access.

Request your credentials
Picture

Read the documentation

Everything you need to know about the use of our Recording Locations Service can be found below in the Service Documentation.

Read the service documentation
Picture

View our examples

To help you getting started, we have created a set of code examples for you. You can use them as a basis for your own service requests.

Explore the code examples

Service Documentation

Filter capabilities

The Feature Type Service offers filter capabilities that follow the OGC Filter Encoding Implementation Specification.

Geometry operators:

  • gml:Point

  • gml:Envelope

Spatial operators:

  • BBOX

  • DWithin

Comparison operators: (not implemented yet)

  • EqualTo and NotEqualTo

  • LessThan and GreaterThan

  • LessThanEqualTo and GreaterThanEqualTo

  • NullCheck

  • Between

Using the Feature Type Service

The Feature Type Service is a Web Feature Service (WFS)which can be accessed through this URL:

https://atlasapi.cyclomedia.com/api/featureserver/wfs

This WFS supports the following operations:

  • GetCapabilities

  • DescribeFeatureType

  • GetFeature

Both HTTP GET request and HTTP POST requests are supported.

Response

The output of a request can be given as Geography Markup Language (GML) version 3.1.1 or as GeoJSON. Default output is GML, but this can be changed using the ‘outputformat’ parameter. The application schemas can be retrieved by the URLs below.

Application schemas

GML application schema

To view the GML application schema, use this URL:

https://atlasapi.cyclomedia.com/api/featureserver/wfs?service=WFS&version=1.1.0&request=DescribeFeatureType&typename=atlas:[featureType]

GeoJSON application schema

To view the GeoJSON application schema, use this URL:

https://atlasapi.cyclomedia.com/api/featureserver/wfs?service=WFS&version=1.1.0&request=DescribeFeatureType&typename=atlas:[featureType]&outputformat=application/json

Feature types and properties

Feature 'SurfaceType'

A feature of the type 'SurfaceType' the following properties:

routeName

City name separated by underscores. Type: string. _______

sessionCreatedAt

Date when the dataset was created. Type: dateTime. __________

sessionYear

Year extracted from 'sessionCreatedAt'. Type: integer. ____________

sessionMonth

Month extracted from 'sessionCreatedAt'. Type: integer. ______________

startImageId

Readable identification of the starting image from DCR imagery. Type: string.

stopImageId

Readable identification of the stop image from DCR imagery. Type: string.

method

Method used to get final geometry. Returns one of these possible values: [ST_Automatic, ST_Manual, ST_Raw]. Type: string. ___________________________________________________________________________________________________________________

type

Informs the detected type of surface. Type: string. ____________

area

Polygon area. Type: float. ________

asphalt

Percentage of polygon predicted with Asphalt. Type: integer.

clinkers

Percentage of polygon predicted with Clinkers. Type: integer.

concrete

Percentage of polygon predicted with Concrete. Type: integer.

mosaic

Percentage of polygon predicted with Mosaic. Type: integer.

tile

Percentage of polygon predicted with Tile. Type: integer.

unpaved

Percentage of polygon predicted with Unpaved. Type: integer.

unknown

Percentage of polygon predicted with Unknown. Type: integer. _________________________________________________________________________________________________________________________________________________________________

b_function

Basic function of polygon (not in use yet, always null). Type: string.

b_status

Basic status of polygon. Type: string.

b_fysiekvoorkomen

Basic physical representation. Type: string._______________

p_function

Plus function of polygon. Type: string. _____________________

p_status

Plus status of polygon. Type: string.___________________

p_fysiekvoorkomen

Plus physical representation. Type: string. _______________

tijdstipRegistratie

Date of registration of polygon. Type: dateTime. ______________

eindRegistratie

Date of termination of polygon. Type: dateTime. _______________

polygon

Represents a type definition designed to encapsulate the properties of polygonal geometries in a specified spatial reference system (SRS). The longitude and latitude coordinates are in degrees or in meters (depending on the SRS), the height is in meters. Type: gml:polygonPropertyType.

createdAt

Date when the feature type was created. Type: dateTime.

isAuthorized

Indicates whether the user is authorized to view this feature type. Type: boolean.

Exception reporting

When the WFS feature type service encounters an error while processing a request or when it receives an unrecognized request, this will be returned as an exception report in the response. The format of the XML response is described in OWS Common Implementation Specification:

<ows:ExceptionReport version="1.1.0" 
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:ows=http://www.opengis.net/ows
xsi:schemaLocation="http://www.opengis.net/ows">
<ows:Exception exceptionCode="{the exception code}">
<ows:ExceptionText>
{the error message}
</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>

For GeoJSON, the response will be:

{ 
"exception": {
"code": null,
"locator": null,
"text": "<the error message>"
}
}

Code examples

Note: you can use Postman to test our web services and try out the code examples below.

Return the feature types service

Get feature types from Feature Type Service

https://atlasapi.cyclomedia.com/api/featureserver/wfs?SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&SRSNAME=EPSG%3A4326&TYPENAME=atlas%3Asurfacetype&BBOX=4.737988543873671%2C51.50056652205065%2C4.838604687052006%2C51.532790641771996%2CEPSG%3A4326&MAXFEATURES=100

With a response in XmlGml format:

<?xml version="1.0" encoding="utf-8"?>
<wfs:FeatureCollection xmlns:gml="http://www.opengis.net/gml" xmlns:atlas="http://www.cyclomedia.com/atlas" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows" numberOfFeatures="1" timeStamp="2024-03-19T23:15:19.4073932+00:00" xsi:schemaLocation="http://www.cyclomedia.com/atlas https://atlasapi.cyclomedia.com/featureserver/wfs?SERVICE=WFS&amp;VERSION=1.1.0&amp;REQUEST=DescribeFeatureType&amp;TypeName=atlas:surfacetype " xmlns:wfs="http://www.opengis.net/wfs">
    <gml:featureMembers>
<atlas:SurfaceType gml:id="surfaceTypeId_35656113-e1a6-4e3e-98f3-ad764402955c">
<atlas:startImageId>WE6FM0JR</atlas:startImageId>
<atlas:stopImageId>WE6FM6J3</atlas:stopImageId>
<atlas:method>ST_Manual</atlas:method>
<atlas:type>Asphalt</atlas:type>
<atlas:area>262.620</atlas:area>
<atlas:asphalt>19</atlas:asphalt>
<atlas:clinkers>6</atlas:clinkers>
<atlas:concrete>5</atlas:concrete>
<atlas:mosaic>1</atlas:mosaic>
<atlas:unpaved>4</atlas:unpaved>
<atlas:unknown>61</atlas:unknown>
<atlas:b_status>bestaand</atlas:b_status>
<atlas:b_fysiekvoorkomen>gesloten verharding</atlas:b_fysiekvoorkomen>
<atlas:p_function>waardeOnbekend</atlas:p_function>
<atlas:p_status>geenWaarde</atlas:p_status>
<atlas:p_fysiekvoorkomen>asfalt</atlas:p_fysiekvoorkomen>
<atlas:tijdstipRegistratie>2/15/2021 12:00:00 AM</atlas:tijdstipRegistratie>
<atlas:eindRegistratie>-</atlas:eindRegistratie>
<atlas:b_function>-</atlas:b_function>
<atlas:polygon>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing srsName="urn:x-ogc:def:crs:EPSG:28992">
<gml:posList srsDimension="3">113062.228 520676.005 -0.23 113042.309 520679.595 -0.168 113042.068 520679.648 -0.162 113040.223 520679.974 -0.157 113036.599 520680.615 -0.181 113031.095 520681.354 -0.117 113025.565 520681.864 0.038 113021.274 520682.13 0.08 113016.67 520682.355 0.087 113009.03 520682.555 0.122 113004.474 520682.618 0.182 112999.919 520682.553 0.237 112996.227 520682.406 0.237 112992.539 520682.175 0.26 112984.817 520681.571 0.275 112977.109 520680.81 0.343 112971.373 520680.362 0.371 112965.87 520680.059 0.478 112962.389 520679.898 0.443 112961.365 520679.865 0.138 112961.224 520678.255 -0.05 112971.48 520678.765 0.416 112977.27 520679.218 0.375 112985.19 520679.929 0.316 112992.652 520680.579 0.262 112999.964 520680.954 0.247 113004.475 520681.018 0.201 113015.1 520680.8 0.084 113025.297 520680.278 0.048 113032.454 520679.483 -0.101 113039.034 520678.588 -0.153 113042.234 520677.983 -0.175 113061.944 520674.43 -0.229 113080.535 520671.389 -0.221 113095.755 520669.671 -0.211 113123.931 520667.199 -0.194 113124.07 520668.794 -0.181 113117.581 520669.365 -0.184 113098.141 520671.061 -0.231 113095.916 520671.263 -0.188 113088.319 520672.078 -0.169 113080.738 520672.976 -0.285 113076.657 520673.566 -0.149 113072.588 520674.246 -0.237 113062.228 520676.005 -0.23</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</atlas:polygon>
<atlas:createdAt>2024-04-09T15:28:38.0000000+00:00</atlas:createdAt>
<atlas:isAuthorized>true</atlas:isAuthorized>
</atlas:SurfaceType>
    </gml:featureMembers>
</wfs:FeatureCollection>

Comparison Operators

Comparison operators in WFS 1.1 and 1.0 filter features by comparing attribute values to specified criteria, enabling precise data retrieval. Below is an overview of all properties and the possible comparison operators that can be used.

Retrieve feature by "FeatureId"

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/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">
<wfs:Query typeName="Atlas:SurfaceType">
<ogc:Filter>
<ogc:FeatureId fid="0042f948-bc9e-c2eb-b718-aa9bb69e48ff"/>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute equals a specified value [PropertyIsEqualTo]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/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">
<wfs:Query typeName="atlas:SurfaceType">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>routeName</ogc:PropertyName>
<ogc:Literal>Someren</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute does not equal a specified value. [PropertyIsNotEqualTo]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/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">
<wfs:Query typeName="atlas:SurfaceType">
<ogc:Filter>
<ogc:PropertyIsNotEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Concrete</ogc:Literal>
</ogc:PropertyIsNotEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute is less than a specified value. [PropertyIsLessThan]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/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">
<wfs:Query typeName="atlas:SurfaceType">
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>area</ogc:PropertyName>
<ogc:Literal>2</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute is greater than a specified value. [PropertyIsGreaterThan]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:gml="http://www.opengis.net/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">
  <wfs:Query typeName="atlas:SurfaceType">
    <ogc:Filter>
      <ogc:PropertyIsGreaterThan>
        <ogc:PropertyName>clinkers</ogc:PropertyName>
        <ogc:Literal>98</ogc:Literal>
      </ogc:PropertyIsGreaterThan>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute is less than or equal to a specified value. [PropertyIsLessThanOrEqualTo]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:gml="http://www.opengis.net/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">
  <wfs:Query typeName="atlas:SurfaceType">
    <ogc:Filter>
      <ogc:PropertyIsLessThanOrEqualTo>
        <ogc:PropertyName>area</ogc:PropertyName>
        <ogc:Literal>2</ogc:Literal>
      </ogc:PropertyIsLessThanOrEqualTo>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute is greater than or equal to a specified value. [PropertyIsGreaterThanOrEqualTo]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:gml="http://www.opengis.net/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">
  <wfs:Query typeName="atlas:SurfaceType">
    <ogc:Filter>
      <ogc:PropertyIsGreaterThanOrEqualTo>
        <ogc:PropertyName>area</ogc:PropertyName>
        <ogc:Literal>50297.2</ogc:Literal>
      </ogc:PropertyIsGreaterThanOrEqualTo>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute is null. [PropertyIsNull]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:gml="http://www.opengis.net/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">
  <wfs:Query typeName="atlas:SurfaceType">
    <ogc:Filter>
      <ogc:PropertyIsNull>
        <ogc:PropertyName>clinkers</ogc:PropertyName>
      </ogc:PropertyIsNull>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>'

Retrieve features where an attribute value falls within a specified range. [PropertyIsBetween]

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<?xml version="1.0" encoding="UTF-8"?>
<wfs:GetFeature service="WFS" version="1.1.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/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">
<wfs:Query typeName="atlas:SurfaceType">
<ogc:Filter>
<ogc:PropertyIsBetween>
<ogc:PropertyName>area</ogc:PropertyName>
<ogc:LowerBoundary>
<ogc:Literal>10000</ogc:Literal>
</ogc:LowerBoundary>
<ogc:UpperBoundary>
<ogc:Literal>10900</ogc:Literal>
</ogc:UpperBoundary>
</ogc:PropertyIsBetween>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>'

Combination of comparison operations example.

curl --location 'https://atlasapi.cyclomedia.com/api/featureserver/wfs' \
--header 'Content-Type: text/xml' \
--header 'Authorization: ••••••' \
--data '<wfs:GetFeature service="WFS" version="1.1.0" resultType="results" outputFormat="text/xml; subtype=gml/3.1.1" xmlns:wfs="http://www.opengis.net/wfs">
<wfs:Query typeName="atlas:SurfaceType" srsName="EPSG:28992" xmlns:atlas="http://www.cyclomedia.com/atlas">
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:BBOX>
<gml:Envelope srsName="EPSG:28992" xmlns:gml"http://www.opengis.net/gml">
<gml:lowerCorner>179606.46 375690.37</gml:lowerCorner>
<gml:upperCorner>176055.23 379284.61</gml:upperCorner>
</gml:Envelope>
</ogc:BBOX>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>routeName</ogc:PropertyName>
<ogc:Literal>Someren</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>sessionyear</ogc:PropertyName>
<ogc:Literal>2023</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:Or>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Asphalt</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Concrete</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
</ogc:And>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>'

Using Comparison Operators in WFS 1.1

Comparison operators in WFS 1.1 and 1.0 are essential for filtering and retrieving specific features based on attribute values. These operators allow you to define precise criteria for your queries, making it possible to extract only the relevant data from a dataset. Below, payload examples:

  • By FeatureId

  • PropertyIsEqualTo

  • PropertyIsNotEqualTo

  • PropertyIsLessThan

  • PropertyIsGreaterThan

  • PropertyIsLessThanOrEqualTo

  • PropertyIsGreaterThanOrEqualTo

  • PropertyIsNull

  • PropertyIsBetween

  • Comparison Operation Combination

WFS Service Usage

Overview

Developers who wish to integrate with our WFS (Web Feature Service) endpoint, to ensure optimal performance and avoid overloading the system, it is essential to follow the guidelines provided below, particularly regarding bounding box (bbox) queries.

Guidelines for Bounding Box (bbox) Queries

When making requests to the WFS service, please avoid creating large bounding box (bbox) areas that exceed 50 square kilometers. Large bbox queries can significantly impact the performance and may result in the retrieval of multi-million features, which can be cumbersome to process and filter.

To prevent such scenarios, adhere to the following recommendations:

  • Maximum Bbox Area: Ensure that the bbox area does not exceed50 square kilometers.

  • Starting Zoom Level: Use a starting zoom level of 20 meters when configuring custom layers in Street Smart, especially when dealing with surface types.

  • Feature Visibility: Features will begin to be visible from a zoom level of 500 meters. However, it is crucial to start at20 meters to prevent overly broad queries.

Configuring a New WFS Layer in Street Smart

If you plan to use surface types on Street Smart by configuring a custom layer, please use the following configuration steps to ensure optimal performance:

  1. Type: Set to WFS.

  2. Layer Name: Enter the desired layer name (e.g.,SurfaceType).

  3. Version: Set the WFS version, for example, 1.1.0.

  4. Styling Mechanism: Choose the appropriate styling mechanism, such as a .sld file.

  5. Minimum Zoom Level: Adjust the minimum zoom level to 10 to control when the features start being requested. This helps in avoiding overly broad bbox queries that can cause performance issues.

Performance Considerations

Queries that cover a large geographical area result in the service attempting to process millions of features. This can lead to significant delays and may cause your requests to fail when filtering or limiting the result set.

By following the recommendations here, you can help ensure that your use of the WFS service is efficient and that the system remains responsive for all users.