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

61 lines (59 loc) 1.9 kB
import CGAlgorithms from '../../algorithm/CGAlgorithms' import STRtree from '../../index/strtree/STRtree' import IsValidOp from './IsValidOp' import ArrayList from '../../../../../java/util/ArrayList' import Envelope from '../../geom/Envelope' export default class IndexedNestedRingTester { constructor () { this._graph = null this._rings = new ArrayList() this._totalEnv = new Envelope() this._index = null this._nestedPt = null let graph = arguments[0] this._graph = graph } buildIndex () { this._index = new STRtree() for (let i = 0; i < this._rings.size(); i++) { const ring = this._rings.get(i) const env = ring.getEnvelopeInternal() this._index.insert(env, ring) } } getNestedPoint () { return this._nestedPt } isNonNested () { this.buildIndex() for (let i = 0; i < this._rings.size(); i++) { const innerRing = this._rings.get(i) const innerRingPts = innerRing.getCoordinates() const results = this._index.query(innerRing.getEnvelopeInternal()) for (let j = 0; j < results.size(); j++) { const searchRing = results.get(j) const searchRingPts = searchRing.getCoordinates() if (innerRing === searchRing) continue if (!innerRing.getEnvelopeInternal().intersects(searchRing.getEnvelopeInternal())) continue const innerRingPt = IsValidOp.findPtNotNode(innerRingPts, searchRing, this._graph) if (innerRingPt === null) continue const isInside = CGAlgorithms.isPointInRing(innerRingPt, searchRingPts) if (isInside) { this._nestedPt = innerRingPt return false } } } return true } add (ring) { this._rings.add(ring) this._totalEnv.expandToInclude(ring.getEnvelopeInternal()) } interfaces_ () { return [] } getClass () { return IndexedNestedRingTester } }