Frequently Asked Questions

Can Koop fetch more than 1000 records?

Yes. The Geoservices output plugin defines a default limit of 1000 records, but this can be overridden by using the resultRecordCount query parameter. For example:


You can also access records beyond the first default 1000 by using the pagination parameters:


Can Koop reproject data to different coordinate systems?

Koop’s default output-plugin, Geoservices (i.e., FeatureServer), supports the transformation of data into different coordinate systems with the use of the outSR query parameter. outSR should be the well-known ID or well-known-text of a coordinate-reference-system (CRS). Make sure that your Koop instance is using Geoservices > 2.2.1 if you want to use WKIDs in your outSR parameter

Other output plugins may or may not support coordinate system transforms to other CRSs. You should check the plugin documentation. Output-plugin developers can leverage the Winnow to implement the same transformations found in the Geoservices/FeatureServer output.

Does GeoJSON produced by providers need to use the WGS84 CRS?

It depends on the output-plugins you are leveraging. The Geoservices/FeatureServer output plugin can work with data in non-WGS84 coordinate-reference-systems (CRS), but the CRS needs to be noted either in the GeoJSON’s crs property or by adding an inputCrs query parameter. To set with the GeoJSON crs property, you should have something like this attached to the GeoJSON produced by the provider’s getData method: = {
  type: 'name',
  properties: {
    name: "urn:ogc:def:crs:EPSG::2285"

where 2285 is an example of a well-known identifier for a CRS.

Alternatively, you can modify the request’s query object in the getData method so that it includes an inputCrs:

request.query.inputCrs = 2285

Note that the GeoJSON crs or query parameter inputCrs can be set in the provider’s getData method OR by using a provider after function. See the usage for after for examples on setting crs and inputCrs. Also note that your Koop instance should be using Geoservices > 2.2.1.

How can I disable Koop warnings from the console/logs?

You may see Koop related warnings in the console output. Most often these are related to an unset idField, an idField that has an invalid value, or invalid GeoJSON. Note that invalid GeoJSON warnings may occur for any GeoJSON that does not conform to the specification noted by IEFT. Koop can work with non-standard GeoJSON (e.g., polygons with reversed winding are okay), so in many or most cases these warnings can be ignored. The warnings can be disabled by setting the KOOP_WARNINGS environment variable prior to start-up:

> KOOP_WARNINGS=suppress node server.js

How should I write my provider code so that timestamp data is properly queried?

Some clients that use Feature Services may format date queries in the timestamp style, for example where=my_date >= timestamp '2021-01-01 06:00:00' (more information on querying dates). To ensure Koop filters the data properly, you should use the metadata.fields property to designate that field (in this case, my_date) as type: "Date" and also return the data from your provider using the JavaScript Date.toISOString() function. For example, properties.my_date = (new Date(year, month, date)).toISOString();.

Does Koop support HTTPS?

Koop is a dedicated ET(L) server and doesn’t include HTTPS support by default. You should use a proxy server (like nginx) or the service from you cloud provider to add the HTTPS layer in production.

If you just need the HTTPS for local development, the Koop CLI (v1.1+) allows to start a HTTPS dev server for Koop plugins. You can read the CLI documentation for more details.

How to enable the capability to cache data from a provider?

You can easily make the provider cache data by adding a TTL property. For this you need to add a property ttl for model.js file of a provider, as shown bellow:

geojson.ttl = 60 // will cache for 60 seconds and you can specify the time in seconds by changing this parameter as you need.
callback(null, geojson)

If your data is cached, then during the ttl period Koop will not execute the getData method of your provider. Once the ttl period has expired, Koop will again go to the getData method to acquire the data. If you add some logging to getData you should be able to confirm this.

Improve this page