Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/derhuerst/parse-gml-polygon
Convert a GML Polygon into GeoJSON.
https://github.com/derhuerst/parse-gml-polygon
convert geojson gis gml parse
Last synced: about 1 month ago
JSON representation
Convert a GML Polygon into GeoJSON.
- Host: GitHub
- URL: https://github.com/derhuerst/parse-gml-polygon
- Owner: derhuerst
- License: isc
- Created: 2017-09-13T23:59:07.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-11-06T11:56:46.000Z (over 1 year ago)
- Last Synced: 2024-12-25T00:30:12.235Z (about 2 months ago)
- Topics: convert, geojson, gis, gml, parse
- Language: JavaScript
- Homepage: https://github.com/derhuerst/parse-gml-polygon
- Size: 58.6 KB
- Stars: 12
- Watchers: 4
- Forks: 2
- Open Issues: 7
-
Metadata Files:
- Readme: readme.md
- License: license.md
- Authors: AUTHORS
Awesome Lists containing this project
README
# parse-gml-polygon
**Convert a [GML](https://en.wikipedia.org/wiki/Geography_Markup_Language) `Polygon` into a [GeoJSON](http://geojson.org) geometry.** Accepts the format of [`xml-reader`](https://www.npmjs.com/package/xml-reader) (with the `preserveMarkup` flag) as input. Works with a subset of [GML 3.3](https://portal.opengeospatial.org/files/?artifact_id=46568).
**Parsing GML is a nightmare. This module tries to parse most of the mentioned ways to encode a polygon.** I don't intend to cover all of them though. To quote [the wonderful *GML madness* article by Even Rouault](http://erouault.blogspot.de/2014/04/gml-madness.html):
> But, you may have noticed that the child of a `CompositeCurve` is a `curveMember`, which is also the parent of the `CompositeCurve`. So we may put a `CompositeCurve` inside a `CompositeCurve`.
> […] or maybe you prefer to use `gml:surfaceMembers` (with a final `s`) instead of a `gml:surfaceMember` […]
> To conclude, we should mention that the authors of the GML specification have admitted that encoding polygons was a bit too complicated.
[](https://www.npmjs.com/package/parse-gml-polygon)
[](https://travis-ci.org/derhuerst/parse-gml-polygon)

[](https://gitter.im/derhuerst)
[](https://patreon.com/derhuerst)## Installing
```shell
npm install parse-gml-polygon
```## Example
```js
const h = require('hyper-xml')
const parse = require('parse-gml-polygon')const el = h('gml:Polygon', {'gml:id': 'some-id'}, [
h('gml:exterior', [
// triangle of 0|0 0|3 3|3
h('gml:LinearRing', [
h('gml:posList', ['0 0 0 3 3 3 0 0'])
])
]),
h('gml:interior', [
// triangle of 1|1 1|2 2|2
h('gml:LinearRing', [
h('gml:posList', ['1 1 1 2 2 2 1 1'])
])
])
])const geometry = parse(el)
console.log(geometry)
``````js
{
type: 'Polygon',
coordinates: [
[ // exterior/outer shape
[0, 0],
[0, 3],
[3, 3],
[0, 0]
],
[ // interior/inner shape
[1, 1],
[1, 2],
[2, 2],
[1, 1]
]
]
}
```## Usage
This library consumes a tree structure corresponding to XML. [`xml-reader`](https://www.npmjs.com/package/xml-reader) parses XML into these structures. With [`hyper-xml`](https://npmjs.com/package/hyper-xml), you can create them manually.
Look at these code examples to understand how to use `parse-gml-polygon`:
- from an XML/GML string: [`examples/xml-string.js`](examples/xml-string.js)
- from an XML/GML file: [`examples/xml-file.js`](examples/xml-file.js)
- creating a tree manually: [`examples/hyper-xml.js`](examples/hyper-xml.js)## API
```js
parseGmlPolygon(tree, { transformCoords: noTransform, stride: 2}) => GeoJSON
```Second argument is a map of options:
- You may optionally pass in a `transformCoords` function, e.g. to translate them into WGS84. The default transform is `(x, y) => [x, y]`.
- `stride` specifies the default number of values that each point in the polygon has. A `stride` of `3` would correspond to a polygon in a 3D coordinate system.
Please note that this value can be overridden by the `srsDimension` attribute.
Default value of `stride` is `2`.## Unsupported encodings
- ``
- `gml:coordinates`, which is deprecated
- see `todo`s in [the tests](test.js)## Contributing
If you have a question or have difficulties using `parse-gml-polygon`, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, refer to [the issues page](https://github.com/derhuerst/parse-gml-polygon/issues).