UNPKG

node-red-contrib-tak-registration

Version:

A Node-RED node to register to TAK and to help wrap files as datapackages to send to TAK

63 lines (57 loc) 2.23 kB
import GeometryFactory from '../geom/GeometryFactory' import PrecisionModel from '../geom/PrecisionModel' import WKTParser from './WKTParser' /** * Converts a geometry in Well-Known Text format to a {@link Geometry}. * <p> * <code>WKTReader</code> supports extracting <code>Geometry</code> objects * from either {@link Reader}s or {@link String}s. This allows it to function * as a parser to read <code>Geometry</code> objects from text blocks embedded * in other data formats (e.g. XML). */ /** * A <code>WKTReader</code> is parameterized by a <code>GeometryFactory</code>, * to allow it to create <code>Geometry</code> objects of the appropriate * implementation. In particular, the <code>GeometryFactory</code> determines * the <code>PrecisionModel</code> and <code>SRID</code> that is used. * @param {GeometryFactory} geometryFactory * @constructor */ export default class WKTReader { constructor (geometryFactory) { this.geometryFactory = geometryFactory || new GeometryFactory() this.precisionModel = this.geometryFactory.getPrecisionModel() this.parser = new WKTParser(this.geometryFactory) } /** * Reads a Well-Known Text representation of a {@link Geometry} * * @param {string} * wkt a <Geometry Tagged Text> string (see the OpenGIS Simple Features * Specification). * @return {Geometry} a <code>Geometry</code> read from * <code>string.</code> * @memberof WKTReader */ read (wkt) { var geometry = this.parser.read(wkt) // TODO: port and use GeometryPrecisionReducer, this is a hack if (this.precisionModel.getType() === PrecisionModel.FIXED) { this.reducePrecision(geometry) } return geometry } reducePrecision (geometry) { if (geometry.coordinate) { this.precisionModel.makePrecise(geometry.coordinate) } else if (geometry._points) { for (let i = 0, len = geometry._points._coordinates.length; i < len; i++) { this.precisionModel.makePrecise(geometry._points._coordinates[i]) } } else if (geometry._geometries) { for (let i = 0, len = geometry._geometries.length; i < len; i++) { this.reducePrecision(geometry._geometries[i]) } } } }