0.3.5 • Published 5 years ago

parse-gml-polygon v0.3.5

Weekly downloads
102
License
ISC
Repository
github
Last release
5 years ago

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 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.

npm version build status ISC-licensed chat on gitter support me on Patreon

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:

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. 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:pointProperty xlink:href="#some-point-id"/>
  • gml:coordinates, which is deprecated
  • see todos 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.

0.3.5

5 years ago

0.3.4

6 years ago

0.3.3

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.2

6 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.0

7 years ago