https://github.com/doneill/koop-provider-pg
A postgis provider for koop
https://github.com/doneill/koop-provider-pg
Last synced: 2 months ago
JSON representation
A postgis provider for koop
- Host: GitHub
- URL: https://github.com/doneill/koop-provider-pg
- Owner: doneill
- License: apache-2.0
- Created: 2020-09-13T04:31:37.000Z (almost 5 years ago)
- Default Branch: develop
- Last Pushed: 2025-03-24T23:40:46.000Z (3 months ago)
- Last Synced: 2025-03-25T20:45:26.268Z (3 months ago)
- Language: JavaScript
- Size: 2.26 MB
- Stars: 15
- Watchers: 3
- Forks: 9
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Koop PostGIS provider
[![npm version][npm-img]][npm-url]
![Build Status][ci-url][npm-img]: https://img.shields.io/npm/v/koop-provider-pg.svg?style=flat-square
[npm-url]: https://www.npmjs.com/package/koop-provider-pg
[ci-url]: https://github.com/doneill/koop-provider-pg/actions/workflows/node.js.yml/badge.svgKoop [provider](https://koopjs.github.io/docs/usage/provider) to query [PostGIS](https://postgis.net/) spatial data, convert it to [GeoJSON](https://geojson.org/) as input into [Koop](https://koopjs.github.io/) and convert into the GeoServices specification supported by ArcGIS products.
## Database configuration
Database connection parameters can be configured to any connection using the following environment variables:
```bash
# All values should be string values except PG_PORT
PG_HOST="${HOST}"
PG_PORT=${PORT}
PG_DATABASE="${DATABASE}"
PG_USER="${USER}"
PG_PASSWORD="${PASSWORD}"
```If database connection environment variables are not set the provider will use the default configuration.
- Open **config/default.json** and set your database connection parameters, an example is provided in **config/example.json**.
```json
{
"db": {
"host": "host",
"port": 5432,
"database": "dbname",
"user": "user",
"password": "password"
}
}
```### Custom `idField`
The provider use `gid` as the OBJECTID unique identifier. Optionally, if you prefer to use another column from your database table, you can add/set the following environment variable for your data's custom feature unique identifier.```bash
# value should be String, eg. "id"
export PG_OBJECTID="${OBJECT_ID}"
```### Custom PostgreSQL LIMIT
The provider uses Postgres JSONB which limits document size to 255MB in size. To optimize returning data from large datasets exceeding 255MB you can optionally add a limit to just a portion of the rows that are used to create the GeoJSON data. The default limit is 10000000 rows.```bash
# value should be String, e.g. "1000"
export PG_LIMIT="${LIMIT}"
```## Install
Koop providers require you to first install [Koop](https://koopjs.github.io/). You can add `koop-provider-pg` to your Koop server dependencies by installing it with npm:```bash
# install koop cli using npm
$ npm install -g @koopjs/cli# create a new koop app
$ koop new app pg-koop# cd into the pg-koop app
$ cd pg-koop# install provider
$ koop add provider koop-provider-pg# start koop server
$ koop serve
```**Example API Query:**
Replace `${schema}.${table}` with **schema.table** from your PostGIS db to translate.
```bash
curl localhost:8080/pg/rest/services/${schema}.${table}/FeatureServer/0/query
```**Add as Feature Layer**
- Esri Leaflet
```javascript
// esri leaflet feature layer
L.esri.featureLayer({
url: 'http://localhost:8080/pg/rest/services/${schema}.${table}/FeatureServer/layers'
}).addTo(map);
````
- ArcGIS Online WebMap
```bash
https://www.arcgis.com/home/webmap/viewer.html?url=http://localhost:8080/pg/rest/services/${schema}.${table}/FeatureServer/
```
## Test it out
Run server:
- `npm install`
- `npm start`## Dependencies
- [Koop](https://koopjs.github.io/)
- [bluebird](http://bluebirdjs.com/docs/getting-started.html)
- [config](https://lorenwest.github.io/node-config/)
- [Lodash](https://lodash.com/)
- [pg-promise](https://vitaly-t.github.io/pg-promise/)## Licensing
A copy of the license is available in the repository's [LICENSE](LICENSE) file.