jsts
Version:
A JavaScript library of spatial predicates and functions for processing geometry
58 lines (54 loc) • 2.28 kB
JavaScript
import PreparedPolygonIntersects from './PreparedPolygonIntersects.js'
import FastSegmentSetIntersectionFinder from '../../noding/FastSegmentSetIntersectionFinder.js'
import SegmentStringUtil from '../../noding/SegmentStringUtil.js'
import PreparedPolygonContainsProperly from './PreparedPolygonContainsProperly.js'
import PreparedPolygonContains from './PreparedPolygonContains.js'
import PreparedPolygonCovers from './PreparedPolygonCovers.js'
import BasicPreparedGeometry from './BasicPreparedGeometry.js'
import RectangleIntersects from '../../operation/predicate/RectangleIntersects.js'
import IndexedPointInAreaLocator from '../../algorithm/locate/IndexedPointInAreaLocator.js'
import RectangleContains from '../../operation/predicate/RectangleContains.js'
export default class PreparedPolygon extends BasicPreparedGeometry {
constructor() {
super()
PreparedPolygon.constructor_.apply(this, arguments)
}
static constructor_() {
this._isRectangle = null
this._segIntFinder = null
this._pia = null
const poly = arguments[0]
BasicPreparedGeometry.constructor_.call(this, poly)
this._isRectangle = this.getGeometry().isRectangle()
}
containsProperly(g) {
if (!this.envelopeCovers(g)) return false
return PreparedPolygonContainsProperly.containsProperly(this, g)
}
getPointLocator() {
if (this._pia === null) this._pia = new IndexedPointInAreaLocator(this.getGeometry())
return this._pia
}
contains(g) {
if (!this.envelopeCovers(g)) return false
if (this._isRectangle)
return RectangleContains.contains(this.getGeometry(), g)
return PreparedPolygonContains.contains(this, g)
}
getIntersectionFinder() {
if (this._segIntFinder === null) this._segIntFinder = new FastSegmentSetIntersectionFinder(SegmentStringUtil.extractSegmentStrings(this.getGeometry()))
return this._segIntFinder
}
covers(g) {
if (!this.envelopeCovers(g)) return false
if (this._isRectangle)
return true
return PreparedPolygonCovers.covers(this, g)
}
intersects(g) {
if (!this.envelopesIntersect(g)) return false
if (this._isRectangle)
return RectangleIntersects.intersects(this.getGeometry(), g)
return PreparedPolygonIntersects.intersects(this, g)
}
}