parse-gml-polygon
v0.3.5
Published
Convert a GML Polygon into GeoJSON.
Downloads
795
Maintainers
Readme
parse-gml-polygon
Convert a GML Polygon
into a GeoJSON geometry. Accepts the format of xml-reader
(with the preserveMarkup
flag) as input. Works with a subset of GML 3.3.
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:
But, you may have noticed that the child of a
CompositeCurve
is acurveMember
, which is also the parent of theCompositeCurve
. So we may put aCompositeCurve
inside aCompositeCurve
.
[…] or maybe you prefer to use
gml:surfaceMembers
(with a finals
) instead of agml:surfaceMember
[…]
To conclude, we should mention that the authors of the GML specification have admitted that encoding polygons was a bit too complicated.
Installing
npm install parse-gml-polygon
Example
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)
{
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
parses XML into these structures. With 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
- from an XML/GML file:
examples/xml-file.js
- creating a tree manually:
examples/hyper-xml.js
API
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. Astride
of3
would correspond to a polygon in a 3D coordinate system.
Please note that this value can be overridden by thesrsDimension
attribute.
Default value ofstride
is2
.
Unsupported encodings
<gml:pointProperty xlink:href="#some-point-id"/>
gml:coordinates
, which is deprecated- see
todo
s in the tests
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.