@maptiler/geocoding-control 1.3.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/icons/airport.svg +6 -0
- package/icons/animal_shelter.svg +4 -0
- package/icons/art_gallery.svg +4 -0
- package/icons/atm.svg +5 -1
- package/icons/barrier.svg +4 -0
- package/icons/baseball.svg +4 -0
- package/icons/basketball.svg +4 -0
- package/icons/bbq.svg +4 -1
- package/icons/beach.svg +4 -0
- package/icons/beer.svg +4 -1
- package/icons/bench.svg +4 -1
- package/icons/bicycle.svg +4 -1
- package/icons/bicycle_parking.svg +5 -1
- package/icons/bicycle_rental.svg +5 -1
- package/icons/billiards.svg +4 -0
- package/icons/board.svg +4 -1
- package/icons/bollard.svg +4 -0
- package/icons/bowling.svg +4 -1
- package/icons/building.svg +4 -0
- package/icons/bulldozer.svg +4 -0
- package/icons/bus_guided.svg +4 -0
- package/icons/bus_trolley.svg +4 -0
- package/icons/butcher.svg +4 -1
- package/icons/camper_trailer.svg +4 -0
- package/icons/campfire.svg +4 -0
- package/icons/caution.svg +4 -0
- package/icons/cemetery.svg +3 -11
- package/icons/charging_station.svg +4 -1
- package/icons/christian.svg +5 -0
- package/icons/circle-dot.svg +4 -0
- package/icons/circle-stroke.svg +4 -0
- package/icons/circle.svg +4 -0
- package/icons/city.svg +4 -0
- package/icons/communications_tower.svg +4 -1
- package/icons/confectionery.svg +4 -1
- package/icons/construction.svg +4 -0
- package/icons/cricket.svg +4 -0
- package/icons/cross.svg +4 -1
- package/icons/cycle_barrier.svg +4 -0
- package/icons/dam.svg +4 -0
- package/icons/danger.svg +4 -0
- package/icons/diamond.svg +4 -0
- package/icons/diamond_stroked.svg +4 -0
- package/icons/dot.svg +4 -0
- package/icons/drinking_water.svg +4 -1
- package/icons/emergency_phone.svg +4 -1
- package/icons/entrance.svg +4 -0
- package/icons/farm.svg +3 -8
- package/icons/fence.svg +4 -0
- package/icons/florist.svg +4 -1
- package/icons/furniture.svg +4 -1
- package/icons/gaming.svg +4 -0
- package/icons/garden.svg +4 -0
- package/icons/garden_centre.svg +4 -1
- package/icons/gate.svg +4 -1
- package/icons/globe.svg +4 -0
- package/icons/golf_green.svg +4 -0
- package/icons/gondola.svg +4 -0
- package/icons/guidepost.svg +4 -1
- package/icons/hardware.svg +3 -3
- package/icons/heart.svg +4 -0
- package/icons/heliport.svg +4 -0
- package/icons/highway_rest_area.svg +4 -0
- package/icons/home.svg +4 -0
- package/icons/hot_spring.svg +4 -1
- package/icons/hut.svg +4 -0
- package/icons/industry.svg +4 -0
- package/icons/karaoke.svg +4 -0
- package/icons/lift_gate.svg +4 -0
- package/icons/light_rail.svg +4 -0
- package/icons/lighthouse.svg +4 -1
- package/icons/marker.svg +4 -0
- package/icons/marker_stroked.svg +4 -0
- package/icons/monorail.svg +4 -0
- package/icons/motorcycle.svg +4 -1
- package/icons/motorcycle_parking.svg +4 -1
- package/icons/motorcycle_rental.svg +4 -0
- package/icons/motorcycle_repair.svg +4 -0
- package/icons/natural.svg +4 -0
- package/icons/noodle.svg +4 -0
- package/icons/obelisk.svg +4 -1
- package/icons/observation_tower.svg +4 -1
- package/icons/oneway.svg +4 -0
- package/icons/optician.svg +4 -1
- package/icons/park.svg +4 -1
- package/icons/parking_paid.svg +4 -0
- package/icons/pin.svg +4 -0
- package/icons/pipe.svg +4 -0
- package/icons/pizza.svg +4 -0
- package/icons/place_of_worship.svg +4 -1
- package/icons/playground.svg +3 -3
- package/icons/racetrack.svg +4 -0
- package/icons/radiation.svg +4 -0
- package/icons/railway.svg +4 -0
- package/icons/ranger_station.svg +4 -0
- package/icons/recycling.svg +4 -1
- package/icons/road_accident.svg +4 -0
- package/icons/roadblock.svg +4 -0
- package/icons/rocket.svg +4 -0
- package/icons/school_bus.svg +4 -0
- package/icons/sculpture.svg +4 -0
- package/icons/seafood.svg +4 -1
- package/icons/shelter.svg +4 -1
- package/icons/shoes.svg +4 -1
- package/icons/sikh.svg +4 -0
- package/icons/snow.svg +4 -0
- package/icons/soccer.svg +4 -1
- package/icons/spring.svg +4 -1
- package/icons/square.svg +4 -0
- package/icons/square_stroked.svg +4 -0
- package/icons/star.svg +4 -0
- package/icons/star_stroked.svg +4 -0
- package/icons/statue.svg +4 -1
- package/icons/subway.svg +4 -0
- package/icons/sushi.svg +4 -0
- package/icons/swimming.svg +5 -0
- package/icons/swimming_pool.svg +8 -0
- package/icons/tako.svg +4 -0
- package/icons/taxi.svg +4 -1
- package/icons/teahouse.svg +4 -0
- package/icons/terminal.svg +4 -1
- package/icons/theme_park.svg +4 -0
- package/icons/town.svg +4 -0
- package/icons/town_hall.svg +4 -1
- package/icons/townhall.svg +4 -1
- package/icons/tram_stop.svg +4 -0
- package/icons/transit.svg +4 -0
- package/icons/triangle.svg +4 -0
- package/icons/triangle_stroked.svg +4 -0
- package/icons/truck.svg +4 -0
- package/icons/tunnel.svg +4 -0
- package/icons/veterinary.svg +4 -1
- package/icons/viewpoint.svg +4 -1
- package/icons/village.svg +4 -0
- package/icons/volleyball.svg +4 -0
- package/icons/warehouse.svg +4 -0
- package/icons/water.svg +3 -5
- package/icons/water_park.svg +6 -1
- package/icons/water_tower.svg +4 -1
- package/icons/watermill.svg +4 -0
- package/icons/wetland.svg +4 -0
- package/icons/wine.svg +4 -0
- package/leaflet-controller.d.ts +2 -2
- package/leaflet-controller.js +1427 -9922
- package/leaflet-controller.js.map +1 -1
- package/leaflet-controller.umd.js +3 -9
- package/leaflet-controller.umd.js.map +1 -1
- package/leaflet.js +2708 -11166
- package/leaflet.js.map +1 -1
- package/leaflet.umd.js +3 -9
- package/leaflet.umd.js.map +1 -1
- package/maplibregl-controller.d.ts +2 -2
- package/maplibregl-controller.js +1268 -9849
- package/maplibregl-controller.js.map +1 -1
- package/maplibregl-controller.umd.js +3 -9
- package/maplibregl-controller.umd.js.map +1 -1
- package/maplibregl.js +2550 -11094
- package/maplibregl.js.map +1 -1
- package/maplibregl.umd.js +3 -9
- package/maplibregl.umd.js.map +1 -1
- package/maptilersdk.js +2558 -11102
- package/maptilersdk.js.map +1 -1
- package/maptilersdk.umd.js +3 -9
- package/maptilersdk.umd.js.map +1 -1
- package/mask.d.ts +1 -1
- package/openlayers-controller.js +1191 -9762
- package/openlayers-controller.js.map +1 -1
- package/openlayers-controller.umd.js +3 -9
- package/openlayers-controller.umd.js.map +1 -1
- package/openlayers.js +2689 -11223
- package/openlayers.js.map +1 -1
- package/openlayers.umd.js +3 -9
- package/openlayers.umd.js.map +1 -1
- package/package.json +24 -22
- package/react.js +996 -955
- package/react.js.map +1 -1
- package/react.umd.js +1 -1
- package/react.umd.js.map +1 -1
- package/style.css +1 -1
- package/svelte/FeatureItem.svelte +6 -5
- package/svelte/GeocodingControl.svelte +68 -12
- package/svelte/GeocodingControl.svelte.d.ts +4 -2
- package/svelte/geoUtils.js +7 -1
- package/svelte/leaflet-controller.d.ts +2 -2
- package/svelte/leaflet-controller.js +48 -2
- package/svelte/maplibregl-controller.d.ts +2 -2
- package/svelte/maplibregl-controller.js +5 -2
- package/svelte/mask.d.ts +1 -1
- package/svelte/mask.js +32 -29
- package/svelte/openlayers-controller.js +13 -14
- package/svelte/types.d.ts +15 -9
- package/types.d.ts +15 -9
- package/vanilla.js +1016 -975
- package/vanilla.js.map +1 -1
- package/vanilla.umd.js +1 -1
- package/vanilla.umd.js.map +1 -1
- package/icons/beach_resort.svg +0 -1
- package/icons/drinking-water.svg +0 -1
- package/icons/emergency-phone.svg +0 -1
- package/icons/rental_bicycle.svg +0 -1
- package/icons/rental_car.svg +0 -1
- /package/icons/{camp_site.svg → campsite.svg} +0 -0
- /package/icons/{toll_booth.svg → toll.svg} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openlayers-controller.js","sources":["../node_modules/@turf/helpers/dist/esm/index.js","../node_modules/@turf/meta/dist/esm/index.js","../node_modules/@turf/bbox/dist/esm/index.js","../node_modules/@turf/center/dist/esm/index.js","../node_modules/@turf/jsts/dist/jsts.min.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/polygon.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/extent.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/@turf/buffer/dist/esm/index.js","../node_modules/splaytree/dist/splay.esm.js","../node_modules/robust-predicates/esm/util.js","../node_modules/robust-predicates/esm/orient2d.js","../node_modules/polygon-clipping/dist/polygon-clipping.esm.js","../node_modules/@turf/difference/dist/esm/index.js","../src/mask.ts","../src/openlayers-controller.ts"],"sourcesContent":["// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: 360 / (2 * Math.PI),\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1e3,\n kilometres: earthRadius / 1e3,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1e3,\n millimetres: earthRadius * 1e3,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n acres: 247105e-9,\n centimeters: 1e4,\n centimetres: 1e4,\n feet: 10.763910417,\n hectares: 1e-4,\n inches: 1550.003100006,\n kilometers: 1e-6,\n kilometres: 1e-6,\n meters: 1,\n metres: 1,\n miles: 386e-9,\n nauticalmiles: 29155334959812285e-23,\n millimeters: 1e6,\n millimetres: 1e6,\n yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n const feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\nfunction point(coordinates, properties, options = {}) {\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n const geom = {\n type: \"Point\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return point(coords, properties);\n }),\n options\n );\n}\nfunction polygon(coordinates, properties, options = {}) {\n for (const ring of coordinates) {\n if (ring.length < 4) {\n throw new Error(\n \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n );\n }\n if (ring[ring.length - 1].length !== ring[0].length) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n for (let j = 0; j < ring[ring.length - 1].length; j++) {\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n const geom = {\n type: \"Polygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return polygon(coords, properties);\n }),\n options\n );\n}\nfunction lineString(coordinates, properties, options = {}) {\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n const geom = {\n type: \"LineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return lineString(coords, properties);\n }),\n options\n );\n}\nfunction featureCollection(features, options = {}) {\n const fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiLineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPoint\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPolygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n const geom = {\n type: \"GeometryCollection\",\n geometries\n };\n return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n const multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n let angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\nfunction azimuthToBearing(angle) {\n angle = angle % 360;\n if (angle > 0)\n return angle > 180 ? angle - 360 : angle;\n return angle < -180 ? angle + 360 : angle;\n}\nfunction radiansToDegrees(radians) {\n const degrees = radians % (2 * Math.PI);\n return degrees * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n const radians = degrees % 360;\n return radians * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n const startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n const finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach((num) => {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\nfunction validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\nexport {\n areaFactors,\n azimuthToBearing,\n bearingToAzimuth,\n convertArea,\n convertLength,\n degreesToRadians,\n earthRadius,\n factors,\n feature,\n featureCollection,\n geometry,\n geometryCollection,\n isNumber,\n isObject,\n lengthToDegrees,\n lengthToRadians,\n lineString,\n lineStrings,\n multiLineString,\n multiPoint,\n multiPolygon,\n point,\n points,\n polygon,\n polygons,\n radiansToDegrees,\n radiansToLength,\n round,\n validateBBox,\n validateId\n};\n//# sourceMappingURL=index.js.map","// index.js\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n if (geojson === null)\n return;\n var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n if (geometry === null)\n continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\")\n multiFeatureIndex++;\n }\n if (geomType === \"LineString\")\n multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\")\n multiFeatureIndex++;\n if (geomType === \"Polygon\")\n geometryIndex++;\n }\n if (geomType === \"Polygon\")\n multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false)\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n if (coordIndex === 0 && initialValue === void 0)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false)\n break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function(currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false)\n break;\n }\n }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function(currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else\n previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function(coord) {\n coords.push(coord);\n });\n return coords;\n}\nfunction geomEach(geojson, callback) {\n var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : void 0;\n featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : void 0;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n if (geometry === null) {\n if (callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n featureIndex++;\n }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (callback(\n feature(geometry, properties, { bbox, id }),\n featureIndex,\n 0\n ) === false)\n return false;\n return;\n }\n var geomType;\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate\n };\n if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false)\n return false;\n }\n });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function(currentFeature, featureIndex, multiFeatureIndex) {\n if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n if (!feature2.geometry)\n return;\n var type = feature2.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\")\n return;\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (coordEach(\n feature2,\n function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n if (previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature2.properties\n );\n if (callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false)\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false)\n return false;\n });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n if (started === false && initialValue === void 0)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\nfunction lineEach(geojson, callback) {\n if (!geojson)\n throw new Error(\"geojson is required\");\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n if (feature2.geometry === null)\n return;\n var type = feature2.geometry.type;\n var coords = feature2.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n if (callback(\n lineString(coords[geometryIndex], feature2.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n }\n break;\n }\n });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\nfunction findSegment(geojson, options) {\n options = options || {};\n if (!isObject(options))\n throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null)\n return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0)\n segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0)\n geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n options = options || {};\n if (!isObject(options))\n throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null)\n return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0)\n coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0)\n geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nexport {\n coordAll,\n coordEach,\n coordReduce,\n featureEach,\n featureReduce,\n findPoint,\n findSegment,\n flattenEach,\n flattenReduce,\n geomEach,\n geomReduce,\n lineEach,\n lineReduce,\n propEach,\n propReduce,\n segmentEach,\n segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach } from \"@turf/meta\";\nfunction bbox(geojson, options = {}) {\n if (geojson.bbox != null && true !== options.recompute) {\n return geojson.bbox;\n }\n const result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, (coord) => {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nvar turf_bbox_default = bbox;\nexport {\n bbox,\n turf_bbox_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bbox } from \"@turf/bbox\";\nimport { point } from \"@turf/helpers\";\nfunction center(geojson, options = {}) {\n const ext = bbox(geojson);\n const x = (ext[0] + ext[2]) / 2;\n const y = (ext[1] + ext[3]) / 2;\n return point([x, y], options.properties, options);\n}\nvar turf_center_default = center;\nexport {\n center,\n turf_center_default as default\n};\n//# sourceMappingURL=index.js.map","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).jsts=e()}(this,(function(){\"use strict\";function t(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function e(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function n(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}function i(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}function r(t){return r=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},r(t)}function s(t,e){return s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},s(t,e)}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function o(t,e,n){return o=a()?Reflect.construct:function(t,e,n){var i=[null];i.push.apply(i,e);var r=new(Function.bind.apply(t,i));return n&&s(r,n.prototype),r},o.apply(null,arguments)}function u(t){var e=\"function\"==typeof Map?new Map:void 0;return u=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf(\"[native code]\")))return t;var n;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,i)}function i(){return o(t,arguments,r(this).constructor)}return i.prototype=Object.create(t.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),s(i,t)},u(t)}function l(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}function h(t,e){if(e&&(\"object\"==typeof e||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return l(t)}function c(t){var e=a();return function(){var n,i=r(t);if(e){var s=r(this).constructor;n=Reflect.construct(i,arguments,s)}else n=i.apply(this,arguments);return h(this,n)}}function f(t,e,n){return f=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var i=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=r(t)););return t}(t,e);if(i){var s=Object.getOwnPropertyDescriptor(i,e);return s.get?s.get.call(n):s.value}},f(t,e,n||t)}function v(t){return function(t){if(Array.isArray(t))return y(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||g(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function g(t,e){if(t){if(\"string\"==typeof t)return y(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(t,e):void 0}}function y(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function d(t,e){var n=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(!n){if(Array.isArray(t)||(n=g(t))||e&&t&&\"number\"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,a=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){o=!0,s=t},f:function(){try{a||null==n.return||n.return()}finally{if(o)throw s}}}}var _=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getEndCapStyle\",value:function(){return this._endCapStyle}},{key:\"isSingleSided\",value:function(){return this._isSingleSided}},{key:\"setQuadrantSegments\",value:function(t){this._quadrantSegments=t,0===this._quadrantSegments&&(this._joinStyle=e.JOIN_BEVEL),this._quadrantSegments<0&&(this._joinStyle=e.JOIN_MITRE,this._mitreLimit=Math.abs(this._quadrantSegments)),t<=0&&(this._quadrantSegments=1),this._joinStyle!==e.JOIN_ROUND&&(this._quadrantSegments=e.DEFAULT_QUADRANT_SEGMENTS)}},{key:\"getJoinStyle\",value:function(){return this._joinStyle}},{key:\"setJoinStyle\",value:function(t){this._joinStyle=t}},{key:\"setSimplifyFactor\",value:function(t){this._simplifyFactor=t<0?0:t}},{key:\"getSimplifyFactor\",value:function(){return this._simplifyFactor}},{key:\"getQuadrantSegments\",value:function(){return this._quadrantSegments}},{key:\"setEndCapStyle\",value:function(t){this._endCapStyle=t}},{key:\"getMitreLimit\",value:function(){return this._mitreLimit}},{key:\"setMitreLimit\",value:function(t){this._mitreLimit=t}},{key:\"setSingleSided\",value:function(t){this._isSingleSided=t}}],[{key:\"constructor_\",value:function(){if(this._quadrantSegments=e.DEFAULT_QUADRANT_SEGMENTS,this._endCapStyle=e.CAP_ROUND,this._joinStyle=e.JOIN_ROUND,this._mitreLimit=e.DEFAULT_MITRE_LIMIT,this._isSingleSided=!1,this._simplifyFactor=e.DEFAULT_SIMPLIFY_FACTOR,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this.setQuadrantSegments(t)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.setQuadrantSegments(n),this.setEndCapStyle(i)}else if(4===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3];this.setQuadrantSegments(r),this.setEndCapStyle(s),this.setJoinStyle(a),this.setMitreLimit(o)}}},{key:\"bufferDistanceError\",value:function(t){var e=Math.PI/2/t;return 1-Math.cos(e/2)}}]),e}();_.CAP_ROUND=1,_.CAP_FLAT=2,_.CAP_SQUARE=3,_.JOIN_ROUND=1,_.JOIN_MITRE=2,_.JOIN_BEVEL=3,_.DEFAULT_QUADRANT_SEGMENTS=8,_.DEFAULT_MITRE_LIMIT=5,_.DEFAULT_SIMPLIFY_FACTOR=.01;var p=function(e){i(s,e);var r=c(s);function s(e){var n;return t(this,s),(n=r.call(this,e)).name=Object.keys({Exception:s})[0],n}return n(s,[{key:\"toString\",value:function(){return this.message}}]),s}(u(Error)),m=function(e){i(r,e);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).name=Object.keys({IllegalArgumentException:r})[0],i}return r}(p),k=function(){function e(){t(this,e)}return n(e,[{key:\"filter\",value:function(t){}}]),e}();function x(){}function I(){}function E(){}var N,T,S,L,C,R,w,O,b=function(){function e(){t(this,e)}return n(e,null,[{key:\"equalsWithTolerance\",value:function(t,e,n){return Math.abs(t-e)<=n}}]),e}(),M=function(){function e(n,i){t(this,e),this.low=i||0,this.high=n||0}return n(e,null,[{key:\"toBinaryString\",value:function(t){var e,n=\"\";for(e=2147483648;e>0;e>>>=1)n+=(t.high&e)===e?\"1\":\"0\";for(e=2147483648;e>0;e>>>=1)n+=(t.low&e)===e?\"1\":\"0\";return n}}]),e}();function A(){}function P(){}A.NaN=NaN,A.isNaN=function(t){return Number.isNaN(t)},A.isInfinite=function(t){return!Number.isFinite(t)},A.MAX_VALUE=Number.MAX_VALUE,A.POSITIVE_INFINITY=Number.POSITIVE_INFINITY,A.NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,\"function\"==typeof Float64Array&&\"function\"==typeof Int32Array?(R=2146435072,w=new Float64Array(1),O=new Int32Array(w.buffer),A.doubleToLongBits=function(t){w[0]=t;var e=0|O[0],n=0|O[1];return(n&R)===R&&0!=(1048575&n)&&0!==e&&(e=0,n=2146959360),new M(n,e)},A.longBitsToDouble=function(t){return O[0]=t.low,O[1]=t.high,w[0]}):(N=1023,T=Math.log2,S=Math.floor,L=Math.pow,C=function(){for(var t=53;t>0;t--){var e=L(2,t)-1;if(S(T(e))+1===t)return e}return 0}(),A.doubleToLongBits=function(t){var e,n,i,r,s,a,o,u,l;if(t<0||1/t===Number.NEGATIVE_INFINITY?(a=1<<31,t=-t):a=0,0===t)return new M(u=a,l=0);if(t===1/0)return new M(u=2146435072|a,l=0);if(t!=t)return new M(u=2146959360,l=0);if(r=0,l=0,(e=S(t))>1)if(e<=C)(r=S(T(e)))<=20?(l=0,u=e<<20-r&1048575):(l=e%(n=L(2,i=r-20))<<32-i,u=e/n&1048575);else for(i=e,l=0;0!==(i=S(n=i/2));)r++,l>>>=1,l|=(1&u)<<31,u>>>=1,n!==i&&(u|=524288);if(o=r+N,s=0===e,e=t-e,r<52&&0!==e)for(i=0;;){if((n=2*e)>=1?(e=n-1,s?(o--,s=!1):(i<<=1,i|=1,r++)):(e=n,s?0==--o&&(r++,s=!1):(i<<=1,r++)),20===r)u|=i,i=0;else if(52===r){l|=i;break}if(1===n){r<20?u|=i<<20-r:r<52&&(l|=i<<52-r);break}}return u|=o<<20,new M(u|=a,l)},A.longBitsToDouble=function(t){var e,n,i,r,s=t.high,a=t.low,o=s&1<<31?-1:1;for(i=((2146435072&s)>>20)-N,r=0,n=1<<19,e=1;e<=20;e++)s&n&&(r+=L(2,-e)),n>>>=1;for(n=1<<31,e=21;e<=52;e++)a&n&&(r+=L(2,-e)),n>>>=1;if(-1023===i){if(0===r)return 0*o;i=-1022}else{if(1024===i)return 0===r?o/0:NaN;r+=1}return o*r*L(2,i)});var D=function(e){i(r,e);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).name=Object.keys({RuntimeException:r})[0],i}return r}(p),F=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,null,[{key:\"constructor_\",value:function(){if(0===arguments.length)D.constructor_.call(this);else if(1===arguments.length){var t=arguments[0];D.constructor_.call(this,t)}}}]),s}(D),G=function(){function e(){t(this,e)}return n(e,null,[{key:\"shouldNeverReachHere\",value:function(){if(0===arguments.length)e.shouldNeverReachHere(null);else if(1===arguments.length){var t=arguments[0];throw new F(\"Should never reach here\"+(null!==t?\": \"+t:\"\"))}}},{key:\"isTrue\",value:function(){if(1===arguments.length){var t=arguments[0];e.isTrue(t,null)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];if(!n)throw null===i?new F:new F(i)}}},{key:\"equals\",value:function(){if(2===arguments.length){var t=arguments[0],n=arguments[1];e.equals(t,n,null)}else if(3===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2];if(!r.equals(i))throw new F(\"Expected \"+i+\" but encountered \"+r+(null!==s?\": \"+s:\"\"))}}}]),e}(),q=new ArrayBuffer(8),Y=new Float64Array(q),z=new Int32Array(q),X=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getM\",value:function(){return A.NaN}},{key:\"setOrdinate\",value:function(t,n){switch(t){case e.X:this.x=n;break;case e.Y:this.y=n;break;case e.Z:this.setZ(n);break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"equals2D\",value:function(){if(1===arguments.length){var t=arguments[0];return this.x===t.x&&this.y===t.y}if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!b.equalsWithTolerance(this.x,e.x,n)&&!!b.equalsWithTolerance(this.y,e.y,n)}}},{key:\"setM\",value:function(t){throw new m(\"Invalid ordinate index: \"+e.M)}},{key:\"getZ\",value:function(){return this.z}},{key:\"getOrdinate\",value:function(t){switch(t){case e.X:return this.x;case e.Y:return this.y;case e.Z:return this.getZ()}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"equals3D\",value:function(t){return this.x===t.x&&this.y===t.y&&(this.getZ()===t.getZ()||A.isNaN(this.getZ())&&A.isNaN(t.getZ()))}},{key:\"equals\",value:function(t){return t instanceof e&&this.equals2D(t)}},{key:\"equalInZ\",value:function(t,e){return b.equalsWithTolerance(this.getZ(),t.getZ(),e)}},{key:\"setX\",value:function(t){this.x=t}},{key:\"compareTo\",value:function(t){var e=t;return this.x<e.x?-1:this.x>e.x?1:this.y<e.y?-1:this.y>e.y?1:0}},{key:\"getX\",value:function(){return this.x}},{key:\"setZ\",value:function(t){this.z=t}},{key:\"clone\",value:function(){try{return null}catch(t){if(t instanceof CloneNotSupportedException)return G.shouldNeverReachHere(\"this shouldn't happen because this class is Cloneable\"),null;throw t}}},{key:\"copy\",value:function(){return new e(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\", \"+this.getZ()+\")\"}},{key:\"distance3D\",value:function(t){var e=this.x-t.x,n=this.y-t.y,i=this.getZ()-t.getZ();return Math.sqrt(e*e+n*n+i*i)}},{key:\"getY\",value:function(){return this.y}},{key:\"setY\",value:function(t){this.y=t}},{key:\"distance\",value:function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)}},{key:\"hashCode\",value:function(){var t=17;return t=37*(t=37*t+e.hashCode(this.x))+e.hashCode(this.y)}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ()}},{key:\"interfaces_\",get:function(){return[x,I,E]}}],[{key:\"constructor_\",value:function(){if(this.x=null,this.y=null,this.z=null,0===arguments.length)e.constructor_.call(this,0,0);else if(1===arguments.length){var t=arguments[0];e.constructor_.call(this,t.x,t.y,t.getZ())}else if(2===arguments.length){var n=arguments[0],i=arguments[1];e.constructor_.call(this,n,i,e.NULL_ORDINATE)}else if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2];this.x=r,this.y=s,this.z=a}}},{key:\"hashCode\",value:function(t){return Y[0]=t,z[0]^z[1]}}]),e}(),B=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"compare\",value:function(t,n){var i=e.compare(t.x,n.x);if(0!==i)return i;var r=e.compare(t.y,n.y);return 0!==r?r:this._dimensionsToTest<=2?0:e.compare(t.getZ(),n.getZ())}},{key:\"interfaces_\",get:function(){return[P]}}],[{key:\"constructor_\",value:function(){if(this._dimensionsToTest=2,0===arguments.length)e.constructor_.call(this,2);else if(1===arguments.length){var t=arguments[0];if(2!==t&&3!==t)throw new m(\"only 2 or 3 dimensions may be specified\");this._dimensionsToTest=t}}},{key:\"compare\",value:function(t,e){return t<e?-1:t>e?1:A.isNaN(t)?A.isNaN(e)?0:-1:A.isNaN(e)?1:0}}]),e}();X.DimensionalComparator=B,X.NULL_ORDINATE=A.NaN,X.X=0,X.Y=1,X.Z=2,X.M=3;var U=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getArea\",value:function(){return this.getWidth()*this.getHeight()}},{key:\"equals\",value:function(t){if(!(t instanceof e))return!1;var n=t;return this.isNull()?n.isNull():this._maxx===n.getMaxX()&&this._maxy===n.getMaxY()&&this._minx===n.getMinX()&&this._miny===n.getMinY()}},{key:\"intersection\",value:function(t){if(this.isNull()||t.isNull()||!this.intersects(t))return new e;var n=this._minx>t._minx?this._minx:t._minx,i=this._miny>t._miny?this._miny:t._miny;return new e(n,this._maxx<t._maxx?this._maxx:t._maxx,i,this._maxy<t._maxy?this._maxy:t._maxy)}},{key:\"isNull\",value:function(){return this._maxx<this._minx}},{key:\"getMaxX\",value:function(){return this._maxx}},{key:\"covers\",value:function(){if(1===arguments.length){if(arguments[0]instanceof X){var t=arguments[0];return this.covers(t.x,t.y)}if(arguments[0]instanceof e){var n=arguments[0];return!this.isNull()&&!n.isNull()&&(n.getMinX()>=this._minx&&n.getMaxX()<=this._maxx&&n.getMinY()>=this._miny&&n.getMaxY()<=this._maxy)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return!this.isNull()&&(i>=this._minx&&i<=this._maxx&&r>=this._miny&&r<=this._maxy)}}},{key:\"intersects\",value:function(){if(1===arguments.length){if(arguments[0]instanceof e){var t=arguments[0];return!this.isNull()&&!t.isNull()&&!(t._minx>this._maxx||t._maxx<this._minx||t._miny>this._maxy||t._maxy<this._miny)}if(arguments[0]instanceof X){var n=arguments[0];return this.intersects(n.x,n.y)}}else if(2===arguments.length){if(arguments[0]instanceof X&&arguments[1]instanceof X){var i=arguments[0],r=arguments[1];if(this.isNull())return!1;var s=i.x<r.x?i.x:r.x;if(s>this._maxx)return!1;var a=i.x>r.x?i.x:r.x;if(a<this._minx)return!1;var o=i.y<r.y?i.y:r.y;if(o>this._maxy)return!1;var u=i.y>r.y?i.y:r.y;return!(u<this._miny)}if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var l=arguments[0],h=arguments[1];return!this.isNull()&&!(l>this._maxx||l<this._minx||h>this._maxy||h<this._miny)}}}},{key:\"getMinY\",value:function(){return this._miny}},{key:\"getDiameter\",value:function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return Math.sqrt(t*t+e*e)}},{key:\"getMinX\",value:function(){return this._minx}},{key:\"expandToInclude\",value:function(){if(1===arguments.length){if(arguments[0]instanceof X){var t=arguments[0];this.expandToInclude(t.x,t.y)}else if(arguments[0]instanceof e){var n=arguments[0];if(n.isNull())return null;this.isNull()?(this._minx=n.getMinX(),this._maxx=n.getMaxX(),this._miny=n.getMinY(),this._maxy=n.getMaxY()):(n._minx<this._minx&&(this._minx=n._minx),n._maxx>this._maxx&&(this._maxx=n._maxx),n._miny<this._miny&&(this._miny=n._miny),n._maxy>this._maxy&&(this._maxy=n._maxy))}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.isNull()?(this._minx=i,this._maxx=i,this._miny=r,this._maxy=r):(i<this._minx&&(this._minx=i),i>this._maxx&&(this._maxx=i),r<this._miny&&(this._miny=r),r>this._maxy&&(this._maxy=r))}}},{key:\"minExtent\",value:function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t<e?t:e}},{key:\"getWidth\",value:function(){return this.isNull()?0:this._maxx-this._minx}},{key:\"compareTo\",value:function(t){var e=t;return this.isNull()?e.isNull()?0:-1:e.isNull()?1:this._minx<e._minx?-1:this._minx>e._minx?1:this._miny<e._miny?-1:this._miny>e._miny?1:this._maxx<e._maxx?-1:this._maxx>e._maxx?1:this._maxy<e._maxy?-1:this._maxy>e._maxy?1:0}},{key:\"translate\",value:function(t,e){if(this.isNull())return null;this.init(this.getMinX()+t,this.getMaxX()+t,this.getMinY()+e,this.getMaxY()+e)}},{key:\"copy\",value:function(){return new e(this)}},{key:\"toString\",value:function(){return\"Env[\"+this._minx+\" : \"+this._maxx+\", \"+this._miny+\" : \"+this._maxy+\"]\"}},{key:\"setToNull\",value:function(){this._minx=0,this._maxx=-1,this._miny=0,this._maxy=-1}},{key:\"disjoint\",value:function(t){return!(!this.isNull()&&!t.isNull())||(t._minx>this._maxx||t._maxx<this._minx||t._miny>this._maxy||t._maxy<this._miny)}},{key:\"getHeight\",value:function(){return this.isNull()?0:this._maxy-this._miny}},{key:\"maxExtent\",value:function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t>e?t:e}},{key:\"expandBy\",value:function(){if(1===arguments.length){var t=arguments[0];this.expandBy(t,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this.isNull())return null;this._minx-=e,this._maxx+=e,this._miny-=n,this._maxy+=n,(this._minx>this._maxx||this._miny>this._maxy)&&this.setToNull()}}},{key:\"contains\",value:function(){if(1===arguments.length){if(arguments[0]instanceof e){var t=arguments[0];return this.covers(t)}if(arguments[0]instanceof X){var n=arguments[0];return this.covers(n)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return this.covers(i,r)}}},{key:\"centre\",value:function(){return this.isNull()?null:new X((this.getMinX()+this.getMaxX())/2,(this.getMinY()+this.getMaxY())/2)}},{key:\"init\",value:function(){if(0===arguments.length)this.setToNull();else if(1===arguments.length){if(arguments[0]instanceof X){var t=arguments[0];this.init(t.x,t.x,t.y,t.y)}else if(arguments[0]instanceof e){var n=arguments[0];this._minx=n._minx,this._maxx=n._maxx,this._miny=n._miny,this._maxy=n._maxy}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.init(i.x,r.x,i.y,r.y)}else if(4===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3];s<a?(this._minx=s,this._maxx=a):(this._minx=a,this._maxx=s),o<u?(this._miny=o,this._maxy=u):(this._miny=u,this._maxy=o)}}},{key:\"getMaxY\",value:function(){return this._maxy}},{key:\"distance\",value:function(t){if(this.intersects(t))return 0;var e=0;this._maxx<t._minx?e=t._minx-this._maxx:this._minx>t._maxx&&(e=this._minx-t._maxx);var n=0;return this._maxy<t._miny?n=t._miny-this._maxy:this._miny>t._maxy&&(n=this._miny-t._maxy),0===e?n:0===n?e:Math.sqrt(e*e+n*n)}},{key:\"hashCode\",value:function(){var t=17;return t=37*(t=37*(t=37*(t=37*t+X.hashCode(this._minx))+X.hashCode(this._maxx))+X.hashCode(this._miny))+X.hashCode(this._maxy)}},{key:\"interfaces_\",get:function(){return[x,E]}}],[{key:\"constructor_\",value:function(){if(this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,0===arguments.length)this.init();else if(1===arguments.length){if(arguments[0]instanceof X){var t=arguments[0];this.init(t.x,t.x,t.y,t.y)}else if(arguments[0]instanceof e){var n=arguments[0];this.init(n)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.init(i.x,r.x,i.y,r.y)}else if(4===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3];this.init(s,a,o,u)}}},{key:\"intersects\",value:function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2];return n.x>=(t.x<e.x?t.x:e.x)&&n.x<=(t.x>e.x?t.x:e.x)&&n.y>=(t.y<e.y?t.y:e.y)&&n.y<=(t.y>e.y?t.y:e.y)}if(4===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2],a=arguments[3],o=Math.min(s.x,a.x),u=Math.max(s.x,a.x),l=Math.min(i.x,r.x),h=Math.max(i.x,r.x);return!(l>u)&&(!(h<o)&&(o=Math.min(s.y,a.y),u=Math.max(s.y,a.y),l=Math.min(i.y,r.y),h=Math.max(i.y,r.y),!(l>u)&&!(h<o)))}}}]),e}(),V=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"isGeometryCollection\",value:function(){return this.getTypeCode()===e.TYPECODE_GEOMETRYCOLLECTION}},{key:\"getFactory\",value:function(){return this._factory}},{key:\"getGeometryN\",value:function(t){return this}},{key:\"getArea\",value:function(){return 0}},{key:\"isRectangle\",value:function(){return!1}},{key:\"equalsExact\",value:function(t){return this===t||this.equalsExact(t,0)}},{key:\"geometryChanged\",value:function(){this.apply(e.geometryChangedFilter)}},{key:\"geometryChangedAction\",value:function(){this._envelope=null}},{key:\"equalsNorm\",value:function(t){return null!==t&&this.norm().equalsExact(t.norm())}},{key:\"getLength\",value:function(){return 0}},{key:\"getNumGeometries\",value:function(){return 1}},{key:\"compareTo\",value:function(){var t;if(1===arguments.length){var e=arguments[0];return t=e,this.getTypeCode()!==t.getTypeCode()?this.getTypeCode()-t.getTypeCode():this.isEmpty()&&t.isEmpty()?0:this.isEmpty()?-1:t.isEmpty()?1:this.compareToSameClass(e)}if(2===arguments.length){var n=arguments[0],i=arguments[1];return t=n,this.getTypeCode()!==t.getTypeCode()?this.getTypeCode()-t.getTypeCode():this.isEmpty()&&t.isEmpty()?0:this.isEmpty()?-1:t.isEmpty()?1:this.compareToSameClass(n,i)}}},{key:\"getUserData\",value:function(){return this._userData}},{key:\"getSRID\",value:function(){return this._SRID}},{key:\"getEnvelope\",value:function(){return this.getFactory().toGeometry(this.getEnvelopeInternal())}},{key:\"checkNotGeometryCollection\",value:function(t){if(t.getTypeCode()===e.TYPECODE_GEOMETRYCOLLECTION)throw new m(\"This method does not support GeometryCollection arguments\")}},{key:\"equal\",value:function(t,e,n){return 0===n?t.equals(e):t.distance(e)<=n}},{key:\"norm\",value:function(){var t=this.copy();return t.normalize(),t}},{key:\"reverse\",value:function(){var t=this.reverseInternal();return null!=this.envelope&&(t.envelope=this.envelope.copy()),t.setSRID(this.getSRID()),t}},{key:\"copy\",value:function(){var t=this.copyInternal();return t.envelope=null==this._envelope?null:this._envelope.copy(),t._SRID=this._SRID,t._userData=this._userData,t}},{key:\"getPrecisionModel\",value:function(){return this._factory.getPrecisionModel()}},{key:\"getEnvelopeInternal\",value:function(){return null===this._envelope&&(this._envelope=this.computeEnvelopeInternal()),new U(this._envelope)}},{key:\"setSRID\",value:function(t){this._SRID=t}},{key:\"setUserData\",value:function(t){this._userData=t}},{key:\"compare\",value:function(t,e){for(var n=t.iterator(),i=e.iterator();n.hasNext()&&i.hasNext();){var r=n.next(),s=i.next(),a=r.compareTo(s);if(0!==a)return a}return n.hasNext()?1:i.hasNext()?-1:0}},{key:\"hashCode\",value:function(){return this.getEnvelopeInternal().hashCode()}},{key:\"isEquivalentClass\",value:function(t){return this.getClass()===t.getClass()}},{key:\"isGeometryCollectionOrDerived\",value:function(){return this.getTypeCode()===e.TYPECODE_GEOMETRYCOLLECTION||this.getTypeCode()===e.TYPECODE_MULTIPOINT||this.getTypeCode()===e.TYPECODE_MULTILINESTRING||this.getTypeCode()===e.TYPECODE_MULTIPOLYGON}},{key:\"interfaces_\",get:function(){return[I,x,E]}},{key:\"getClass\",value:function(){return e}}],[{key:\"hasNonEmptyElements\",value:function(t){for(var e=0;e<t.length;e++)if(!t[e].isEmpty())return!0;return!1}},{key:\"hasNullElements\",value:function(t){for(var e=0;e<t.length;e++)if(null===t[e])return!0;return!1}}]),e}();V.constructor_=function(t){t&&(this._envelope=null,this._userData=null,this._factory=t,this._SRID=t.getSRID())},V.TYPECODE_POINT=0,V.TYPECODE_MULTIPOINT=1,V.TYPECODE_LINESTRING=2,V.TYPECODE_LINEARRING=3,V.TYPECODE_MULTILINESTRING=4,V.TYPECODE_POLYGON=5,V.TYPECODE_MULTIPOLYGON=6,V.TYPECODE_GEOMETRYCOLLECTION=7,V.TYPENAME_POINT=\"Point\",V.TYPENAME_MULTIPOINT=\"MultiPoint\",V.TYPENAME_LINESTRING=\"LineString\",V.TYPENAME_LINEARRING=\"LinearRing\",V.TYPENAME_MULTILINESTRING=\"MultiLineString\",V.TYPENAME_POLYGON=\"Polygon\",V.TYPENAME_MULTIPOLYGON=\"MultiPolygon\",V.TYPENAME_GEOMETRYCOLLECTION=\"GeometryCollection\",V.geometryChangedFilter={get interfaces_(){return[k]},filter:function(t){t.geometryChangedAction()}};var H=function(){function e(){t(this,e)}return n(e,null,[{key:\"toLocationSymbol\",value:function(t){switch(t){case e.EXTERIOR:return\"e\";case e.BOUNDARY:return\"b\";case e.INTERIOR:return\"i\";case e.NONE:return\"-\"}throw new m(\"Unknown location value: \"+t)}}]),e}();H.INTERIOR=0,H.BOUNDARY=1,H.EXTERIOR=2,H.NONE=-1;var Z=function(){function e(){t(this,e)}return n(e,[{key:\"add\",value:function(){}},{key:\"addAll\",value:function(){}},{key:\"isEmpty\",value:function(){}},{key:\"iterator\",value:function(){}},{key:\"size\",value:function(){}},{key:\"toArray\",value:function(){}},{key:\"remove\",value:function(){}}]),e}(),j=function(e){i(r,e);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).name=Object.keys({NoSuchElementException:r})[0],i}return r}(p),W=function(e){i(r,e);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).name=Object.keys({UnsupportedOperationException:r})[0],i}return r}(p),K=function(e){i(s,e);var r=c(s);function s(){return t(this,s),r.apply(this,arguments)}return n(s,[{key:\"contains\",value:function(){}}]),s}(Z),J=function(e,r){i(a,e);var s=c(a);function a(e){var n;return t(this,a),(n=s.call(this)).map=new Map,e instanceof Z&&n.addAll(e),n}return n(a,[{key:\"contains\",value:function(t){var e=t.hashCode?t.hashCode():t;return!!this.map.has(e)}},{key:\"add\",value:function(t){var e=t.hashCode?t.hashCode():t;return!this.map.has(e)&&!!this.map.set(e,t)}},{key:\"addAll\",value:function(t){var e,n=d(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}return!0}},{key:\"remove\",value:function(){throw new W}},{key:\"size\",value:function(){return this.map.size}},{key:\"isEmpty\",value:function(){return 0===this.map.size}},{key:\"toArray\",value:function(){return Array.from(this.map.values())}},{key:\"iterator\",value:function(){return new Q(this.map)}},{key:r,value:function(){return this.map}}]),a}(K,Symbol.iterator),Q=function(){function e(n){t(this,e),this.iterator=n.values();var i=this.iterator.next(),r=i.done,s=i.value;this.done=r,this.value=s}return n(e,[{key:\"next\",value:function(){if(this.done)throw new j;var t=this.value,e=this.iterator.next(),n=e.done,i=e.value;return this.done=n,this.value=i,t}},{key:\"hasNext\",value:function(){return!this.done}},{key:\"remove\",value:function(){throw new W}}]),e}(),$=function(){function e(){t(this,e)}return n(e,null,[{key:\"opposite\",value:function(t){return t===e.LEFT?e.RIGHT:t===e.RIGHT?e.LEFT:t}}]),e}();$.ON=0,$.LEFT=1,$.RIGHT=2;var tt=function(e){i(r,e);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).name=Object.keys({EmptyStackException:r})[0],i}return r}(p),et=function(e){i(r,e);var n=c(r);function r(e){var i;return t(this,r),(i=n.call(this,e)).name=Object.keys({IndexOutOfBoundsException:r})[0],i}return r}(p),nt=function(e){i(s,e);var r=c(s);function s(){return t(this,s),r.apply(this,arguments)}return n(s,[{key:\"get\",value:function(){}},{key:\"set\",value:function(){}},{key:\"isEmpty\",value:function(){}}]),s}(Z),it=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),(e=r.call(this)).array=[],e}return n(s,[{key:\"add\",value:function(t){return this.array.push(t),!0}},{key:\"get\",value:function(t){if(t<0||t>=this.size())throw new et;return this.array[t]}},{key:\"push\",value:function(t){return this.array.push(t),t}},{key:\"pop\",value:function(){if(0===this.array.length)throw new tt;return this.array.pop()}},{key:\"peek\",value:function(){if(0===this.array.length)throw new tt;return this.array[this.array.length-1]}},{key:\"empty\",value:function(){return 0===this.array.length}},{key:\"isEmpty\",value:function(){return this.empty()}},{key:\"search\",value:function(t){return this.array.indexOf(t)}},{key:\"size\",value:function(){return this.array.length}},{key:\"toArray\",value:function(){return this.array.slice()}}]),s}(nt);function rt(t,e){return t.interfaces_&&t.interfaces_.indexOf(e)>-1}var st=function(){function e(n){t(this,e),this.str=n}return n(e,[{key:\"append\",value:function(t){this.str+=t}},{key:\"setCharAt\",value:function(t,e){this.str=this.str.substr(0,t)+e+this.str.substr(t+1)}},{key:\"toString\",value:function(){return this.str}}]),e}(),at=function(){function e(n){t(this,e),this.value=n}return n(e,[{key:\"intValue\",value:function(){return this.value}},{key:\"compareTo\",value:function(t){return this.value<t?-1:this.value>t?1:0}}],[{key:\"compare\",value:function(t,e){return t<e?-1:t>e?1:0}},{key:\"isNan\",value:function(t){return Number.isNaN(t)}},{key:\"valueOf\",value:function(t){return new e(t)}}]),e}(),ot=function(){function e(){t(this,e)}return n(e,null,[{key:\"isWhitespace\",value:function(t){return t<=32&&t>=0||127===t}},{key:\"toUpperCase\",value:function(t){return t.toUpperCase()}}]),e}(),ut=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"le\",value:function(t){return this._hi<t._hi||this._hi===t._hi&&this._lo<=t._lo}},{key:\"extractSignificantDigits\",value:function(t,n){var i=this.abs(),r=e.magnitude(i._hi),s=e.TEN.pow(r);(i=i.divide(s)).gt(e.TEN)?(i=i.divide(e.TEN),r+=1):i.lt(e.ONE)&&(i=i.multiply(e.TEN),r-=1);for(var a=r+1,o=new st,u=e.MAX_PRINT_DIGITS-1,l=0;l<=u;l++){t&&l===a&&o.append(\".\");var h=Math.trunc(i._hi);if(h<0)break;var c=!1,f=0;h>9?(c=!0,f=\"9\"):f=\"0\"+h,o.append(f),i=i.subtract(e.valueOf(h)).multiply(e.TEN),c&&i.selfAdd(e.TEN);var v=!0,g=e.magnitude(i._hi);if(g<0&&Math.abs(g)>=u-l&&(v=!1),!v)break}return n[0]=r,o.toString()}},{key:\"sqr\",value:function(){return this.multiply(this)}},{key:\"doubleValue\",value:function(){return this._hi+this._lo}},{key:\"subtract\",value:function(){if(arguments[0]instanceof e){var t=arguments[0];return this.add(t.negate())}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.add(-n)}}},{key:\"equals\",value:function(){if(1===arguments.length&&arguments[0]instanceof e){var t=arguments[0];return this._hi===t._hi&&this._lo===t._lo}}},{key:\"isZero\",value:function(){return 0===this._hi&&0===this._lo}},{key:\"selfSubtract\",value:function(){if(arguments[0]instanceof e){var t=arguments[0];return this.isNaN()?this:this.selfAdd(-t._hi,-t._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.isNaN()?this:this.selfAdd(-n,0)}}},{key:\"getSpecialNumberString\",value:function(){return this.isZero()?\"0.0\":this.isNaN()?\"NaN \":null}},{key:\"min\",value:function(t){return this.le(t)?this:t}},{key:\"selfDivide\",value:function(){if(1===arguments.length){if(arguments[0]instanceof e){var t=arguments[0];return this.selfDivide(t._hi,t._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.selfDivide(n,0)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1],s=null,a=null,o=null,u=null,l=null,h=null,c=null,f=null;return l=this._hi/i,f=(s=(h=e.SPLIT*l)-(s=h-l))*(o=(f=e.SPLIT*i)-(o=f-i))-(c=l*i)+s*(u=i-o)+(a=l-s)*o+a*u,f=l+(h=(this._hi-c-f+this._lo-l*r)/i),this._hi=f,this._lo=l-f+h,this}}},{key:\"dump\",value:function(){return\"DD<\"+this._hi+\", \"+this._lo+\">\"}},{key:\"divide\",value:function(){if(arguments[0]instanceof e){var t=arguments[0],n=null,i=null,r=null,s=null,a=null,o=null,u=null,l=null;i=(a=this._hi/t._hi)-(n=(o=e.SPLIT*a)-(n=o-a)),l=n*(r=(l=e.SPLIT*t._hi)-(r=l-t._hi))-(u=a*t._hi)+n*(s=t._hi-r)+i*r+i*s;var h=l=a+(o=(this._hi-u-l+this._lo-a*t._lo)/t._hi),c=a-l+o;return new e(h,c)}if(\"number\"==typeof arguments[0]){var f=arguments[0];return A.isNaN(f)?e.createNaN():e.copy(this).selfDivide(f,0)}}},{key:\"ge\",value:function(t){return this._hi>t._hi||this._hi===t._hi&&this._lo>=t._lo}},{key:\"pow\",value:function(t){if(0===t)return e.valueOf(1);var n=new e(this),i=e.valueOf(1),r=Math.abs(t);if(r>1)for(;r>0;)r%2==1&&i.selfMultiply(n),(r/=2)>0&&(n=n.sqr());else i=n;return t<0?i.reciprocal():i}},{key:\"ceil\",value:function(){if(this.isNaN())return e.NaN;var t=Math.ceil(this._hi),n=0;return t===this._hi&&(n=Math.ceil(this._lo)),new e(t,n)}},{key:\"compareTo\",value:function(t){var e=t;return this._hi<e._hi?-1:this._hi>e._hi?1:this._lo<e._lo?-1:this._lo>e._lo?1:0}},{key:\"rint\",value:function(){return this.isNaN()?this:this.add(.5).floor()}},{key:\"setValue\",value:function(){if(arguments[0]instanceof e){var t=arguments[0];return this.init(t),this}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.init(n),this}}},{key:\"max\",value:function(t){return this.ge(t)?this:t}},{key:\"sqrt\",value:function(){if(this.isZero())return e.valueOf(0);if(this.isNegative())return e.NaN;var t=1/Math.sqrt(this._hi),n=this._hi*t,i=e.valueOf(n),r=this.subtract(i.sqr())._hi*(.5*t);return i.add(r)}},{key:\"selfAdd\",value:function(){if(1===arguments.length){if(arguments[0]instanceof e){var t=arguments[0];return this.selfAdd(t._hi,t._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0],i=null,r=null,s=null,a=null,o=null,u=null;return a=(s=this._hi+n)-(o=s-this._hi),r=(u=(a=n-o+(this._hi-a))+this._lo)+(s-(i=s+u)),this._hi=i+r,this._lo=r+(i-this._hi),this}}else if(2===arguments.length){var l=arguments[0],h=arguments[1],c=null,f=null,v=null,g=null,y=null,d=null,_=null;g=this._hi+l,f=this._lo+h,y=g-(d=g-this._hi),v=f-(_=f-this._lo);var p=(c=g+(d=(y=l-d+(this._hi-y))+f))+(d=(v=h-_+(this._lo-v))+(d+(g-c))),m=d+(c-p);return this._hi=p,this._lo=m,this}}},{key:\"selfMultiply\",value:function(){if(1===arguments.length){if(arguments[0]instanceof e){var t=arguments[0];return this.selfMultiply(t._hi,t._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.selfMultiply(n,0)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1],s=null,a=null,o=null,u=null,l=null,h=null;s=(l=e.SPLIT*this._hi)-this._hi,h=e.SPLIT*i,s=l-s,a=this._hi-s,o=h-i;var c=(l=this._hi*i)+(h=s*(o=h-o)-l+s*(u=i-o)+a*o+a*u+(this._hi*r+this._lo*i)),f=h+(s=l-c);return this._hi=c,this._lo=f,this}}},{key:\"selfSqr\",value:function(){return this.selfMultiply(this)}},{key:\"floor\",value:function(){if(this.isNaN())return e.NaN;var t=Math.floor(this._hi),n=0;return t===this._hi&&(n=Math.floor(this._lo)),new e(t,n)}},{key:\"negate\",value:function(){return this.isNaN()?this:new e(-this._hi,-this._lo)}},{key:\"clone\",value:function(){try{return null}catch(t){if(t instanceof CloneNotSupportedException)return null;throw t}}},{key:\"multiply\",value:function(){if(arguments[0]instanceof e){var t=arguments[0];return t.isNaN()?e.createNaN():e.copy(this).selfMultiply(t)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return A.isNaN(n)?e.createNaN():e.copy(this).selfMultiply(n,0)}}},{key:\"isNaN\",value:function(){return A.isNaN(this._hi)}},{key:\"intValue\",value:function(){return Math.trunc(this._hi)}},{key:\"toString\",value:function(){var t=e.magnitude(this._hi);return t>=-3&&t<=20?this.toStandardNotation():this.toSciNotation()}},{key:\"toStandardNotation\",value:function(){var t=this.getSpecialNumberString();if(null!==t)return t;var n=new Array(1).fill(null),i=this.extractSignificantDigits(!0,n),r=n[0]+1,s=i;if(\".\"===i.charAt(0))s=\"0\"+i;else if(r<0)s=\"0.\"+e.stringOfChar(\"0\",-r)+i;else if(-1===i.indexOf(\".\")){var a=r-i.length;s=i+e.stringOfChar(\"0\",a)+\".0\"}return this.isNegative()?\"-\"+s:s}},{key:\"reciprocal\",value:function(){var t,n,i,r,s=null,a=null,o=null,u=null;t=(i=1/this._hi)-(s=(o=e.SPLIT*i)-(s=o-i)),a=(u=e.SPLIT*this._hi)-this._hi;var l=i+(o=(1-(r=i*this._hi)-(u=s*(a=u-a)-r+s*(n=this._hi-a)+t*a+t*n)-i*this._lo)/this._hi);return new e(l,i-l+o)}},{key:\"toSciNotation\",value:function(){if(this.isZero())return e.SCI_NOT_ZERO;var t=this.getSpecialNumberString();if(null!==t)return t;var n=new Array(1).fill(null),i=this.extractSignificantDigits(!1,n),r=e.SCI_NOT_EXPONENT_CHAR+n[0];if(\"0\"===i.charAt(0))throw new IllegalStateException(\"Found leading zero: \"+i);var s=\"\";i.length>1&&(s=i.substring(1));var a=i.charAt(0)+\".\"+s;return this.isNegative()?\"-\"+a+r:a+r}},{key:\"abs\",value:function(){return this.isNaN()?e.NaN:this.isNegative()?this.negate():new e(this)}},{key:\"isPositive\",value:function(){return this._hi>0||0===this._hi&&this._lo>0}},{key:\"lt\",value:function(t){return this._hi<t._hi||this._hi===t._hi&&this._lo<t._lo}},{key:\"add\",value:function(){if(arguments[0]instanceof e){var t=arguments[0];return e.copy(this).selfAdd(t)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return e.copy(this).selfAdd(n)}}},{key:\"init\",value:function(){if(1===arguments.length){if(\"number\"==typeof arguments[0]){var t=arguments[0];this._hi=t,this._lo=0}else if(arguments[0]instanceof e){var n=arguments[0];this._hi=n._hi,this._lo=n._lo}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this._hi=i,this._lo=r}}},{key:\"gt\",value:function(t){return this._hi>t._hi||this._hi===t._hi&&this._lo>t._lo}},{key:\"isNegative\",value:function(){return this._hi<0||0===this._hi&&this._lo<0}},{key:\"trunc\",value:function(){return this.isNaN()?e.NaN:this.isPositive()?this.floor():this.ceil()}},{key:\"signum\",value:function(){return this._hi>0?1:this._hi<0?-1:this._lo>0?1:this._lo<0?-1:0}},{key:\"interfaces_\",get:function(){return[E,x,I]}}],[{key:\"constructor_\",value:function(){if(this._hi=0,this._lo=0,0===arguments.length)this.init(0);else if(1===arguments.length){if(\"number\"==typeof arguments[0]){var t=arguments[0];this.init(t)}else if(arguments[0]instanceof e){var n=arguments[0];this.init(n)}else if(\"string\"==typeof arguments[0]){var i=arguments[0];e.constructor_.call(this,e.parse(i))}}else if(2===arguments.length){var r=arguments[0],s=arguments[1];this.init(r,s)}}},{key:\"determinant\",value:function(){if(\"number\"==typeof arguments[3]&&\"number\"==typeof arguments[2]&&\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var t=arguments[0],n=arguments[1],i=arguments[2],r=arguments[3];return e.determinant(e.valueOf(t),e.valueOf(n),e.valueOf(i),e.valueOf(r))}if(arguments[3]instanceof e&&arguments[2]instanceof e&&arguments[0]instanceof e&&arguments[1]instanceof e){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3],l=s.multiply(u).selfSubtract(a.multiply(o));return l}}},{key:\"sqr\",value:function(t){return e.valueOf(t).selfMultiply(t)}},{key:\"valueOf\",value:function(){if(\"string\"==typeof arguments[0]){var t=arguments[0];return e.parse(t)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return new e(n)}}},{key:\"sqrt\",value:function(t){return e.valueOf(t).sqrt()}},{key:\"parse\",value:function(t){for(var n=0,i=t.length;ot.isWhitespace(t.charAt(n));)n++;var r=!1;if(n<i){var s=t.charAt(n);\"-\"!==s&&\"+\"!==s||(n++,\"-\"===s&&(r=!0))}for(var a=new e,o=0,u=0,l=0,h=!1;!(n>=i);){var c=t.charAt(n);if(n++,ot.isDigit(c)){var f=c-\"0\";a.selfMultiply(e.TEN),a.selfAdd(f),o++}else{if(\".\"!==c){if(\"e\"===c||\"E\"===c){var v=t.substring(n);try{l=at.parseInt(v)}catch(e){throw e instanceof NumberFormatException?new NumberFormatException(\"Invalid exponent \"+v+\" in string \"+t):e}break}throw new NumberFormatException(\"Unexpected character '\"+c+\"' at position \"+n+\" in string \"+t)}u=o,h=!0}}var g=a;h||(u=o);var y=o-u-l;if(0===y)g=a;else if(y>0){var d=e.TEN.pow(y);g=a.divide(d)}else if(y<0){var _=e.TEN.pow(-y);g=a.multiply(_)}return r?g.negate():g}},{key:\"createNaN\",value:function(){return new e(A.NaN,A.NaN)}},{key:\"copy\",value:function(t){return new e(t)}},{key:\"magnitude\",value:function(t){var e=Math.abs(t),n=Math.log(e)/Math.log(10),i=Math.trunc(Math.floor(n));return 10*Math.pow(10,i)<=e&&(i+=1),i}},{key:\"stringOfChar\",value:function(t,e){for(var n=new st,i=0;i<e;i++)n.append(t);return n.toString()}}]),e}();ut.PI=new ut(3.141592653589793,12246467991473532e-32),ut.TWO_PI=new ut(6.283185307179586,24492935982947064e-32),ut.PI_2=new ut(1.5707963267948966,6123233995736766e-32),ut.E=new ut(2.718281828459045,14456468917292502e-32),ut.NaN=new ut(A.NaN,A.NaN),ut.EPS=123259516440783e-46,ut.SPLIT=134217729,ut.MAX_PRINT_DIGITS=32,ut.TEN=ut.valueOf(10),ut.ONE=ut.valueOf(1),ut.SCI_NOT_EXPONENT_CHAR=\"E\",ut.SCI_NOT_ZERO=\"0.0E0\";var lt=function(){function e(){t(this,e)}return n(e,null,[{key:\"orientationIndex\",value:function(t,n,i){var r=e.orientationIndexFilter(t,n,i);if(r<=1)return r;var s=ut.valueOf(n.x).selfAdd(-t.x),a=ut.valueOf(n.y).selfAdd(-t.y),o=ut.valueOf(i.x).selfAdd(-n.x),u=ut.valueOf(i.y).selfAdd(-n.y);return s.selfMultiply(u).selfSubtract(a.selfMultiply(o)).signum()}},{key:\"signOfDet2x2\",value:function(){if(arguments[3]instanceof ut&&arguments[2]instanceof ut&&arguments[0]instanceof ut&&arguments[1]instanceof ut){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3],r=t.multiply(i).selfSubtract(e.multiply(n));return r.signum()}if(\"number\"==typeof arguments[3]&&\"number\"==typeof arguments[2]&&\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3],l=ut.valueOf(s),h=ut.valueOf(a),c=ut.valueOf(o),f=ut.valueOf(u),v=l.multiply(f).selfSubtract(h.multiply(c));return v.signum()}}},{key:\"intersection\",value:function(t,e,n,i){var r=new ut(t.y).selfSubtract(e.y),s=new ut(e.x).selfSubtract(t.x),a=new ut(t.x).selfMultiply(e.y).selfSubtract(new ut(e.x).selfMultiply(t.y)),o=new ut(n.y).selfSubtract(i.y),u=new ut(i.x).selfSubtract(n.x),l=new ut(n.x).selfMultiply(i.y).selfSubtract(new ut(i.x).selfMultiply(n.y)),h=s.multiply(l).selfSubtract(u.multiply(a)),c=o.multiply(a).selfSubtract(r.multiply(l)),f=r.multiply(u).selfSubtract(o.multiply(s)),v=h.selfDivide(f).doubleValue(),g=c.selfDivide(f).doubleValue();return A.isNaN(v)||A.isInfinite(v)||A.isNaN(g)||A.isInfinite(g)?null:new X(v,g)}},{key:\"orientationIndexFilter\",value:function(t,n,i){var r=null,s=(t.x-i.x)*(n.y-i.y),a=(t.y-i.y)*(n.x-i.x),o=s-a;if(s>0){if(a<=0)return e.signum(o);r=s+a}else{if(!(s<0))return e.signum(o);if(a>=0)return e.signum(o);r=-s-a}var u=e.DP_SAFE_EPSILON*r;return o>=u||-o>=u?e.signum(o):2}},{key:\"signum\",value:function(t){return t>0?1:t<0?-1:0}}]),e}();lt.DP_SAFE_EPSILON=1e-15;var ht=function(){function e(){t(this,e)}return n(e,[{key:\"getM\",value:function(t){if(this.hasM()){var e=this.getDimension()-this.getMeasures();return this.getOrdinate(t,e)}return A.NaN}},{key:\"setOrdinate\",value:function(t,e,n){}},{key:\"getZ\",value:function(t){return this.hasZ()?this.getOrdinate(t,2):A.NaN}},{key:\"size\",value:function(){}},{key:\"getOrdinate\",value:function(t,e){}},{key:\"getCoordinate\",value:function(){}},{key:\"getCoordinateCopy\",value:function(t){}},{key:\"createCoordinate\",value:function(){}},{key:\"getDimension\",value:function(){}},{key:\"hasM\",value:function(){return this.getMeasures()>0}},{key:\"getX\",value:function(t){}},{key:\"hasZ\",value:function(){return this.getDimension()-this.getMeasures()>2}},{key:\"getMeasures\",value:function(){return 0}},{key:\"expandEnvelope\",value:function(t){}},{key:\"copy\",value:function(){}},{key:\"getY\",value:function(t){}},{key:\"toCoordinateArray\",value:function(){}},{key:\"interfaces_\",get:function(){return[I]}}]),e}();ht.X=0,ht.Y=1,ht.Z=2,ht.M=3;var ct=function(){function e(){t(this,e)}return n(e,null,[{key:\"index\",value:function(t,e,n){return lt.orientationIndex(t,e,n)}},{key:\"isCCW\",value:function(){if(arguments[0]instanceof Array){var t=arguments[0],n=t.length-1;if(n<3)throw new m(\"Ring has fewer than 4 points, so orientation cannot be determined\");for(var i=t[0],r=0,s=1;s<=n;s++){var a=t[s];a.y>i.y&&(i=a,r=s)}var o=r;do{(o-=1)<0&&(o=n)}while(t[o].equals2D(i)&&o!==r);var u=r;do{u=(u+1)%n}while(t[u].equals2D(i)&&u!==r);var l=t[o],h=t[u];if(l.equals2D(i)||h.equals2D(i)||l.equals2D(h))return!1;var c=e.index(l,i,h),f=null;return f=0===c?l.x>h.x:c>0,f}if(rt(arguments[0],ht)){var v=arguments[0],g=v.size()-1;if(g<3)throw new m(\"Ring has fewer than 4 points, so orientation cannot be determined\");for(var y=v.getCoordinate(0),d=0,_=1;_<=g;_++){var p=v.getCoordinate(_);p.y>y.y&&(y=p,d=_)}var k=null,x=d;do{(x-=1)<0&&(x=g),k=v.getCoordinate(x)}while(k.equals2D(y)&&x!==d);var I=null,E=d;do{E=(E+1)%g,I=v.getCoordinate(E)}while(I.equals2D(y)&&E!==d);if(k.equals2D(y)||I.equals2D(y)||k.equals2D(I))return!1;var N=e.index(k,y,I);return 0===N?k.x>I.x:N>0}}}]),e}();ct.CLOCKWISE=-1,ct.RIGHT=ct.CLOCKWISE,ct.COUNTERCLOCKWISE=1,ct.LEFT=ct.COUNTERCLOCKWISE,ct.COLLINEAR=0,ct.STRAIGHT=ct.COLLINEAR;var ft=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getCoordinate\",value:function(){return this._minCoord}},{key:\"getRightmostSide\",value:function(t,e){var n=this.getRightmostSideOfSegment(t,e);return n<0&&(n=this.getRightmostSideOfSegment(t,e-1)),n<0&&(this._minCoord=null,this.checkForRightmostCoordinate(t)),n}},{key:\"findRightmostEdgeAtVertex\",value:function(){var t=this._minDe.getEdge().getCoordinates();G.isTrue(this._minIndex>0&&this._minIndex<t.length,\"rightmost point expected to be interior vertex of edge\");var e=t[this._minIndex-1],n=t[this._minIndex+1],i=ct.index(this._minCoord,n,e),r=!1;(e.y<this._minCoord.y&&n.y<this._minCoord.y&&i===ct.COUNTERCLOCKWISE||e.y>this._minCoord.y&&n.y>this._minCoord.y&&i===ct.CLOCKWISE)&&(r=!0),r&&(this._minIndex=this._minIndex-1)}},{key:\"getRightmostSideOfSegment\",value:function(t,e){var n=t.getEdge().getCoordinates();if(e<0||e+1>=n.length)return-1;if(n[e].y===n[e+1].y)return-1;var i=$.LEFT;return n[e].y<n[e+1].y&&(i=$.RIGHT),i}},{key:\"getEdge\",value:function(){return this._orientedDe}},{key:\"checkForRightmostCoordinate\",value:function(t){for(var e=t.getEdge().getCoordinates(),n=0;n<e.length-1;n++)(null===this._minCoord||e[n].x>this._minCoord.x)&&(this._minDe=t,this._minIndex=n,this._minCoord=e[n])}},{key:\"findRightmostEdgeAtNode\",value:function(){var t=this._minDe.getNode().getEdges();this._minDe=t.getRightmostEdge(),this._minDe.isForward()||(this._minDe=this._minDe.getSym(),this._minIndex=this._minDe.getEdge().getCoordinates().length-1)}},{key:\"findEdge\",value:function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();n.isForward()&&this.checkForRightmostCoordinate(n)}G.isTrue(0!==this._minIndex||this._minCoord.equals(this._minDe.getCoordinate()),\"inconsistency in rightmost processing\"),0===this._minIndex?this.findRightmostEdgeAtNode():this.findRightmostEdgeAtVertex(),this._orientedDe=this._minDe,this.getRightmostSide(this._minDe,this._minIndex)===$.LEFT&&(this._orientedDe=this._minDe.getSym())}}],[{key:\"constructor_\",value:function(){this._minIndex=-1,this._minCoord=null,this._minDe=null,this._orientedDe=null}}]),e}(),vt=function(e){i(s,e);var r=c(s);function s(e,n){var i;return t(this,s),(i=r.call(this,n?e+\" [ \"+n+\" ]\":e)).pt=n?new X(n):void 0,i.name=Object.keys({TopologyException:s})[0],i}return n(s,[{key:\"getCoordinate\",value:function(){return this.pt}}]),s}(D),gt=function(){function e(){t(this,e),this.array=[]}return n(e,[{key:\"addLast\",value:function(t){this.array.push(t)}},{key:\"removeFirst\",value:function(){return this.array.shift()}},{key:\"isEmpty\",value:function(){return 0===this.array.length}}]),e}(),yt=function(e,r){i(a,e);var s=c(a);function a(e){var n;return t(this,a),(n=s.call(this)).array=[],e instanceof Z&&n.addAll(e),n}return n(a,[{key:\"interfaces_\",get:function(){return[nt,Z]}},{key:\"ensureCapacity\",value:function(){}},{key:\"add\",value:function(t){return 1===arguments.length?this.array.push(t):this.array.splice(arguments[0],0,arguments[1]),!0}},{key:\"clear\",value:function(){this.array=[]}},{key:\"addAll\",value:function(t){var e,n=d(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.array.push(i)}}catch(t){n.e(t)}finally{n.f()}}},{key:\"set\",value:function(t,e){var n=this.array[t];return this.array[t]=e,n}},{key:\"iterator\",value:function(){return new dt(this)}},{key:\"get\",value:function(t){if(t<0||t>=this.size())throw new et;return this.array[t]}},{key:\"isEmpty\",value:function(){return 0===this.array.length}},{key:\"sort\",value:function(t){t?this.array.sort((function(e,n){return t.compare(e,n)})):this.array.sort()}},{key:\"size\",value:function(){return this.array.length}},{key:\"toArray\",value:function(){return this.array.slice()}},{key:\"remove\",value:function(t){for(var e=0,n=this.array.length;e<n;e++)if(this.array[e]===t)return!!this.array.splice(e,1);return!1}},{key:r,value:function(){return this.array.values()}}]),a}(nt,Symbol.iterator),dt=function(){function e(n){t(this,e),this.arrayList=n,this.position=0}return n(e,[{key:\"next\",value:function(){if(this.position===this.arrayList.size())throw new j;return this.arrayList.get(this.position++)}},{key:\"hasNext\",value:function(){return this.position<this.arrayList.size()}},{key:\"set\",value:function(t){return this.arrayList.set(this.position-1,t)}},{key:\"remove\",value:function(){this.arrayList.remove(this.arrayList.get(this.position))}}]),e}(),_t=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"clearVisitedEdges\",value:function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){t.next().setVisited(!1)}}},{key:\"getRightmostCoordinate\",value:function(){return this._rightMostCoord}},{key:\"computeNodeDepth\",value:function(t){for(var e=null,n=t.getEdges().iterator();n.hasNext();){var i=n.next();if(i.isVisited()||i.getSym().isVisited()){e=i;break}}if(null===e)throw new vt(\"unable to find edge to compute depths at \"+t.getCoordinate());t.getEdges().computeDepths(e);for(var r=t.getEdges().iterator();r.hasNext();){var s=r.next();s.setVisited(!0),this.copySymDepths(s)}}},{key:\"computeDepth\",value:function(t){this.clearVisitedEdges();var e=this._finder.getEdge();e.getNode(),e.getLabel(),e.setEdgeDepths($.RIGHT,t),this.copySymDepths(e),this.computeDepths(e)}},{key:\"create\",value:function(t){this.addReachable(t),this._finder.findEdge(this._dirEdgeList),this._rightMostCoord=this._finder.getCoordinate()}},{key:\"findResultEdges\",value:function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){var e=t.next();e.getDepth($.RIGHT)>=1&&e.getDepth($.LEFT)<=0&&!e.isInteriorAreaEdge()&&e.setInResult(!0)}}},{key:\"computeDepths\",value:function(t){var e=new J,n=new gt,i=t.getNode();for(n.addLast(i),e.add(i),t.setVisited(!0);!n.isEmpty();){var r=n.removeFirst();e.add(r),this.computeNodeDepth(r);for(var s=r.getEdges().iterator();s.hasNext();){var a=s.next().getSym();if(!a.isVisited()){var o=a.getNode();e.contains(o)||(n.addLast(o),e.add(o))}}}}},{key:\"compareTo\",value:function(t){var e=t;return this._rightMostCoord.x<e._rightMostCoord.x?-1:this._rightMostCoord.x>e._rightMostCoord.x?1:0}},{key:\"getEnvelope\",value:function(){if(null===this._env){for(var t=new U,e=this._dirEdgeList.iterator();e.hasNext();)for(var n=e.next().getEdge().getCoordinates(),i=0;i<n.length-1;i++)t.expandToInclude(n[i]);this._env=t}return this._env}},{key:\"addReachable\",value:function(t){var e=new it;for(e.add(t);!e.empty();){var n=e.pop();this.add(n,e)}}},{key:\"copySymDepths\",value:function(t){var e=t.getSym();e.setDepth($.LEFT,t.getDepth($.RIGHT)),e.setDepth($.RIGHT,t.getDepth($.LEFT))}},{key:\"add\",value:function(t,e){t.setVisited(!0),this._nodes.add(t);for(var n=t.getEdges().iterator();n.hasNext();){var i=n.next();this._dirEdgeList.add(i);var r=i.getSym().getNode();r.isVisited()||e.push(r)}}},{key:\"getNodes\",value:function(){return this._nodes}},{key:\"getDirectedEdges\",value:function(){return this._dirEdgeList}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._finder=null,this._dirEdgeList=new yt,this._nodes=new yt,this._rightMostCoord=null,this._env=null,this._finder=new ft}}]),e}(),pt=function(){function e(){t(this,e)}return n(e,null,[{key:\"intersection\",value:function(t,e,n,i){var r=t.x<e.x?t.x:e.x,s=t.y<e.y?t.y:e.y,a=t.x>e.x?t.x:e.x,o=t.y>e.y?t.y:e.y,u=n.x<i.x?n.x:i.x,l=n.y<i.y?n.y:i.y,h=n.x>i.x?n.x:i.x,c=n.y>i.y?n.y:i.y,f=((r>u?r:u)+(a<h?a:h))/2,v=((s>l?s:l)+(o<c?o:c))/2,g=t.x-f,y=t.y-v,d=e.x-f,_=e.y-v,p=n.x-f,m=n.y-v,k=i.x-f,x=i.y-v,I=y-_,E=d-g,N=g*_-d*y,T=m-x,S=k-p,L=p*x-k*m,C=I*S-T*E,R=(E*L-S*N)/C,w=(T*N-I*L)/C;return A.isNaN(R)||A.isInfinite(R)||A.isNaN(w)||A.isInfinite(w)?null:new X(R+f,w+v)}}]),e}(),mt=function(){function e(){t(this,e)}return n(e,null,[{key:\"arraycopy\",value:function(t,e,n,i,r){for(var s=0,a=e;a<e+r;a++)n[i+s]=t[a],s++}},{key:\"getProperty\",value:function(t){return{\"line.separator\":\"\\n\"}[t]}}]),e}(),kt=function(){function e(){t(this,e)}return n(e,null,[{key:\"log10\",value:function(t){var n=Math.log(t);return A.isInfinite(n)||A.isNaN(n)?n:n/e.LOG_10}},{key:\"min\",value:function(t,e,n,i){var r=t;return e<r&&(r=e),n<r&&(r=n),i<r&&(r=i),r}},{key:\"clamp\",value:function(){if(\"number\"==typeof arguments[2]&&\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var t=arguments[0],e=arguments[1],n=arguments[2];return t<e?e:t>n?n:t}if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var i=arguments[0],r=arguments[1],s=arguments[2];return i<r?r:i>s?s:i}}},{key:\"wrap\",value:function(t,e){return t<0?e- -t%e:t%e}},{key:\"max\",value:function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=t;return e>i&&(i=e),n>i&&(i=n),i}if(4===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3],u=r;return s>u&&(u=s),a>u&&(u=a),o>u&&(u=o),u}}},{key:\"average\",value:function(t,e){return(t+e)/2}}]),e}();kt.LOG_10=Math.log(10);var xt=function(){function e(){t(this,e)}return n(e,null,[{key:\"segmentToSegment\",value:function(t,n,i,r){if(t.equals(n))return e.pointToSegment(t,i,r);if(i.equals(r))return e.pointToSegment(r,t,n);var s=!1;if(U.intersects(t,n,i,r)){var a=(n.x-t.x)*(r.y-i.y)-(n.y-t.y)*(r.x-i.x);if(0===a)s=!0;else{var o=(t.y-i.y)*(r.x-i.x)-(t.x-i.x)*(r.y-i.y),u=((t.y-i.y)*(n.x-t.x)-(t.x-i.x)*(n.y-t.y))/a,l=o/a;(l<0||l>1||u<0||u>1)&&(s=!0)}}else s=!0;return s?kt.min(e.pointToSegment(t,i,r),e.pointToSegment(n,i,r),e.pointToSegment(i,t,n),e.pointToSegment(r,t,n)):0}},{key:\"pointToSegment\",value:function(t,e,n){if(e.x===n.x&&e.y===n.y)return t.distance(e);var i=(n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y),r=((t.x-e.x)*(n.x-e.x)+(t.y-e.y)*(n.y-e.y))/i;if(r<=0)return t.distance(e);if(r>=1)return t.distance(n);var s=((e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y))/i;return Math.abs(s)*Math.sqrt(i)}},{key:\"pointToLinePerpendicular\",value:function(t,e,n){var i=(n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y),r=((e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y))/i;return Math.abs(r)*Math.sqrt(i)}},{key:\"pointToSegmentString\",value:function(t,n){if(0===n.length)throw new m(\"Line array must contain at least one vertex\");for(var i=t.distance(n[0]),r=0;r<n.length-1;r++){var s=e.pointToSegment(t,n[r],n[r+1]);s<i&&(i=s)}return i}}]),e}(),It=function(){function e(){t(this,e)}return n(e,[{key:\"create\",value:function(){if(1===arguments.length)arguments[0]instanceof Array||rt(arguments[0],ht);else if(2===arguments.length);else if(3===arguments.length){var t=arguments[0],e=arguments[1];return this.create(t,e)}}}]),e}(),Et=function(){function e(){t(this,e)}return n(e,[{key:\"filter\",value:function(t){}}]),e}(),Nt=function(){function e(){t(this,e)}return n(e,null,[{key:\"ofLine\",value:function(t){var e=t.size();if(e<=1)return 0;var n=0,i=new X;t.getCoordinate(0,i);for(var r=i.x,s=i.y,a=1;a<e;a++){t.getCoordinate(a,i);var o=i.x,u=i.y,l=o-r,h=u-s;n+=Math.sqrt(l*l+h*h),r=o,s=u}return n}}]),e}(),Tt=function e(){t(this,e)},St=function(){function e(){t(this,e)}return n(e,null,[{key:\"copyCoord\",value:function(t,e,n,i){for(var r=Math.min(t.getDimension(),n.getDimension()),s=0;s<r;s++)n.setOrdinate(i,s,t.getOrdinate(e,s))}},{key:\"isRing\",value:function(t){var e=t.size();return 0===e||!(e<=3)&&(t.getOrdinate(0,ht.X)===t.getOrdinate(e-1,ht.X)&&t.getOrdinate(0,ht.Y)===t.getOrdinate(e-1,ht.Y))}},{key:\"scroll\",value:function(){if(2===arguments.length){if(rt(arguments[0],ht)&&Number.isInteger(arguments[1])){var t=arguments[0],n=arguments[1];e.scroll(t,n,e.isRing(t))}else if(rt(arguments[0],ht)&&arguments[1]instanceof X){var i=arguments[0],r=arguments[1],s=e.indexOf(r,i);if(s<=0)return null;e.scroll(i,s)}}else if(3===arguments.length){var a=arguments[0],o=arguments[1],u=arguments[2],l=o;if(l<=0)return null;for(var h=a.copy(),c=u?a.size()-1:a.size(),f=0;f<c;f++)for(var v=0;v<a.getDimension();v++)a.setOrdinate(f,v,h.getOrdinate((o+f)%c,v));if(u)for(var g=0;g<a.getDimension();g++)a.setOrdinate(c,g,a.getOrdinate(0,g))}}},{key:\"isEqual\",value:function(t,e){var n=t.size();if(n!==e.size())return!1;for(var i=Math.min(t.getDimension(),e.getDimension()),r=0;r<n;r++)for(var s=0;s<i;s++){var a=t.getOrdinate(r,s),o=e.getOrdinate(r,s);if(t.getOrdinate(r,s)!==e.getOrdinate(r,s)&&(!A.isNaN(a)||!A.isNaN(o)))return!1}return!0}},{key:\"minCoordinateIndex\",value:function(){if(1===arguments.length){var t=arguments[0];return e.minCoordinateIndex(t,0,t.size()-1)}if(3===arguments.length){for(var n=arguments[0],i=arguments[1],r=arguments[2],s=-1,a=null,o=i;o<=r;o++){var u=n.getCoordinate(o);(null===a||a.compareTo(u)>0)&&(a=u,s=o)}return s}}},{key:\"extend\",value:function(t,n,i){var r=t.create(i,n.getDimension()),s=n.size();if(e.copy(n,0,r,0,s),s>0)for(var a=s;a<i;a++)e.copy(n,s-1,r,a,1);return r}},{key:\"reverse\",value:function(t){for(var n=t.size()-1,i=Math.trunc(n/2),r=0;r<=i;r++)e.swap(t,r,n-r)}},{key:\"swap\",value:function(t,e,n){if(e===n)return null;for(var i=0;i<t.getDimension();i++){var r=t.getOrdinate(e,i);t.setOrdinate(e,i,t.getOrdinate(n,i)),t.setOrdinate(n,i,r)}}},{key:\"copy\",value:function(t,n,i,r,s){for(var a=0;a<s;a++)e.copyCoord(t,n+a,i,r+a)}},{key:\"ensureValidRing\",value:function(t,n){var i=n.size();return 0===i?n:i<=3?e.createClosedRing(t,n,4):n.getOrdinate(0,ht.X)===n.getOrdinate(i-1,ht.X)&&n.getOrdinate(0,ht.Y)===n.getOrdinate(i-1,ht.Y)?n:e.createClosedRing(t,n,i+1)}},{key:\"indexOf\",value:function(t,e){for(var n=0;n<e.size();n++)if(t.x===e.getOrdinate(n,ht.X)&&t.y===e.getOrdinate(n,ht.Y))return n;return-1}},{key:\"createClosedRing\",value:function(t,n,i){var r=t.create(i,n.getDimension()),s=n.size();e.copy(n,0,r,0,s);for(var a=s;a<i;a++)e.copy(n,0,r,a,1);return r}},{key:\"minCoordinate\",value:function(t){for(var e=null,n=0;n<t.size();n++){var i=t.getCoordinate(n);(null===e||e.compareTo(i)>0)&&(e=i)}return e}}]),e}(),Lt=function(){function e(){t(this,e)}return n(e,null,[{key:\"toDimensionSymbol\",value:function(t){switch(t){case e.FALSE:return e.SYM_FALSE;case e.TRUE:return e.SYM_TRUE;case e.DONTCARE:return e.SYM_DONTCARE;case e.P:return e.SYM_P;case e.L:return e.SYM_L;case e.A:return e.SYM_A}throw new m(\"Unknown dimension value: \"+t)}},{key:\"toDimensionValue\",value:function(t){switch(ot.toUpperCase(t)){case e.SYM_FALSE:return e.FALSE;case e.SYM_TRUE:return e.TRUE;case e.SYM_DONTCARE:return e.DONTCARE;case e.SYM_P:return e.P;case e.SYM_L:return e.L;case e.SYM_A:return e.A}throw new m(\"Unknown dimension symbol: \"+t)}}]),e}();Lt.P=0,Lt.L=1,Lt.A=2,Lt.FALSE=-1,Lt.TRUE=-2,Lt.DONTCARE=-3,Lt.SYM_FALSE=\"F\",Lt.SYM_TRUE=\"T\",Lt.SYM_DONTCARE=\"*\",Lt.SYM_P=\"0\",Lt.SYM_L=\"1\",Lt.SYM_A=\"2\";var Ct=function(){function e(){t(this,e)}return n(e,[{key:\"filter\",value:function(t){}}]),e}(),Rt=function(){function e(){t(this,e)}return n(e,[{key:\"filter\",value:function(t,e){}},{key:\"isDone\",value:function(){}},{key:\"isGeometryChanged\",value:function(){}}]),e}(),wt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"computeEnvelopeInternal\",value:function(){return this.isEmpty()?new U:this._points.expandEnvelope(new U)}},{key:\"isRing\",value:function(){return this.isClosed()&&this.isSimple()}},{key:\"getCoordinates\",value:function(){return this._points.toCoordinateArray()}},{key:\"copyInternal\",value:function(){return new a(this._points.copy(),this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];if(!this.isEquivalentClass(t))return!1;var n=t;if(this._points.size()!==n._points.size())return!1;for(var i=0;i<this._points.size();i++)if(!this.equal(this._points.getCoordinate(i),n._points.getCoordinate(i),e))return!1;return!0}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"normalize\",value:function(){for(var t=0;t<Math.trunc(this._points.size()/2);t++){var e=this._points.size()-1-t;if(!this._points.getCoordinate(t).equals(this._points.getCoordinate(e))){if(this._points.getCoordinate(t).compareTo(this._points.getCoordinate(e))>0){var n=this._points.copy();St.reverse(n),this._points=n}return null}}}},{key:\"getCoordinate\",value:function(){return this.isEmpty()?null:this._points.getCoordinate(0)}},{key:\"getBoundaryDimension\",value:function(){return this.isClosed()?Lt.FALSE:0}},{key:\"isClosed\",value:function(){return!this.isEmpty()&&this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints()-1))}},{key:\"reverseInternal\",value:function(){var t=this._points.copy();return St.reverse(t),this.getFactory().createLineString(t)}},{key:\"getEndPoint\",value:function(){return this.isEmpty()?null:this.getPointN(this.getNumPoints()-1)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_LINESTRING}},{key:\"getDimension\",value:function(){return 1}},{key:\"getLength\",value:function(){return Nt.ofLine(this._points)}},{key:\"getNumPoints\",value:function(){return this._points.size()}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){for(var t=arguments[0],e=t,n=0,i=0;n<this._points.size()&&i<e._points.size();){var r=this._points.getCoordinate(n).compareTo(e._points.getCoordinate(i));if(0!==r)return r;n++,i++}return n<this._points.size()?1:i<e._points.size()?-1:0}if(2===arguments.length){var s=arguments[0],a=arguments[1],o=s;return a.compare(this._points,o._points)}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et))for(var t=arguments[0],e=0;e<this._points.size();e++)t.filter(this._points.getCoordinate(e));else if(rt(arguments[0],Rt)){var n=arguments[0];if(0===this._points.size())return null;for(var i=0;i<this._points.size()&&(n.filter(this._points,i),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){var r=arguments[0];r.filter(this)}else if(rt(arguments[0],k)){var s=arguments[0];s.filter(this)}}},{key:\"getBoundary\",value:function(){throw new W}},{key:\"isEquivalentClass\",value:function(t){return t instanceof a}},{key:\"getCoordinateN\",value:function(t){return this._points.getCoordinate(t)}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_LINESTRING}},{key:\"getCoordinateSequence\",value:function(){return this._points}},{key:\"isEmpty\",value:function(){return 0===this._points.size()}},{key:\"init\",value:function(t){if(null===t&&(t=this.getFactory().getCoordinateSequenceFactory().create([])),1===t.size())throw new m(\"Invalid number of points in LineString (found \"+t.size()+\" - must be 0 or >= 2)\");this._points=t}},{key:\"isCoordinate\",value:function(t){for(var e=0;e<this._points.size();e++)if(this._points.getCoordinate(e).equals(t))return!0;return!1}},{key:\"getStartPoint\",value:function(){return this.isEmpty()?null:this.getPointN(0)}},{key:\"getPointN\",value:function(t){return this.getFactory().createPoint(this._points.getCoordinate(t))}},{key:\"interfaces_\",get:function(){return[Tt]}}],[{key:\"constructor_\",value:function(){if(this._points=null,0===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];V.constructor_.call(this,e),this.init(t)}}}]),a}(V),Ot=function e(){t(this,e)},bt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"computeEnvelopeInternal\",value:function(){if(this.isEmpty())return new U;var t=new U;return t.expandToInclude(this._coordinates.getX(0),this._coordinates.getY(0)),t}},{key:\"getCoordinates\",value:function(){return this.isEmpty()?[]:[this.getCoordinate()]}},{key:\"copyInternal\",value:function(){return new a(this._coordinates.copy(),this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&(!(!this.isEmpty()||!t.isEmpty())||this.isEmpty()===t.isEmpty()&&this.equal(t.getCoordinate(),this.getCoordinate(),e))}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"normalize\",value:function(){}},{key:\"getCoordinate\",value:function(){return 0!==this._coordinates.size()?this._coordinates.getCoordinate(0):null}},{key:\"getBoundaryDimension\",value:function(){return Lt.FALSE}},{key:\"reverseInternal\",value:function(){return this.getFactory().createPoint(this._coordinates.copy())}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_POINT}},{key:\"getDimension\",value:function(){return 0}},{key:\"getNumPoints\",value:function(){return this.isEmpty()?0:1}},{key:\"getX\",value:function(){if(null===this.getCoordinate())throw new IllegalStateException(\"getX called on empty Point\");return this.getCoordinate().x}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){var t=arguments[0],e=t;return this.getCoordinate().compareTo(e.getCoordinate())}if(2===arguments.length){var n=arguments[0],i=arguments[1],r=n;return i.compare(this._coordinates,r._coordinates)}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et)){var t=arguments[0];if(this.isEmpty())return null;t.filter(this.getCoordinate())}else if(rt(arguments[0],Rt)){var e=arguments[0];if(this.isEmpty())return null;e.filter(this._coordinates,0),e.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){var n=arguments[0];n.filter(this)}else if(rt(arguments[0],k)){var i=arguments[0];i.filter(this)}}},{key:\"getBoundary\",value:function(){return this.getFactory().createGeometryCollection()}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_POINT}},{key:\"getCoordinateSequence\",value:function(){return this._coordinates}},{key:\"getY\",value:function(){if(null===this.getCoordinate())throw new IllegalStateException(\"getY called on empty Point\");return this.getCoordinate().y}},{key:\"isEmpty\",value:function(){return 0===this._coordinates.size()}},{key:\"init\",value:function(t){null===t&&(t=this.getFactory().getCoordinateSequenceFactory().create([])),G.isTrue(t.size()<=1),this._coordinates=t}},{key:\"isSimple\",value:function(){return!0}},{key:\"interfaces_\",get:function(){return[Ot]}}],[{key:\"constructor_\",value:function(){this._coordinates=null;var t=arguments[0],e=arguments[1];V.constructor_.call(this,e),this.init(t)}}]),a}(V),Mt=function(){function e(){t(this,e)}return n(e,null,[{key:\"ofRing\",value:function(){if(arguments[0]instanceof Array){var t=arguments[0];return Math.abs(e.ofRingSigned(t))}if(rt(arguments[0],ht)){var n=arguments[0];return Math.abs(e.ofRingSigned(n))}}},{key:\"ofRingSigned\",value:function(){if(arguments[0]instanceof Array){var t=arguments[0];if(t.length<3)return 0;for(var e=0,n=t[0].x,i=1;i<t.length-1;i++){var r=t[i].x-n,s=t[i+1].y,a=t[i-1].y;e+=r*(a-s)}return e/2}if(rt(arguments[0],ht)){var o=arguments[0],u=o.size();if(u<3)return 0;var l=new X,h=new X,c=new X;o.getCoordinate(0,h),o.getCoordinate(1,c);var f=h.x;c.x-=f;for(var v=0,g=1;g<u-1;g++)l.y=h.y,h.x=c.x,h.y=c.y,o.getCoordinate(g+1,c),c.x-=f,v+=h.x*(l.y-c.y);return v/2}}}]),e}(),At=function(){function e(){t(this,e)}return n(e,null,[{key:\"sort\",value:function(){var t=arguments,e=arguments[0];if(1===arguments.length)e.sort((function(t,e){return t.compareTo(e)}));else if(2===arguments.length)e.sort((function(e,n){return t[1].compare(e,n)}));else if(3===arguments.length){var n=e.slice(arguments[1],arguments[2]);n.sort();var i=e.slice(0,arguments[1]).concat(n,e.slice(arguments[2],e.length));e.splice(0,e.length);var r,s=d(i);try{for(s.s();!(r=s.n()).done;){var a=r.value;e.push(a)}}catch(t){s.e(t)}finally{s.f()}}else if(4===arguments.length){var o=e.slice(arguments[1],arguments[2]);o.sort((function(e,n){return t[3].compare(e,n)}));var u=e.slice(0,arguments[1]).concat(o,e.slice(arguments[2],e.length));e.splice(0,e.length);var l,h=d(u);try{for(h.s();!(l=h.n()).done;){var c=l.value;e.push(c)}}catch(t){h.e(t)}finally{h.f()}}}},{key:\"asList\",value:function(t){var e,n=new yt,i=d(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;n.add(r)}}catch(t){i.e(t)}finally{i.f()}return n}},{key:\"copyOf\",value:function(t,e){return t.slice(0,e)}}]),e}(),Pt=function e(){t(this,e)},Dt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"computeEnvelopeInternal\",value:function(){return this._shell.getEnvelopeInternal()}},{key:\"getCoordinates\",value:function(){if(this.isEmpty())return[];for(var t=new Array(this.getNumPoints()).fill(null),e=-1,n=this._shell.getCoordinates(),i=0;i<n.length;i++)t[++e]=n[i];for(var r=0;r<this._holes.length;r++)for(var s=this._holes[r].getCoordinates(),a=0;a<s.length;a++)t[++e]=s[a];return t}},{key:\"getArea\",value:function(){var t=0;t+=Mt.ofRing(this._shell.getCoordinateSequence());for(var e=0;e<this._holes.length;e++)t-=Mt.ofRing(this._holes[e].getCoordinateSequence());return t}},{key:\"copyInternal\",value:function(){for(var t=this._shell.copy(),e=new Array(this._holes.length).fill(null),n=0;n<this._holes.length;n++)e[n]=this._holes[n].copy();return new a(t,e,this._factory)}},{key:\"isRectangle\",value:function(){if(0!==this.getNumInteriorRing())return!1;if(null===this._shell)return!1;if(5!==this._shell.getNumPoints())return!1;for(var t=this._shell.getCoordinateSequence(),e=this.getEnvelopeInternal(),n=0;n<5;n++){var i=t.getX(n);if(i!==e.getMinX()&&i!==e.getMaxX())return!1;var r=t.getY(n);if(r!==e.getMinY()&&r!==e.getMaxY())return!1}for(var s=t.getX(0),a=t.getY(0),o=1;o<=4;o++){var u=t.getX(o),l=t.getY(o);if(u!==s===(l!==a))return!1;s=u,a=l}return!0}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];if(!this.isEquivalentClass(t))return!1;var n=t,i=this._shell,s=n._shell;if(!i.equalsExact(s,e))return!1;if(this._holes.length!==n._holes.length)return!1;for(var o=0;o<this._holes.length;o++)if(!this._holes[o].equalsExact(n._holes[o],e))return!1;return!0}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"normalize\",value:function(){if(0===arguments.length){this._shell=this.normalized(this._shell,!0);for(var t=0;t<this._holes.length;t++)this._holes[t]=this.normalized(this._holes[t],!1);At.sort(this._holes)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(e.isEmpty())return null;var i=e.getCoordinateSequence(),r=St.minCoordinateIndex(i,0,i.size()-2);St.scroll(i,r,!0),ct.isCCW(i)===n&&St.reverse(i)}}},{key:\"getCoordinate\",value:function(){return this._shell.getCoordinate()}},{key:\"getNumInteriorRing\",value:function(){return this._holes.length}},{key:\"getBoundaryDimension\",value:function(){return 1}},{key:\"reverseInternal\",value:function(){for(var t=this.getExteriorRing().reverse(),e=new Array(this.getNumInteriorRing()).fill(null),n=0;n<e.length;n++)e[n]=this.getInteriorRingN(n).reverse();return this.getFactory().createPolygon(t,e)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_POLYGON}},{key:\"getDimension\",value:function(){return 2}},{key:\"getLength\",value:function(){var t=0;t+=this._shell.getLength();for(var e=0;e<this._holes.length;e++)t+=this._holes[e].getLength();return t}},{key:\"getNumPoints\",value:function(){for(var t=this._shell.getNumPoints(),e=0;e<this._holes.length;e++)t+=this._holes[e].getNumPoints();return t}},{key:\"convexHull\",value:function(){return this.getExteriorRing().convexHull()}},{key:\"normalized\",value:function(t,e){var n=t.copy();return this.normalize(n,e),n}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){var t=arguments[0],e=this._shell,n=t._shell;return e.compareToSameClass(n)}if(2===arguments.length){var i=arguments[0],r=arguments[1],s=i,a=this._shell,o=s._shell,u=a.compareToSameClass(o,r);if(0!==u)return u;for(var l=this.getNumInteriorRing(),h=s.getNumInteriorRing(),c=0;c<l&&c<h;){var f=this.getInteriorRingN(c),v=s.getInteriorRingN(c),g=f.compareToSameClass(v,r);if(0!==g)return g;c++}return c<l?1:c<h?-1:0}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et)){var t=arguments[0];this._shell.apply(t);for(var e=0;e<this._holes.length;e++)this._holes[e].apply(t)}else if(rt(arguments[0],Rt)){var n=arguments[0];if(this._shell.apply(n),!n.isDone())for(var i=0;i<this._holes.length&&(this._holes[i].apply(n),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){var r=arguments[0];r.filter(this)}else if(rt(arguments[0],k)){var s=arguments[0];s.filter(this),this._shell.apply(s);for(var a=0;a<this._holes.length;a++)this._holes[a].apply(s)}}},{key:\"getBoundary\",value:function(){if(this.isEmpty())return this.getFactory().createMultiLineString();var t=new Array(this._holes.length+1).fill(null);t[0]=this._shell;for(var e=0;e<this._holes.length;e++)t[e+1]=this._holes[e];return t.length<=1?this.getFactory().createLinearRing(t[0].getCoordinateSequence()):this.getFactory().createMultiLineString(t)}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_POLYGON}},{key:\"getExteriorRing\",value:function(){return this._shell}},{key:\"isEmpty\",value:function(){return this._shell.isEmpty()}},{key:\"getInteriorRingN\",value:function(t){return this._holes[t]}},{key:\"interfaces_\",get:function(){return[Pt]}}],[{key:\"constructor_\",value:function(){this._shell=null,this._holes=null;var t=arguments[0],e=arguments[1],n=arguments[2];if(V.constructor_.call(this,n),null===t&&(t=this.getFactory().createLinearRing()),null===e&&(e=[]),V.hasNullElements(e))throw new m(\"holes must not contain null elements\");if(t.isEmpty()&&V.hasNonEmptyElements(e))throw new m(\"shell is empty but holes are not\");this._shell=t,this._holes=e}}]),a}(V),Ft=function(e){i(r,e);var n=c(r);function r(){return t(this,r),n.apply(this,arguments)}return r}(K),Gt=function(e){i(s,e);var r=c(s);function s(e){var n;return t(this,s),(n=r.call(this)).array=[],e instanceof Z&&n.addAll(e),n}return n(s,[{key:\"contains\",value:function(t){var e,n=d(this.array);try{for(n.s();!(e=n.n()).done;){if(0===e.value.compareTo(t))return!0}}catch(t){n.e(t)}finally{n.f()}return!1}},{key:\"add\",value:function(t){if(this.contains(t))return!1;for(var e=0,n=this.array.length;e<n;e++){if(1===this.array[e].compareTo(t))return!!this.array.splice(e,0,t)}return this.array.push(t),!0}},{key:\"addAll\",value:function(t){var e,n=d(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}return!0}},{key:\"remove\",value:function(){throw new W}},{key:\"size\",value:function(){return this.array.length}},{key:\"isEmpty\",value:function(){return 0===this.array.length}},{key:\"toArray\",value:function(){return this.array.slice()}},{key:\"iterator\",value:function(){return new qt(this.array)}}]),s}(Ft),qt=function(){function e(n){t(this,e),this.array=n,this.position=0}return n(e,[{key:\"next\",value:function(){if(this.position===this.array.length)throw new j;return this.array[this.position++]}},{key:\"hasNext\",value:function(){return this.position<this.array.length}},{key:\"remove\",value:function(){throw new W}}]),e}(),Yt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"computeEnvelopeInternal\",value:function(){for(var t=new U,e=0;e<this._geometries.length;e++)t.expandToInclude(this._geometries[e].getEnvelopeInternal());return t}},{key:\"getGeometryN\",value:function(t){return this._geometries[t]}},{key:\"getCoordinates\",value:function(){for(var t=new Array(this.getNumPoints()).fill(null),e=-1,n=0;n<this._geometries.length;n++)for(var i=this._geometries[n].getCoordinates(),r=0;r<i.length;r++)t[++e]=i[r];return t}},{key:\"getArea\",value:function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getArea();return t}},{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new a(t,this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];if(!this.isEquivalentClass(t))return!1;var n=t;if(this._geometries.length!==n._geometries.length)return!1;for(var i=0;i<this._geometries.length;i++)if(!this._geometries[i].equalsExact(n._geometries[i],e))return!1;return!0}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"normalize\",value:function(){for(var t=0;t<this._geometries.length;t++)this._geometries[t].normalize();At.sort(this._geometries)}},{key:\"getCoordinate\",value:function(){return this.isEmpty()?null:this._geometries[0].getCoordinate()}},{key:\"getBoundaryDimension\",value:function(){for(var t=Lt.FALSE,e=0;e<this._geometries.length;e++)t=Math.max(t,this._geometries[e].getBoundaryDimension());return t}},{key:\"reverseInternal\",value:function(){for(var t=this._geometries.length,e=new yt(t),n=0;n<t;n++)e.add(this._geometries[n].reverse());return this.getFactory().buildGeometry(e)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_GEOMETRYCOLLECTION}},{key:\"getDimension\",value:function(){for(var t=Lt.FALSE,e=0;e<this._geometries.length;e++)t=Math.max(t,this._geometries[e].getDimension());return t}},{key:\"getLength\",value:function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getLength();return t}},{key:\"getNumPoints\",value:function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getNumPoints();return t}},{key:\"getNumGeometries\",value:function(){return this._geometries.length}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){var t=arguments[0],e=new Gt(At.asList(this._geometries)),n=new Gt(At.asList(t._geometries));return this.compare(e,n)}if(2===arguments.length){for(var i=arguments[0],r=arguments[1],s=i,a=this.getNumGeometries(),o=s.getNumGeometries(),u=0;u<a&&u<o;){var l=this.getGeometryN(u),h=s.getGeometryN(u),c=l.compareToSameClass(h,r);if(0!==c)return c;u++}return u<a?1:u<o?-1:0}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et))for(var t=arguments[0],e=0;e<this._geometries.length;e++)this._geometries[e].apply(t);else if(rt(arguments[0],Rt)){var n=arguments[0];if(0===this._geometries.length)return null;for(var i=0;i<this._geometries.length&&(this._geometries[i].apply(n),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){var r=arguments[0];r.filter(this);for(var s=0;s<this._geometries.length;s++)this._geometries[s].apply(r)}else if(rt(arguments[0],k)){var a=arguments[0];a.filter(this);for(var o=0;o<this._geometries.length;o++)this._geometries[o].apply(a)}}},{key:\"getBoundary\",value:function(){return V.checkNotGeometryCollection(this),G.shouldNeverReachHere(),null}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_GEOMETRYCOLLECTION}},{key:\"isEmpty\",value:function(){for(var t=0;t<this._geometries.length;t++)if(!this._geometries[t].isEmpty())return!1;return!0}}],[{key:\"constructor_\",value:function(){if(this._geometries=null,0===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];if(V.constructor_.call(this,e),null===t&&(t=[]),V.hasNullElements(t))throw new m(\"geometries must not contain null elements\");this._geometries=t}}}]),a}(V),zt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new a(t,this._factory)}},{key:\"isValid\",value:function(){return!0}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&f(r(a.prototype),\"equalsExact\",this).call(this,t,e)}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"getCoordinate\",value:function(){if(1===arguments.length&&Number.isInteger(arguments[0])){var t=arguments[0];return this._geometries[t].getCoordinate()}return f(r(a.prototype),\"getCoordinate\",this).apply(this,arguments)}},{key:\"getBoundaryDimension\",value:function(){return Lt.FALSE}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_MULTIPOINT}},{key:\"getDimension\",value:function(){return 0}},{key:\"getBoundary\",value:function(){return this.getFactory().createGeometryCollection()}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_MULTIPOINT}},{key:\"interfaces_\",get:function(){return[Ot]}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Yt.constructor_.call(this,t,e)}}]),a}(Yt),Xt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"copyInternal\",value:function(){return new a(this._points.copy(),this._factory)}},{key:\"getBoundaryDimension\",value:function(){return Lt.FALSE}},{key:\"isClosed\",value:function(){return!!this.isEmpty()||f(r(a.prototype),\"isClosed\",this).call(this)}},{key:\"reverseInternal\",value:function(){var t=this._points.copy();return St.reverse(t),this.getFactory().createLinearRing(t)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_LINEARRING}},{key:\"validateConstruction\",value:function(){if(!this.isEmpty()&&!f(r(a.prototype),\"isClosed\",this).call(this))throw new m(\"Points of LinearRing do not form a closed linestring\");if(this.getCoordinateSequence().size()>=1&&this.getCoordinateSequence().size()<a.MINIMUM_VALID_SIZE)throw new m(\"Invalid number of points in LinearRing (found \"+this.getCoordinateSequence().size()+\" - must be 0 or >= 4)\")}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_LINEARRING}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];wt.constructor_.call(this,t,e),this.validateConstruction()}}]),a}(wt);Xt.MINIMUM_VALID_SIZE=4;var Bt=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"setOrdinate\",value:function(t,e){switch(t){case s.X:this.x=e;break;case s.Y:this.y=e;break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"getZ\",value:function(){return X.NULL_ORDINATE}},{key:\"getOrdinate\",value:function(t){switch(t){case s.X:return this.x;case s.Y:return this.y}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"setZ\",value:function(t){throw new m(\"CoordinateXY dimension 2 does not support z-ordinate\")}},{key:\"copy\",value:function(){return new s(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\")\"}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ()}}],[{key:\"constructor_\",value:function(){if(0===arguments.length)X.constructor_.call(this);else if(1===arguments.length){if(arguments[0]instanceof s){var t=arguments[0];X.constructor_.call(this,t.x,t.y)}else if(arguments[0]instanceof X){var e=arguments[0];X.constructor_.call(this,e.x,e.y)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];X.constructor_.call(this,n,i,X.NULL_ORDINATE)}}}]),s}(X);Bt.X=0,Bt.Y=1,Bt.Z=-1,Bt.M=-1;var Ut=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"getM\",value:function(){return this._m}},{key:\"setOrdinate\",value:function(t,e){switch(t){case s.X:this.x=e;break;case s.Y:this.y=e;break;case s.M:this._m=e;break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"setM\",value:function(t){this._m=t}},{key:\"getZ\",value:function(){return X.NULL_ORDINATE}},{key:\"getOrdinate\",value:function(t){switch(t){case s.X:return this.x;case s.Y:return this.y;case s.M:return this._m}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"setZ\",value:function(t){throw new m(\"CoordinateXY dimension 2 does not support z-ordinate\")}},{key:\"copy\",value:function(){return new s(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\" m=\"+this.getM()+\")\"}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ(),this._m=t.getM()}}],[{key:\"constructor_\",value:function(){if(this._m=null,0===arguments.length)X.constructor_.call(this),this._m=0;else if(1===arguments.length){if(arguments[0]instanceof s){var t=arguments[0];X.constructor_.call(this,t.x,t.y),this._m=t._m}else if(arguments[0]instanceof X){var e=arguments[0];X.constructor_.call(this,e.x,e.y),this._m=this.getM()}}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];X.constructor_.call(this,n,i,X.NULL_ORDINATE),this._m=r}}}]),s}(X);Ut.X=0,Ut.Y=1,Ut.Z=-1,Ut.M=2;var Vt=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"getM\",value:function(){return this._m}},{key:\"setOrdinate\",value:function(t,e){switch(t){case X.X:this.x=e;break;case X.Y:this.y=e;break;case X.Z:this.z=e;break;case X.M:this._m=e;break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"setM\",value:function(t){this._m=t}},{key:\"getOrdinate\",value:function(t){switch(t){case X.X:return this.x;case X.Y:return this.y;case X.Z:return this.getZ();case X.M:return this.getM()}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"copy\",value:function(){return new s(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\", \"+this.getZ()+\" m=\"+this.getM()+\")\"}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ(),this._m=t.getM()}}],[{key:\"constructor_\",value:function(){if(this._m=null,0===arguments.length)X.constructor_.call(this),this._m=0;else if(1===arguments.length){if(arguments[0]instanceof s){var t=arguments[0];X.constructor_.call(this,t),this._m=t._m}else if(arguments[0]instanceof X){var e=arguments[0];X.constructor_.call(this,e),this._m=this.getM()}}else if(4===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],a=arguments[3];X.constructor_.call(this,n,i,r),this._m=a}}}]),s}(X),Ht=function(){function e(){t(this,e)}return n(e,null,[{key:\"measures\",value:function(t){return t instanceof Bt?0:t instanceof Ut||t instanceof Vt?1:0}},{key:\"dimension\",value:function(t){return t instanceof Bt?2:t instanceof Ut?3:t instanceof Vt?4:3}},{key:\"create\",value:function(){if(1===arguments.length){var t=arguments[0];return e.create(t,0)}if(2===arguments.length){var n=arguments[0],i=arguments[1];return 2===n?new Bt:3===n&&0===i?new X:3===n&&1===i?new Ut:4===n&&1===i?new Vt:new X}}}]),e}(),Zt=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"getCoordinate\",value:function(t){return this.get(t)}},{key:\"addAll\",value:function(){if(2===arguments.length&&\"boolean\"==typeof arguments[1]&&rt(arguments[0],Z)){for(var t=arguments[0],e=arguments[1],n=!1,i=t.iterator();i.hasNext();)this.add(i.next(),e),n=!0;return n}return f(r(a.prototype),\"addAll\",this).apply(this,arguments)}},{key:\"clone\",value:function(){for(var t=f(r(a.prototype),\"clone\",this).call(this),e=0;e<this.size();e++)t.add(e,this.get(e).clone());return t}},{key:\"toCoordinateArray\",value:function(){if(0===arguments.length)return this.toArray(a.coordArrayType);if(1===arguments.length){var t=arguments[0];if(t)return this.toArray(a.coordArrayType);for(var e=this.size(),n=new Array(e).fill(null),i=0;i<e;i++)n[i]=this.get(e-i-1);return n}}},{key:\"add\",value:function(){if(1===arguments.length){var t=arguments[0];return f(r(a.prototype),\"add\",this).call(this,t)}if(2===arguments.length){if(arguments[0]instanceof Array&&\"boolean\"==typeof arguments[1]){var e=arguments[0],n=arguments[1];return this.add(e,n,!0),!0}if(arguments[0]instanceof X&&\"boolean\"==typeof arguments[1]){var i=arguments[0],s=arguments[1];if(!s&&this.size()>=1){var o=this.get(this.size()-1);if(o.equals2D(i))return null}f(r(a.prototype),\"add\",this).call(this,i)}else if(arguments[0]instanceof Object&&\"boolean\"==typeof arguments[1]){var u=arguments[0],l=arguments[1];return this.add(u,l),!0}}else if(3===arguments.length){if(\"boolean\"==typeof arguments[2]&&arguments[0]instanceof Array&&\"boolean\"==typeof arguments[1]){var h=arguments[0],c=arguments[1],v=arguments[2];if(v)for(var g=0;g<h.length;g++)this.add(h[g],c);else for(var y=h.length-1;y>=0;y--)this.add(h[y],c);return!0}if(\"boolean\"==typeof arguments[2]&&Number.isInteger(arguments[0])&&arguments[1]instanceof X){var d=arguments[0],_=arguments[1],p=arguments[2];if(!p){var m=this.size();if(m>0){if(d>0){var k=this.get(d-1);if(k.equals2D(_))return null}if(d<m){var x=this.get(d);if(x.equals2D(_))return null}}}f(r(a.prototype),\"add\",this).call(this,d,_)}}else if(4===arguments.length){var I=arguments[0],E=arguments[1],N=arguments[2],T=arguments[3],S=1;N>T&&(S=-1);for(var L=N;L!==T;L+=S)this.add(I[L],E);return!0}}},{key:\"closeRing\",value:function(){if(this.size()>0){var t=this.get(0).copy();this.add(t,!1)}}}],[{key:\"constructor_\",value:function(){if(0===arguments.length);else if(1===arguments.length){var t=arguments[0];this.ensureCapacity(t.length),this.add(t,!0)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.ensureCapacity(e.length),this.add(e,n)}}}]),a}(yt);Zt.coordArrayType=new Array(0).fill(null);var jt=function(){function e(){t(this,e)}return n(e,null,[{key:\"isRing\",value:function(t){return!(t.length<4)&&!!t[0].equals2D(t[t.length-1])}},{key:\"ptNotInList\",value:function(t,n){for(var i=0;i<t.length;i++){var r=t[i];if(e.indexOf(r,n)<0)return r}return null}},{key:\"scroll\",value:function(t,n){var i=e.indexOf(n,t);if(i<0)return null;var r=new Array(t.length).fill(null);mt.arraycopy(t,i,r,0,t.length-i),mt.arraycopy(t,0,r,t.length-i,i),mt.arraycopy(r,0,t,0,t.length)}},{key:\"equals\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];if(t===e)return!0;if(null===t||null===e)return!1;if(t.length!==e.length)return!1;for(var n=0;n<t.length;n++)if(!t[n].equals(e[n]))return!1;return!0}if(3===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2];if(i===r)return!0;if(null===i||null===r)return!1;if(i.length!==r.length)return!1;for(var a=0;a<i.length;a++)if(0!==s.compare(i[a],r[a]))return!1;return!0}}},{key:\"intersection\",value:function(t,e){for(var n=new Zt,i=0;i<t.length;i++)e.intersects(t[i])&&n.add(t[i],!0);return n.toCoordinateArray()}},{key:\"measures\",value:function(t){if(null===t||0===t.length)return 0;var e,n=0,i=d(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;n=Math.max(n,Ht.measures(r))}}catch(t){i.e(t)}finally{i.f()}return n}},{key:\"hasRepeatedPoints\",value:function(t){for(var e=1;e<t.length;e++)if(t[e-1].equals(t[e]))return!0;return!1}},{key:\"removeRepeatedPoints\",value:function(t){return e.hasRepeatedPoints(t)?new Zt(t,!1).toCoordinateArray():t}},{key:\"reverse\",value:function(t){for(var e=t.length-1,n=Math.trunc(e/2),i=0;i<=n;i++){var r=t[i];t[i]=t[e-i],t[e-i]=r}}},{key:\"removeNull\",value:function(t){for(var e=0,n=0;n<t.length;n++)null!==t[n]&&e++;var i=new Array(e).fill(null);if(0===e)return i;for(var r=0,s=0;s<t.length;s++)null!==t[s]&&(i[r++]=t[s]);return i}},{key:\"copyDeep\",value:function(){if(1===arguments.length){for(var t=arguments[0],e=new Array(t.length).fill(null),n=0;n<t.length;n++)e[n]=t[n].copy();return e}if(5===arguments.length)for(var i=arguments[0],r=arguments[1],s=arguments[2],a=arguments[3],o=arguments[4],u=0;u<o;u++)s[a+u]=i[r+u].copy()}},{key:\"isEqualReversed\",value:function(t,e){for(var n=0;n<t.length;n++){var i=t[n],r=e[t.length-n-1];if(0!==i.compareTo(r))return!1}return!0}},{key:\"envelope\",value:function(t){for(var e=new U,n=0;n<t.length;n++)e.expandToInclude(t[n]);return e}},{key:\"toCoordinateArray\",value:function(t){return t.toArray(e.coordArrayType)}},{key:\"dimension\",value:function(t){if(null===t||0===t.length)return 3;var e,n=0,i=d(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;n=Math.max(n,Ht.dimension(r))}}catch(t){i.e(t)}finally{i.f()}return n}},{key:\"atLeastNCoordinatesOrNothing\",value:function(t,e){return e.length>=t?e:[]}},{key:\"indexOf\",value:function(t,e){for(var n=0;n<e.length;n++)if(t.equals(e[n]))return n;return-1}},{key:\"increasingDirection\",value:function(t){for(var e=0;e<Math.trunc(t.length/2);e++){var n=t.length-1-e,i=t[e].compareTo(t[n]);if(0!==i)return i}return 1}},{key:\"compare\",value:function(t,e){for(var n=0;n<t.length&&n<e.length;){var i=t[n].compareTo(e[n]);if(0!==i)return i;n++}return n<e.length?-1:n<t.length?1:0}},{key:\"minCoordinate\",value:function(t){for(var e=null,n=0;n<t.length;n++)(null===e||e.compareTo(t[n])>0)&&(e=t[n]);return e}},{key:\"extract\",value:function(t,e,n){e=kt.clamp(e,0,t.length);var i=(n=kt.clamp(n,-1,t.length))-e+1;n<0&&(i=0),e>=t.length&&(i=0),n<e&&(i=0);var r=new Array(i).fill(null);if(0===i)return r;for(var s=0,a=e;a<=n;a++)r[s++]=t[a];return r}}]),e}(),Wt=function(){function e(){t(this,e)}return n(e,[{key:\"compare\",value:function(t,e){var n=t,i=e;return jt.compare(n,i)}},{key:\"interfaces_\",get:function(){return[P]}}]),e}(),Kt=function(){function e(){t(this,e)}return n(e,[{key:\"compare\",value:function(t,e){var n=t,i=e;if(n.length<i.length)return-1;if(n.length>i.length)return 1;if(0===n.length)return 0;var r=jt.compare(n,i);return jt.isEqualReversed(n,i)?0:r}},{key:\"OLDcompare\",value:function(t,e){var n=t,i=e;if(n.length<i.length)return-1;if(n.length>i.length)return 1;if(0===n.length)return 0;for(var r=jt.increasingDirection(n),s=jt.increasingDirection(i),a=r>0?0:n.length-1,o=s>0?0:n.length-1,u=0;u<n.length;u++){var l=n[a].compareTo(i[o]);if(0!==l)return l;a+=r,o+=s}return 0}},{key:\"interfaces_\",get:function(){return[P]}}]),e}();jt.ForwardComparator=Wt,jt.BidirectionalComparator=Kt,jt.coordArrayType=new Array(0).fill(null);var Jt=function(){function e(n){t(this,e),this.str=n}return n(e,[{key:\"append\",value:function(t){this.str+=t}},{key:\"setCharAt\",value:function(t,e){this.str=this.str.substr(0,t)+e+this.str.substr(t+1)}},{key:\"toString\",value:function(){return this.str}}]),e}(),Qt=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getM\",value:function(t){return this.hasM()?this._coordinates[t].getM():A.NaN}},{key:\"setOrdinate\",value:function(t,e,n){switch(e){case ht.X:this._coordinates[t].x=n;break;case ht.Y:this._coordinates[t].y=n;break;default:this._coordinates[t].setOrdinate(e,n)}}},{key:\"getZ\",value:function(t){return this.hasZ()?this._coordinates[t].getZ():A.NaN}},{key:\"size\",value:function(){return this._coordinates.length}},{key:\"getOrdinate\",value:function(t,e){switch(e){case ht.X:return this._coordinates[t].x;case ht.Y:return this._coordinates[t].y;default:return this._coordinates[t].getOrdinate(e)}}},{key:\"getCoordinate\",value:function(){if(1===arguments.length){var t=arguments[0];return this._coordinates[t]}if(2===arguments.length){var e=arguments[0],n=arguments[1];n.setCoordinate(this._coordinates[e])}}},{key:\"getCoordinateCopy\",value:function(t){var e=this.createCoordinate();return e.setCoordinate(this._coordinates[t]),e}},{key:\"createCoordinate\",value:function(){return Ht.create(this.getDimension(),this.getMeasures())}},{key:\"getDimension\",value:function(){return this._dimension}},{key:\"getX\",value:function(t){return this._coordinates[t].x}},{key:\"getMeasures\",value:function(){return this._measures}},{key:\"expandEnvelope\",value:function(t){for(var e=0;e<this._coordinates.length;e++)t.expandToInclude(this._coordinates[e]);return t}},{key:\"copy\",value:function(){for(var t=new Array(this.size()).fill(null),n=0;n<this._coordinates.length;n++){var i=this.createCoordinate();i.setCoordinate(this._coordinates[n]),t[n]=i}return new e(t,this._dimension,this._measures)}},{key:\"toString\",value:function(){if(this._coordinates.length>0){var t=new Jt(17*this._coordinates.length);t.append(\"(\"),t.append(this._coordinates[0]);for(var e=1;e<this._coordinates.length;e++)t.append(\", \"),t.append(this._coordinates[e]);return t.append(\")\"),t.toString()}return\"()\"}},{key:\"getY\",value:function(t){return this._coordinates[t].y}},{key:\"toCoordinateArray\",value:function(){return this._coordinates}},{key:\"interfaces_\",get:function(){return[ht,E]}}],[{key:\"constructor_\",value:function(){if(this._dimension=3,this._measures=0,this._coordinates=null,1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];e.constructor_.call(this,t,jt.dimension(t),jt.measures(t))}else if(Number.isInteger(arguments[0])){var n=arguments[0];this._coordinates=new Array(n).fill(null);for(var i=0;i<n;i++)this._coordinates[i]=new X}else if(rt(arguments[0],ht)){var r=arguments[0];if(null===r)return this._coordinates=new Array(0).fill(null),null;this._dimension=r.getDimension(),this._measures=r.getMeasures(),this._coordinates=new Array(r.size()).fill(null);for(var s=0;s<this._coordinates.length;s++)this._coordinates[s]=r.getCoordinateCopy(s)}}else if(2===arguments.length){if(arguments[0]instanceof Array&&Number.isInteger(arguments[1])){var a=arguments[0],o=arguments[1];e.constructor_.call(this,a,o,jt.measures(a))}else if(Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var u=arguments[0],l=arguments[1];this._coordinates=new Array(u).fill(null),this._dimension=l;for(var h=0;h<u;h++)this._coordinates[h]=Ht.create(l)}}else if(3===arguments.length)if(Number.isInteger(arguments[2])&&arguments[0]instanceof Array&&Number.isInteger(arguments[1])){var c=arguments[0],f=arguments[1],v=arguments[2];this._dimension=f,this._measures=v,this._coordinates=null===c?new Array(0).fill(null):c}else if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var g=arguments[0],y=arguments[1],d=arguments[2];this._coordinates=new Array(g).fill(null),this._dimension=y,this._measures=d;for(var _=0;_<g;_++)this._coordinates[_]=this.createCoordinate()}}}]),e}(),$t=function(){function e(){t(this,e)}return n(e,[{key:\"readResolve\",value:function(){return e.instance()}},{key:\"create\",value:function(){if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return new Qt(t)}if(rt(arguments[0],ht)){var e=arguments[0];return new Qt(e)}}else{if(2===arguments.length){var n=arguments[0],i=arguments[1];return i>3&&(i=3),i<2&&(i=2),new Qt(n,i)}if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=s-a;return a>1&&(a=1),o>3&&(o=3),o<2&&(o=2),new Qt(r,o+a,a)}}}},{key:\"interfaces_\",get:function(){return[It,E]}}],[{key:\"instance\",value:function(){return e.instanceObject}}]),e}();$t.instanceObject=new $t;var te=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new a(t,this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&f(r(a.prototype),\"equalsExact\",this).call(this,t,e)}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"getBoundaryDimension\",value:function(){return 1}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_MULTIPOLYGON}},{key:\"getDimension\",value:function(){return 2}},{key:\"getBoundary\",value:function(){if(this.isEmpty())return this.getFactory().createMultiLineString();for(var t=new yt,e=0;e<this._geometries.length;e++)for(var n=this._geometries[e].getBoundary(),i=0;i<n.getNumGeometries();i++)t.add(n.getGeometryN(i));var r=new Array(t.size()).fill(null);return this.getFactory().createMultiLineString(t.toArray(r))}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_MULTIPOLYGON}},{key:\"interfaces_\",get:function(){return[Pt]}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Yt.constructor_.call(this,t,e)}}]),a}(Yt),ee=function(){function e(){t(this,e)}return n(e,[{key:\"get\",value:function(){}},{key:\"put\",value:function(){}},{key:\"size\",value:function(){}},{key:\"values\",value:function(){}},{key:\"entrySet\",value:function(){}}]),e}(),ne=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),(e=r.call(this)).map=new Map,e}return n(s,[{key:\"get\",value:function(t){return this.map.get(t)||null}},{key:\"put\",value:function(t,e){return this.map.set(t,e),e}},{key:\"values\",value:function(){for(var t=new yt,e=this.map.values(),n=e.next();!n.done;)t.add(n.value),n=e.next();return t}},{key:\"entrySet\",value:function(){var t=new J;return this.map.entries().forEach((function(e){return t.add(e)})),t}},{key:\"size\",value:function(){return this.map.size()}}]),s}(ee),ie=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"equals\",value:function(t){if(!(t instanceof e))return!1;var n=t;return this._modelType===n._modelType&&this._scale===n._scale}},{key:\"compareTo\",value:function(t){var e=t,n=this.getMaximumSignificantDigits(),i=e.getMaximumSignificantDigits();return at.compare(n,i)}},{key:\"getScale\",value:function(){return this._scale}},{key:\"isFloating\",value:function(){return this._modelType===e.FLOATING||this._modelType===e.FLOATING_SINGLE}},{key:\"getType\",value:function(){return this._modelType}},{key:\"toString\",value:function(){var t=\"UNKNOWN\";return this._modelType===e.FLOATING?t=\"Floating\":this._modelType===e.FLOATING_SINGLE?t=\"Floating-Single\":this._modelType===e.FIXED&&(t=\"Fixed (Scale=\"+this.getScale()+\")\"),t}},{key:\"makePrecise\",value:function(){if(\"number\"==typeof arguments[0]){var t=arguments[0];if(A.isNaN(t))return t;if(this._modelType===e.FLOATING_SINGLE){return t}return this._modelType===e.FIXED?Math.round(t*this._scale)/this._scale:t}if(arguments[0]instanceof X){var n=arguments[0];if(this._modelType===e.FLOATING)return null;n.x=this.makePrecise(n.x),n.y=this.makePrecise(n.y)}}},{key:\"getMaximumSignificantDigits\",value:function(){var t=16;return this._modelType===e.FLOATING?t=16:this._modelType===e.FLOATING_SINGLE?t=6:this._modelType===e.FIXED&&(t=1+Math.trunc(Math.ceil(Math.log(this.getScale())/Math.log(10)))),t}},{key:\"setScale\",value:function(t){this._scale=Math.abs(t)}},{key:\"interfaces_\",get:function(){return[E,x]}}],[{key:\"constructor_\",value:function(){if(this._modelType=null,this._scale=null,0===arguments.length)this._modelType=e.FLOATING;else if(1===arguments.length)if(arguments[0]instanceof re){var t=arguments[0];this._modelType=t,t===e.FIXED&&this.setScale(1)}else if(\"number\"==typeof arguments[0]){var n=arguments[0];this._modelType=e.FIXED,this.setScale(n)}else if(arguments[0]instanceof e){var i=arguments[0];this._modelType=i._modelType,this._scale=i._scale}}},{key:\"mostPrecise\",value:function(t,e){return t.compareTo(e)>=0?t:e}}]),e}(),re=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"readResolve\",value:function(){return e.nameToTypeMap.get(this._name)}},{key:\"toString\",value:function(){return this._name}},{key:\"interfaces_\",get:function(){return[E]}}],[{key:\"constructor_\",value:function(){this._name=null;var t=arguments[0];this._name=t,e.nameToTypeMap.put(t,this)}}]),e}();re.nameToTypeMap=new ne,ie.Type=re,ie.FIXED=new re(\"FIXED\"),ie.FLOATING=new re(\"FLOATING\"),ie.FLOATING_SINGLE=new re(\"FLOATING SINGLE\"),ie.maximumPreciseValue=9007199254740992;var se=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new a(t,this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&f(r(a.prototype),\"equalsExact\",this).call(this,t,e)}return f(r(a.prototype),\"equalsExact\",this).apply(this,arguments)}},{key:\"getBoundaryDimension\",value:function(){return this.isClosed()?Lt.FALSE:0}},{key:\"isClosed\",value:function(){if(this.isEmpty())return!1;for(var t=0;t<this._geometries.length;t++)if(!this._geometries[t].isClosed())return!1;return!0}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_MULTILINESTRING}},{key:\"getDimension\",value:function(){return 1}},{key:\"getBoundary\",value:function(){throw new W}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_MULTILINESTRING}},{key:\"interfaces_\",get:function(){return[Tt]}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Yt.constructor_.call(this,t,e)}}]),a}(Yt),ae=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"createEmpty\",value:function(t){switch(t){case-1:return this.createGeometryCollection();case 0:return this.createPoint();case 1:return this.createLineString();case 2:return this.createPolygon();default:throw new m(\"Invalid dimension: \"+t)}}},{key:\"toGeometry\",value:function(t){return t.isNull()?this.createPoint():t.getMinX()===t.getMaxX()&&t.getMinY()===t.getMaxY()?this.createPoint(new X(t.getMinX(),t.getMinY())):t.getMinX()===t.getMaxX()||t.getMinY()===t.getMaxY()?this.createLineString([new X(t.getMinX(),t.getMinY()),new X(t.getMaxX(),t.getMaxY())]):this.createPolygon(this.createLinearRing([new X(t.getMinX(),t.getMinY()),new X(t.getMinX(),t.getMaxY()),new X(t.getMaxX(),t.getMaxY()),new X(t.getMaxX(),t.getMinY()),new X(t.getMinX(),t.getMinY())]),null)}},{key:\"createLineString\",value:function(){if(0===arguments.length)return this.createLineString(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return this.createLineString(null!==t?this.getCoordinateSequenceFactory().create(t):null)}if(rt(arguments[0],ht)){var e=arguments[0];return new wt(e,this)}}}},{key:\"createMultiLineString\",value:function(){if(0===arguments.length)return new se(null,this);if(1===arguments.length){var t=arguments[0];return new se(t,this)}}},{key:\"buildGeometry\",value:function(t){for(var n=null,i=!1,r=!1,s=t.iterator();s.hasNext();){var a=s.next(),o=a.getTypeCode();null===n&&(n=o),o!==n&&(i=!0),a instanceof Yt&&(r=!0)}if(null===n)return this.createGeometryCollection();if(i||r)return this.createGeometryCollection(e.toGeometryArray(t));var u=t.iterator().next();if(t.size()>1){if(u instanceof Dt)return this.createMultiPolygon(e.toPolygonArray(t));if(u instanceof wt)return this.createMultiLineString(e.toLineStringArray(t));if(u instanceof bt)return this.createMultiPoint(e.toPointArray(t));G.shouldNeverReachHere(\"Unhandled geometry type: \"+u.getGeometryType())}return u}},{key:\"createMultiPointFromCoords\",value:function(t){return this.createMultiPoint(null!==t?this.getCoordinateSequenceFactory().create(t):null)}},{key:\"createPoint\",value:function(){if(0===arguments.length)return this.createPoint(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof X){var t=arguments[0];return this.createPoint(null!==t?this.getCoordinateSequenceFactory().create([t]):null)}if(rt(arguments[0],ht)){var e=arguments[0];return new bt(e,this)}}}},{key:\"getCoordinateSequenceFactory\",value:function(){return this._coordinateSequenceFactory}},{key:\"createPolygon\",value:function(){if(0===arguments.length)return this.createPolygon(null,null);if(1===arguments.length){if(rt(arguments[0],ht)){var t=arguments[0];return this.createPolygon(this.createLinearRing(t))}if(arguments[0]instanceof Array){var e=arguments[0];return this.createPolygon(this.createLinearRing(e))}if(arguments[0]instanceof Xt){var n=arguments[0];return this.createPolygon(n,null)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return new Dt(i,r,this)}}},{key:\"getSRID\",value:function(){return this._SRID}},{key:\"createGeometryCollection\",value:function(){if(0===arguments.length)return new Yt(null,this);if(1===arguments.length){var t=arguments[0];return new Yt(t,this)}}},{key:\"getPrecisionModel\",value:function(){return this._precisionModel}},{key:\"createLinearRing\",value:function(){if(0===arguments.length)return this.createLinearRing(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return this.createLinearRing(null!==t?this.getCoordinateSequenceFactory().create(t):null)}if(rt(arguments[0],ht)){var e=arguments[0];return new Xt(e,this)}}}},{key:\"createMultiPolygon\",value:function(){if(0===arguments.length)return new te(null,this);if(1===arguments.length){var t=arguments[0];return new te(t,this)}}},{key:\"createMultiPoint\",value:function(){if(0===arguments.length)return new zt(null,this);if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return new zt(t,this)}if(rt(arguments[0],ht)){var e=arguments[0];if(null===e)return this.createMultiPoint(new Array(0).fill(null));for(var n=new Array(e.size()).fill(null),i=0;i<e.size();i++){var r=this.getCoordinateSequenceFactory().create(1,e.getDimension(),e.getMeasures());St.copy(e,i,r,0,1),n[i]=this.createPoint(r)}return this.createMultiPoint(n)}}}},{key:\"interfaces_\",get:function(){return[E]}}],[{key:\"constructor_\",value:function(){if(this._precisionModel=null,this._coordinateSequenceFactory=null,this._SRID=null,0===arguments.length)e.constructor_.call(this,new ie,0);else if(1===arguments.length){if(rt(arguments[0],It)){var t=arguments[0];e.constructor_.call(this,new ie,0,t)}else if(arguments[0]instanceof ie){var n=arguments[0];e.constructor_.call(this,n,0,e.getDefaultCoordinateSequenceFactory())}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];e.constructor_.call(this,i,r,e.getDefaultCoordinateSequenceFactory())}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];this._precisionModel=s,this._coordinateSequenceFactory=o,this._SRID=a}}},{key:\"toMultiPolygonArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toGeometryArray\",value:function(t){if(null===t)return null;var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"getDefaultCoordinateSequenceFactory\",value:function(){return $t.instance()}},{key:\"toMultiLineStringArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toLineStringArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toMultiPointArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toLinearRingArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toPointArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toPolygonArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"createPointFromInternalCoord\",value:function(t,e){return e.getPrecisionModel().makePrecise(t),e.getFactory().createPoint(t)}}]),e}(),oe=\"XY\",ue=\"XYZ\",le=\"XYM\",he=\"XYZM\",ce={POINT:\"Point\",LINE_STRING:\"LineString\",LINEAR_RING:\"LinearRing\",POLYGON:\"Polygon\",MULTI_POINT:\"MultiPoint\",MULTI_LINE_STRING:\"MultiLineString\",MULTI_POLYGON:\"MultiPolygon\",GEOMETRY_COLLECTION:\"GeometryCollection\",CIRCLE:\"Circle\"},fe=\"EMPTY\",ve=1,ge=2,ye=3,de=4,_e=5,pe=6,me={};for(var ke in ce)me[ke]=ce[ke].toUpperCase();var xe=function(){function e(n){t(this,e),this.wkt=n,this.index_=-1}return n(e,[{key:\"isAlpha_\",value:function(t){return t>=\"a\"&&t<=\"z\"||t>=\"A\"&&t<=\"Z\"}},{key:\"isNumeric_\",value:function(t,e){return t>=\"0\"&&t<=\"9\"||\".\"==t&&!(void 0!==e&&e)}},{key:\"isWhiteSpace_\",value:function(t){return\" \"==t||\"\\t\"==t||\"\\r\"==t||\"\\n\"==t}},{key:\"nextChar_\",value:function(){return this.wkt.charAt(++this.index_)}},{key:\"nextToken\",value:function(){var t,e=this.nextChar_(),n=this.index_,i=e;if(\"(\"==e)t=ge;else if(\",\"==e)t=_e;else if(\")\"==e)t=ye;else if(this.isNumeric_(e)||\"-\"==e)t=de,i=this.readNumber_();else if(this.isAlpha_(e))t=ve,i=this.readText_();else{if(this.isWhiteSpace_(e))return this.nextToken();if(\"\"!==e)throw new Error(\"Unexpected character: \"+e);t=pe}return{position:n,value:i,type:t}}},{key:\"readNumber_\",value:function(){var t,e=this.index_,n=!1,i=!1;do{\".\"==t?n=!0:\"e\"!=t&&\"E\"!=t||(i=!0),t=this.nextChar_()}while(this.isNumeric_(t,n)||!i&&(\"e\"==t||\"E\"==t)||i&&(\"-\"==t||\"+\"==t));return parseFloat(this.wkt.substring(e,this.index_--))}},{key:\"readText_\",value:function(){var t,e=this.index_;do{t=this.nextChar_()}while(this.isAlpha_(t));return this.wkt.substring(e,this.index_--).toUpperCase()}}]),e}(),Ie=function(){function e(n,i){t(this,e),this.lexer_=n,this.token_,this.layout_=oe,this.factory=i}return n(e,[{key:\"consume_\",value:function(){this.token_=this.lexer_.nextToken()}},{key:\"isTokenType\",value:function(t){return this.token_.type==t}},{key:\"match\",value:function(t){var e=this.isTokenType(t);return e&&this.consume_(),e}},{key:\"parse\",value:function(){return this.consume_(),this.parseGeometry_()}},{key:\"parseGeometryLayout_\",value:function(){var t=oe,e=this.token_;if(this.isTokenType(ve)){var n=e.value;\"Z\"===n?t=ue:\"M\"===n?t=le:\"ZM\"===n&&(t=he),t!==oe&&this.consume_()}return t}},{key:\"parseGeometryCollectionText_\",value:function(){if(this.match(ge)){var t=[];do{t.push(this.parseGeometry_())}while(this.match(_e));if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parsePointText_\",value:function(){if(this.match(ge)){var t=this.parsePoint_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return null;throw new Error(this.formatErrorMessage_())}},{key:\"parseLineStringText_\",value:function(){if(this.match(ge)){var t=this.parsePointList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parsePolygonText_\",value:function(){if(this.match(ge)){var t=this.parseLineStringTextList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parseMultiPointText_\",value:function(){var t;if(this.match(ge)){if(t=this.token_.type==ge?this.parsePointTextList_():this.parsePointList_(),this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parseMultiLineStringText_\",value:function(){if(this.match(ge)){var t=this.parseLineStringTextList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parseMultiPolygonText_\",value:function(){if(this.match(ge)){var t=this.parsePolygonTextList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parsePoint_\",value:function(){for(var t=[],e=this.layout_.length,n=0;n<e;++n){var i=this.token_;if(!this.match(de))break;t.push(i.value)}if(t.length==e)return t;throw new Error(this.formatErrorMessage_())}},{key:\"parsePointList_\",value:function(){for(var t=[this.parsePoint_()];this.match(_e);)t.push(this.parsePoint_());return t}},{key:\"parsePointTextList_\",value:function(){for(var t=[this.parsePointText_()];this.match(_e);)t.push(this.parsePointText_());return t}},{key:\"parseLineStringTextList_\",value:function(){for(var t=[this.parseLineStringText_()];this.match(_e);)t.push(this.parseLineStringText_());return t}},{key:\"parsePolygonTextList_\",value:function(){for(var t=[this.parsePolygonText_()];this.match(_e);)t.push(this.parsePolygonText_());return t}},{key:\"isEmptyGeometry_\",value:function(){var t=this.isTokenType(ve)&&this.token_.value==fe;return t&&this.consume_(),t}},{key:\"formatErrorMessage_\",value:function(){return\"Unexpected `\"+this.token_.value+\"` at position \"+this.token_.position+\" in `\"+this.lexer_.wkt+\"`\"}},{key:\"parseGeometry_\",value:function(){var t=this.factory,e=function(t){return o(X,v(t))},n=function(n){var i=n.map((function(n){return t.createLinearRing(n.map(e))}));return i.length>1?t.createPolygon(i[0],i.slice(1)):t.createPolygon(i[0])},i=this.token_;if(this.match(ve)){var r=i.value;if(this.layout_=this.parseGeometryLayout_(),\"GEOMETRYCOLLECTION\"==r){var s=this.parseGeometryCollectionText_();return t.createGeometryCollection(s)}switch(r){case\"POINT\":var a=this.parsePointText_();return a?t.createPoint(o(X,v(a))):t.createPoint();case\"LINESTRING\":var u=this.parseLineStringText_().map(e);return t.createLineString(u);case\"LINEARRING\":var l=this.parseLineStringText_().map(e);return t.createLinearRing(l);case\"POLYGON\":var h=this.parsePolygonText_();return h&&0!==h.length?n(h):t.createPolygon();case\"MULTIPOINT\":var c=this.parseMultiPointText_();if(!c||0===c.length)return t.createMultiPoint();var f=c.map(e).map((function(e){return t.createPoint(e)}));return t.createMultiPoint(f);case\"MULTILINESTRING\":var g=this.parseMultiLineStringText_().map((function(n){return t.createLineString(n.map(e))}));return t.createMultiLineString(g);case\"MULTIPOLYGON\":var y=this.parseMultiPolygonText_();if(!y||0===y.length)return t.createMultiPolygon();var d=y.map(n);return t.createMultiPolygon(d);default:throw new Error(\"Invalid geometry type: \"+r)}}throw new Error(this.formatErrorMessage_())}}]),e}();function Ee(t){if(t.isEmpty())return\"\";var e=t.getCoordinate(),n=[e.x,e.y];return void 0===e.z||Number.isNaN(e.z)||n.push(e.z),void 0===e.m||Number.isNaN(e.m)||n.push(e.m),n.join(\" \")}function Ne(t){for(var e=t.getCoordinates().map((function(t){var e=[t.x,t.y];return void 0===t.z||Number.isNaN(t.z)||e.push(t.z),void 0===t.m||Number.isNaN(t.m)||e.push(t.m),e})),n=[],i=0,r=e.length;i<r;++i)n.push(e[i].join(\" \"));return n.join(\", \")}function Te(t){var e=[];e.push(\"(\"+Ne(t.getExteriorRing())+\")\");for(var n=0,i=t.getNumInteriorRing();n<i;++n)e.push(\"(\"+Ne(t.getInteriorRingN(n))+\")\");return e.join(\", \")}var Se={Point:Ee,LineString:Ne,LinearRing:Ne,Polygon:Te,MultiPoint:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(\"(\"+Ee(t.getGeometryN(n))+\")\");return e.join(\", \")},MultiLineString:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(\"(\"+Ne(t.getGeometryN(n))+\")\");return e.join(\", \")},MultiPolygon:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(\"(\"+Te(t.getGeometryN(n))+\")\");return e.join(\", \")},GeometryCollection:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(Le(t.getGeometryN(n)));return e.join(\", \")}};function Le(t){var e=t.getGeometryType(),n=Se[e];e=e.toUpperCase();var i=function(t){var e=\"\";if(t.isEmpty())return e;var n=t.getCoordinate();return void 0===n.z||Number.isNaN(n.z)||(e+=\"Z\"),void 0===n.m||Number.isNaN(n.m)||(e+=\"M\"),e}(t);return i.length>0&&(e+=\" \"+i),t.isEmpty()?e+\" \"+fe:e+\" (\"+n(t)+\")\"}var Ce=function(){function e(n){t(this,e),this.geometryFactory=n||new ae,this.precisionModel=this.geometryFactory.getPrecisionModel()}return n(e,[{key:\"read\",value:function(t){var e=new xe(t);return new Ie(e,this.geometryFactory).parse()}},{key:\"write\",value:function(t){return Le(t)}}]),e}(),Re=function(){function e(n){t(this,e),this.parser=new Ce(n)}return n(e,[{key:\"write\",value:function(t){return this.parser.write(t)}}],[{key:\"toLineString\",value:function(t,e){if(2!==arguments.length)throw new Error(\"Not implemented\");return\"LINESTRING ( \"+t.x+\" \"+t.y+\", \"+e.x+\" \"+e.y+\" )\"}}]),e}(),we=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getIndexAlongSegment\",value:function(t,e){return this.computeIntLineIndex(),this._intLineIndex[t][e]}},{key:\"getTopologySummary\",value:function(){var t=new Jt;return this.isEndPoint()&&t.append(\" endpoint\"),this._isProper&&t.append(\" proper\"),this.isCollinear()&&t.append(\" collinear\"),t.toString()}},{key:\"computeIntersection\",value:function(t,e,n,i){this._inputLines[0][0]=t,this._inputLines[0][1]=e,this._inputLines[1][0]=n,this._inputLines[1][1]=i,this._result=this.computeIntersect(t,e,n,i)}},{key:\"getIntersectionNum\",value:function(){return this._result}},{key:\"computeIntLineIndex\",value:function(){if(0===arguments.length)null===this._intLineIndex&&(this._intLineIndex=Array(2).fill().map((function(){return Array(2)})),this.computeIntLineIndex(0),this.computeIntLineIndex(1));else if(1===arguments.length){var t=arguments[0],e=this.getEdgeDistance(t,0),n=this.getEdgeDistance(t,1);e>n?(this._intLineIndex[t][0]=0,this._intLineIndex[t][1]=1):(this._intLineIndex[t][0]=1,this._intLineIndex[t][1]=0)}}},{key:\"isProper\",value:function(){return this.hasIntersection()&&this._isProper}},{key:\"setPrecisionModel\",value:function(t){this._precisionModel=t}},{key:\"isInteriorIntersection\",value:function(){if(0===arguments.length)return!!this.isInteriorIntersection(0)||!!this.isInteriorIntersection(1);if(1===arguments.length){for(var t=arguments[0],e=0;e<this._result;e++)if(!this._intPt[e].equals2D(this._inputLines[t][0])&&!this._intPt[e].equals2D(this._inputLines[t][1]))return!0;return!1}}},{key:\"getIntersection\",value:function(t){return this._intPt[t]}},{key:\"isEndPoint\",value:function(){return this.hasIntersection()&&!this._isProper}},{key:\"hasIntersection\",value:function(){return this._result!==e.NO_INTERSECTION}},{key:\"getEdgeDistance\",value:function(t,n){return e.computeEdgeDistance(this._intPt[n],this._inputLines[t][0],this._inputLines[t][1])}},{key:\"isCollinear\",value:function(){return this._result===e.COLLINEAR_INTERSECTION}},{key:\"toString\",value:function(){return Re.toLineString(this._inputLines[0][0],this._inputLines[0][1])+\" - \"+Re.toLineString(this._inputLines[1][0],this._inputLines[1][1])+this.getTopologySummary()}},{key:\"getEndpoint\",value:function(t,e){return this._inputLines[t][e]}},{key:\"isIntersection\",value:function(t){for(var e=0;e<this._result;e++)if(this._intPt[e].equals2D(t))return!0;return!1}},{key:\"getIntersectionAlongSegment\",value:function(t,e){return this.computeIntLineIndex(),this._intPt[this._intLineIndex[t][e]]}}],[{key:\"constructor_\",value:function(){this._result=null,this._inputLines=Array(2).fill().map((function(){return Array(2)})),this._intPt=new Array(2).fill(null),this._intLineIndex=null,this._isProper=null,this._pa=null,this._pb=null,this._precisionModel=null,this._intPt[0]=new X,this._intPt[1]=new X,this._pa=this._intPt[0],this._pb=this._intPt[1],this._result=0}},{key:\"computeEdgeDistance\",value:function(t,e,n){var i=Math.abs(n.x-e.x),r=Math.abs(n.y-e.y),s=-1;if(t.equals(e))s=0;else if(t.equals(n))s=i>r?i:r;else{var a=Math.abs(t.x-e.x),o=Math.abs(t.y-e.y);0!==(s=i>r?a:o)||t.equals(e)||(s=Math.max(a,o))}return G.isTrue(!(0===s&&!t.equals(e)),\"Bad distance calculation\"),s}},{key:\"nonRobustComputeEdgeDistance\",value:function(t,e,n){var i=t.x-e.x,r=t.y-e.y,s=Math.sqrt(i*i+r*r);return G.isTrue(!(0===s&&!t.equals(e)),\"Invalid distance calculation\"),s}}]),e}();we.DONT_INTERSECT=0,we.DO_INTERSECT=1,we.COLLINEAR=2,we.NO_INTERSECTION=0,we.POINT_INTERSECTION=1,we.COLLINEAR_INTERSECTION=2;var Oe=function(e){i(a,e);var s=c(a);function a(){return t(this,a),s.call(this)}return n(a,[{key:\"isInSegmentEnvelopes\",value:function(t){var e=new U(this._inputLines[0][0],this._inputLines[0][1]),n=new U(this._inputLines[1][0],this._inputLines[1][1]);return e.contains(t)&&n.contains(t)}},{key:\"computeIntersection\",value:function(){if(3!==arguments.length)return f(r(a.prototype),\"computeIntersection\",this).apply(this,arguments);var t=arguments[0],e=arguments[1],n=arguments[2];if(this._isProper=!1,U.intersects(e,n,t)&&0===ct.index(e,n,t)&&0===ct.index(n,e,t))return this._isProper=!0,(t.equals(e)||t.equals(n))&&(this._isProper=!1),this._result=we.POINT_INTERSECTION,null;this._result=we.NO_INTERSECTION}},{key:\"intersection\",value:function(t,e,n,i){var r=this.intersectionSafe(t,e,n,i);return this.isInSegmentEnvelopes(r)||(r=new X(a.nearestEndpoint(t,e,n,i))),null!==this._precisionModel&&this._precisionModel.makePrecise(r),r}},{key:\"checkDD\",value:function(t,e,n,i,r){var s=lt.intersection(t,e,n,i),a=this.isInSegmentEnvelopes(s);mt.out.println(\"DD in env = \"+a+\" --------------------- \"+s),r.distance(s)>1e-4&&mt.out.println(\"Distance = \"+r.distance(s))}},{key:\"intersectionSafe\",value:function(t,e,n,i){var r=pt.intersection(t,e,n,i);return null===r&&(r=a.nearestEndpoint(t,e,n,i)),r}},{key:\"computeCollinearIntersection\",value:function(t,e,n,i){var r=U.intersects(t,e,n),s=U.intersects(t,e,i),a=U.intersects(n,i,t),o=U.intersects(n,i,e);return r&&s?(this._intPt[0]=n,this._intPt[1]=i,we.COLLINEAR_INTERSECTION):a&&o?(this._intPt[0]=t,this._intPt[1]=e,we.COLLINEAR_INTERSECTION):r&&a?(this._intPt[0]=n,this._intPt[1]=t,!n.equals(t)||s||o?we.COLLINEAR_INTERSECTION:we.POINT_INTERSECTION):r&&o?(this._intPt[0]=n,this._intPt[1]=e,!n.equals(e)||s||a?we.COLLINEAR_INTERSECTION:we.POINT_INTERSECTION):s&&a?(this._intPt[0]=i,this._intPt[1]=t,!i.equals(t)||r||o?we.COLLINEAR_INTERSECTION:we.POINT_INTERSECTION):s&&o?(this._intPt[0]=i,this._intPt[1]=e,!i.equals(e)||r||a?we.COLLINEAR_INTERSECTION:we.POINT_INTERSECTION):we.NO_INTERSECTION}},{key:\"computeIntersect\",value:function(t,e,n,i){if(this._isProper=!1,!U.intersects(t,e,n,i))return we.NO_INTERSECTION;var r=ct.index(t,e,n),s=ct.index(t,e,i);if(r>0&&s>0||r<0&&s<0)return we.NO_INTERSECTION;var a=ct.index(n,i,t),o=ct.index(n,i,e);return a>0&&o>0||a<0&&o<0?we.NO_INTERSECTION:0===r&&0===s&&0===a&&0===o?this.computeCollinearIntersection(t,e,n,i):(0===r||0===s||0===a||0===o?(this._isProper=!1,t.equals2D(n)||t.equals2D(i)?this._intPt[0]=t:e.equals2D(n)||e.equals2D(i)?this._intPt[0]=e:0===r?this._intPt[0]=new X(n):0===s?this._intPt[0]=new X(i):0===a?this._intPt[0]=new X(t):0===o&&(this._intPt[0]=new X(e))):(this._isProper=!0,this._intPt[0]=this.intersection(t,e,n,i)),we.POINT_INTERSECTION)}}],[{key:\"nearestEndpoint\",value:function(t,e,n,i){var r=t,s=xt.pointToSegment(t,n,i),a=xt.pointToSegment(e,n,i);return a<s&&(s=a,r=e),(a=xt.pointToSegment(n,t,e))<s&&(s=a,r=n),(a=xt.pointToSegment(i,t,e))<s&&(s=a,r=i),r}}]),a}(we),be=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"countSegment\",value:function(t,e){if(t.x<this._p.x&&e.x<this._p.x)return null;if(this._p.x===e.x&&this._p.y===e.y)return this._isPointOnSegment=!0,null;if(t.y===this._p.y&&e.y===this._p.y){var n=t.x,i=e.x;return n>i&&(n=e.x,i=t.x),this._p.x>=n&&this._p.x<=i&&(this._isPointOnSegment=!0),null}if(t.y>this._p.y&&e.y<=this._p.y||e.y>this._p.y&&t.y<=this._p.y){var r=ct.index(t,e,this._p);if(r===ct.COLLINEAR)return this._isPointOnSegment=!0,null;e.y<t.y&&(r=-r),r===ct.LEFT&&this._crossingCount++}}},{key:\"isPointInPolygon\",value:function(){return this.getLocation()!==H.EXTERIOR}},{key:\"getLocation\",value:function(){return this._isPointOnSegment?H.BOUNDARY:this._crossingCount%2==1?H.INTERIOR:H.EXTERIOR}},{key:\"isOnSegment\",value:function(){return this._isPointOnSegment}}],[{key:\"constructor_\",value:function(){this._p=null,this._crossingCount=0,this._isPointOnSegment=!1;var t=arguments[0];this._p=t}},{key:\"locatePointInRing\",value:function(){if(arguments[0]instanceof X&&rt(arguments[1],ht)){for(var t=arguments[0],n=arguments[1],i=new e(t),r=new X,s=new X,a=1;a<n.size();a++)if(n.getCoordinate(a,r),n.getCoordinate(a-1,s),i.countSegment(r,s),i.isOnSegment())return i.getLocation();return i.getLocation()}if(arguments[0]instanceof X&&arguments[1]instanceof Array){for(var o=arguments[0],u=arguments[1],l=new e(o),h=1;h<u.length;h++){var c=u[h],f=u[h-1];if(l.countSegment(c,f),l.isOnSegment())return l.getLocation()}return l.getLocation()}}}]),e}(),Me=function(){function e(){t(this,e)}return n(e,null,[{key:\"isOnLine\",value:function(){if(arguments[0]instanceof X&&rt(arguments[1],ht)){for(var t=arguments[0],e=arguments[1],n=new Oe,i=new X,r=new X,s=e.size(),a=1;a<s;a++)if(e.getCoordinate(a-1,i),e.getCoordinate(a,r),n.computeIntersection(t,i,r),n.hasIntersection())return!0;return!1}if(arguments[0]instanceof X&&arguments[1]instanceof Array){for(var o=arguments[0],u=arguments[1],l=new Oe,h=1;h<u.length;h++){var c=u[h-1],f=u[h];if(l.computeIntersection(o,c,f),l.hasIntersection())return!0}return!1}}},{key:\"locateInRing\",value:function(t,e){return be.locatePointInRing(t,e)}},{key:\"isInRing\",value:function(t,n){return e.locateInRing(t,n)!==H.EXTERIOR}}]),e}(),Ae=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"setAllLocations\",value:function(t){for(var e=0;e<this.location.length;e++)this.location[e]=t}},{key:\"isNull\",value:function(){for(var t=0;t<this.location.length;t++)if(this.location[t]!==H.NONE)return!1;return!0}},{key:\"setAllLocationsIfNull\",value:function(t){for(var e=0;e<this.location.length;e++)this.location[e]===H.NONE&&(this.location[e]=t)}},{key:\"isLine\",value:function(){return 1===this.location.length}},{key:\"merge\",value:function(t){if(t.location.length>this.location.length){var e=new Array(3).fill(null);e[$.ON]=this.location[$.ON],e[$.LEFT]=H.NONE,e[$.RIGHT]=H.NONE,this.location=e}for(var n=0;n<this.location.length;n++)this.location[n]===H.NONE&&n<t.location.length&&(this.location[n]=t.location[n])}},{key:\"getLocations\",value:function(){return this.location}},{key:\"flip\",value:function(){if(this.location.length<=1)return null;var t=this.location[$.LEFT];this.location[$.LEFT]=this.location[$.RIGHT],this.location[$.RIGHT]=t}},{key:\"toString\",value:function(){var t=new st;return this.location.length>1&&t.append(H.toLocationSymbol(this.location[$.LEFT])),t.append(H.toLocationSymbol(this.location[$.ON])),this.location.length>1&&t.append(H.toLocationSymbol(this.location[$.RIGHT])),t.toString()}},{key:\"setLocations\",value:function(t,e,n){this.location[$.ON]=t,this.location[$.LEFT]=e,this.location[$.RIGHT]=n}},{key:\"get\",value:function(t){return t<this.location.length?this.location[t]:H.NONE}},{key:\"isArea\",value:function(){return this.location.length>1}},{key:\"isAnyNull\",value:function(){for(var t=0;t<this.location.length;t++)if(this.location[t]===H.NONE)return!0;return!1}},{key:\"setLocation\",value:function(){if(1===arguments.length){var t=arguments[0];this.setLocation($.ON,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.location[e]=n}}},{key:\"init\",value:function(t){this.location=new Array(t).fill(null),this.setAllLocations(H.NONE)}},{key:\"isEqualOnSide\",value:function(t,e){return this.location[e]===t.location[e]}},{key:\"allPositionsEqual\",value:function(t){for(var e=0;e<this.location.length;e++)if(this.location[e]!==t)return!1;return!0}}],[{key:\"constructor_\",value:function(){if(this.location=null,1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];this.init(t.length)}else if(Number.isInteger(arguments[0])){var n=arguments[0];this.init(1),this.location[$.ON]=n}else if(arguments[0]instanceof e){var i=arguments[0];if(this.init(i.location.length),null!==i)for(var r=0;r<this.location.length;r++)this.location[r]=i.location[r]}}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];this.init(3),this.location[$.ON]=s,this.location[$.LEFT]=a,this.location[$.RIGHT]=o}}}]),e}(),Pe=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getGeometryCount\",value:function(){var t=0;return this.elt[0].isNull()||t++,this.elt[1].isNull()||t++,t}},{key:\"setAllLocations\",value:function(t,e){this.elt[t].setAllLocations(e)}},{key:\"isNull\",value:function(t){return this.elt[t].isNull()}},{key:\"setAllLocationsIfNull\",value:function(){if(1===arguments.length){var t=arguments[0];this.setAllLocationsIfNull(0,t),this.setAllLocationsIfNull(1,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.elt[e].setAllLocationsIfNull(n)}}},{key:\"isLine\",value:function(t){return this.elt[t].isLine()}},{key:\"merge\",value:function(t){for(var e=0;e<2;e++)null===this.elt[e]&&null!==t.elt[e]?this.elt[e]=new Ae(t.elt[e]):this.elt[e].merge(t.elt[e])}},{key:\"flip\",value:function(){this.elt[0].flip(),this.elt[1].flip()}},{key:\"getLocation\",value:function(){if(1===arguments.length){var t=arguments[0];return this.elt[t].get($.ON)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return this.elt[e].get(n)}}},{key:\"toString\",value:function(){var t=new st;return null!==this.elt[0]&&(t.append(\"A:\"),t.append(this.elt[0].toString())),null!==this.elt[1]&&(t.append(\" B:\"),t.append(this.elt[1].toString())),t.toString()}},{key:\"isArea\",value:function(){if(0===arguments.length)return this.elt[0].isArea()||this.elt[1].isArea();if(1===arguments.length){var t=arguments[0];return this.elt[t].isArea()}}},{key:\"isAnyNull\",value:function(t){return this.elt[t].isAnyNull()}},{key:\"setLocation\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.elt[t].setLocation($.ON,e)}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this.elt[n].setLocation(i,r)}}},{key:\"isEqualOnSide\",value:function(t,e){return this.elt[0].isEqualOnSide(t.elt[0],e)&&this.elt[1].isEqualOnSide(t.elt[1],e)}},{key:\"allPositionsEqual\",value:function(t,e){return this.elt[t].allPositionsEqual(e)}},{key:\"toLine\",value:function(t){this.elt[t].isArea()&&(this.elt[t]=new Ae(this.elt[t].location[0]))}}],[{key:\"constructor_\",value:function(){if(this.elt=new Array(2).fill(null),1===arguments.length){if(Number.isInteger(arguments[0])){var t=arguments[0];this.elt[0]=new Ae(t),this.elt[1]=new Ae(t)}else if(arguments[0]instanceof e){var n=arguments[0];this.elt[0]=new Ae(n.elt[0]),this.elt[1]=new Ae(n.elt[1])}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.elt[0]=new Ae(H.NONE),this.elt[1]=new Ae(H.NONE),this.elt[i].setLocation(r)}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];this.elt[0]=new Ae(s,a,o),this.elt[1]=new Ae(s,a,o)}else if(4===arguments.length){var u=arguments[0],l=arguments[1],h=arguments[2],c=arguments[3];this.elt[0]=new Ae(H.NONE,H.NONE,H.NONE),this.elt[1]=new Ae(H.NONE,H.NONE,H.NONE),this.elt[u].setLocations(l,h,c)}}},{key:\"toLineLabel\",value:function(t){for(var n=new e(H.NONE),i=0;i<2;i++)n.setLocation(i,t.getLocation(i));return n}}]),e}(),De=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"computeRing\",value:function(){if(null!==this._ring)return null;for(var t=new Array(this._pts.size()).fill(null),e=0;e<this._pts.size();e++)t[e]=this._pts.get(e);this._ring=this._geometryFactory.createLinearRing(t),this._isHole=ct.isCCW(this._ring.getCoordinates())}},{key:\"isIsolated\",value:function(){return 1===this._label.getGeometryCount()}},{key:\"computePoints\",value:function(t){this._startDe=t;var e=t,n=!0;do{if(null===e)throw new vt(\"Found null DirectedEdge\");if(e.getEdgeRing()===this)throw new vt(\"Directed Edge visited twice during ring-building at \"+e.getCoordinate());this._edges.add(e);var i=e.getLabel();G.isTrue(i.isArea()),this.mergeLabel(i),this.addPoints(e.getEdge(),e.isForward(),n),n=!1,this.setEdgeRing(e,this),e=this.getNext(e)}while(e!==this._startDe)}},{key:\"getLinearRing\",value:function(){return this._ring}},{key:\"getCoordinate\",value:function(t){return this._pts.get(t)}},{key:\"computeMaxNodeDegree\",value:function(){this._maxNodeDegree=0;var t=this._startDe;do{var e=t.getNode().getEdges().getOutgoingDegree(this);e>this._maxNodeDegree&&(this._maxNodeDegree=e),t=this.getNext(t)}while(t!==this._startDe);this._maxNodeDegree*=2}},{key:\"addPoints\",value:function(t,e,n){var i=t.getCoordinates();if(e){var r=1;n&&(r=0);for(var s=r;s<i.length;s++)this._pts.add(i[s])}else{var a=i.length-2;n&&(a=i.length-1);for(var o=a;o>=0;o--)this._pts.add(i[o])}}},{key:\"isHole\",value:function(){return this._isHole}},{key:\"setInResult\",value:function(){var t=this._startDe;do{t.getEdge().setInResult(!0),t=t.getNext()}while(t!==this._startDe)}},{key:\"containsPoint\",value:function(t){var e=this.getLinearRing();if(!e.getEnvelopeInternal().contains(t))return!1;if(!Me.isInRing(t,e.getCoordinates()))return!1;for(var n=this._holes.iterator();n.hasNext();){if(n.next().containsPoint(t))return!1}return!0}},{key:\"addHole\",value:function(t){this._holes.add(t)}},{key:\"isShell\",value:function(){return null===this._shell}},{key:\"getLabel\",value:function(){return this._label}},{key:\"getEdges\",value:function(){return this._edges}},{key:\"getMaxNodeDegree\",value:function(){return this._maxNodeDegree<0&&this.computeMaxNodeDegree(),this._maxNodeDegree}},{key:\"getShell\",value:function(){return this._shell}},{key:\"mergeLabel\",value:function(){if(1===arguments.length){var t=arguments[0];this.mergeLabel(t,0),this.mergeLabel(t,1)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=e.getLocation(n,$.RIGHT);if(i===H.NONE)return null;if(this._label.getLocation(n)===H.NONE)return this._label.setLocation(n,i),null}}},{key:\"setShell\",value:function(t){this._shell=t,null!==t&&t.addHole(this)}},{key:\"toPolygon\",value:function(t){for(var e=new Array(this._holes.size()).fill(null),n=0;n<this._holes.size();n++)e[n]=this._holes.get(n).getLinearRing();return t.createPolygon(this.getLinearRing(),e)}}],[{key:\"constructor_\",value:function(){if(this._startDe=null,this._maxNodeDegree=-1,this._edges=new yt,this._pts=new yt,this._label=new Pe(H.NONE),this._ring=null,this._isHole=null,this._shell=null,this._holes=new yt,this._geometryFactory=null,0===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];this._geometryFactory=e,this.computePoints(t),this.computeRing()}}}]),e}(),Fe=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"setEdgeRing\",value:function(t,e){t.setMinEdgeRing(e)}},{key:\"getNext\",value:function(t){return t.getNextMin()}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];De.constructor_.call(this,t,e)}}]),s}(De),Ge=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"buildMinimalRings\",value:function(){var t=new yt,e=this._startDe;do{if(null===e.getMinEdgeRing()){var n=new Fe(e,this._geometryFactory);t.add(n)}e=e.getNext()}while(e!==this._startDe);return t}},{key:\"setEdgeRing\",value:function(t,e){t.setEdgeRing(e)}},{key:\"linkDirectedEdgesForMinimalEdgeRings\",value:function(){var t=this._startDe;do{t.getNode().getEdges().linkMinimalDirectedEdges(this),t=t.getNext()}while(t!==this._startDe)}},{key:\"getNext\",value:function(t){return t.getNext()}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];De.constructor_.call(this,t,e)}}]),s}(De),qe=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"setVisited\",value:function(t){this._isVisited=t}},{key:\"setInResult\",value:function(t){this._isInResult=t}},{key:\"isCovered\",value:function(){return this._isCovered}},{key:\"isCoveredSet\",value:function(){return this._isCoveredSet}},{key:\"setLabel\",value:function(t){this._label=t}},{key:\"getLabel\",value:function(){return this._label}},{key:\"setCovered\",value:function(t){this._isCovered=t,this._isCoveredSet=!0}},{key:\"updateIM\",value:function(t){G.isTrue(this._label.getGeometryCount()>=2,\"found partial label\"),this.computeIM(t)}},{key:\"isInResult\",value:function(){return this._isInResult}},{key:\"isVisited\",value:function(){return this._isVisited}}],[{key:\"constructor_\",value:function(){if(this._label=null,this._isInResult=!1,this._isCovered=!1,this._isCoveredSet=!1,this._isVisited=!1,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._label=t}}}]),e}(),Ye=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"isIncidentEdgeInResult\",value:function(){for(var t=this.getEdges().getEdges().iterator();t.hasNext();){if(t.next().getEdge().isInResult())return!0}return!1}},{key:\"isIsolated\",value:function(){return 1===this._label.getGeometryCount()}},{key:\"getCoordinate\",value:function(){return this._coord}},{key:\"print\",value:function(t){t.println(\"node \"+this._coord+\" lbl: \"+this._label)}},{key:\"computeIM\",value:function(t){}},{key:\"computeMergedLocation\",value:function(t,e){var n=H.NONE;if(n=this._label.getLocation(e),!t.isNull(e)){var i=t.getLocation(e);n!==H.BOUNDARY&&(n=i)}return n}},{key:\"setLabel\",value:function(){if(2!==arguments.length||!Number.isInteger(arguments[1])||!Number.isInteger(arguments[0]))return f(r(a.prototype),\"setLabel\",this).apply(this,arguments);var t=arguments[0],e=arguments[1];null===this._label?this._label=new Pe(t,e):this._label.setLocation(t,e)}},{key:\"getEdges\",value:function(){return this._edges}},{key:\"mergeLabel\",value:function(){if(arguments[0]instanceof a){var t=arguments[0];this.mergeLabel(t._label)}else if(arguments[0]instanceof Pe)for(var e=arguments[0],n=0;n<2;n++){var i=this.computeMergedLocation(e,n),r=this._label.getLocation(n);r===H.NONE&&this._label.setLocation(n,i)}}},{key:\"add\",value:function(t){this._edges.insert(t),t.setNode(this)}},{key:\"setLabelBoundary\",value:function(t){if(null===this._label)return null;var e=H.NONE;null!==this._label&&(e=this._label.getLocation(t));var n=null;switch(e){case H.BOUNDARY:n=H.INTERIOR;break;case H.INTERIOR:default:n=H.BOUNDARY}this._label.setLocation(t,n)}}],[{key:\"constructor_\",value:function(){this._coord=null,this._edges=null;var t=arguments[0],e=arguments[1];this._coord=t,this._edges=e,this._label=new Pe(0,H.NONE)}}]),a}(qe),ze=function(e){i(r,e);var n=c(r);function r(){return t(this,r),n.apply(this,arguments)}return r}(ee);function Xe(t){return null==t?0:t.color}function Be(t){return null==t?null:t.parent}function Ue(t,e){null!==t&&(t.color=e)}function Ve(t){return null==t?null:t.left}function He(t){return null==t?null:t.right}var Ze=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),(e=r.call(this)).root_=null,e.size_=0,e}return n(s,[{key:\"get\",value:function(t){for(var e=this.root_;null!==e;){var n=t.compareTo(e.key);if(n<0)e=e.left;else{if(!(n>0))return e.value;e=e.right}}return null}},{key:\"put\",value:function(t,e){if(null===this.root_)return this.root_={key:t,value:e,left:null,right:null,parent:null,color:0,getValue:function(){return this.value},getKey:function(){return this.key}},this.size_=1,null;var n,i,r=this.root_;do{if(n=r,(i=t.compareTo(r.key))<0)r=r.left;else{if(!(i>0)){var s=r.value;return r.value=e,s}r=r.right}}while(null!==r);var a={key:t,left:null,right:null,value:e,parent:n,color:0,getValue:function(){return this.value},getKey:function(){return this.key}};return i<0?n.left=a:n.right=a,this.fixAfterInsertion(a),this.size_++,null}},{key:\"fixAfterInsertion\",value:function(t){var e;for(t.color=1;null!=t&&t!==this.root_&&1===t.parent.color;)Be(t)===Ve(Be(Be(t)))?1===Xe(e=He(Be(Be(t))))?(Ue(Be(t),0),Ue(e,0),Ue(Be(Be(t)),1),t=Be(Be(t))):(t===He(Be(t))&&(t=Be(t),this.rotateLeft(t)),Ue(Be(t),0),Ue(Be(Be(t)),1),this.rotateRight(Be(Be(t)))):1===Xe(e=Ve(Be(Be(t))))?(Ue(Be(t),0),Ue(e,0),Ue(Be(Be(t)),1),t=Be(Be(t))):(t===Ve(Be(t))&&(t=Be(t),this.rotateRight(t)),Ue(Be(t),0),Ue(Be(Be(t)),1),this.rotateLeft(Be(Be(t))));this.root_.color=0}},{key:\"values\",value:function(){var t=new yt,e=this.getFirstEntry();if(null!==e)for(t.add(e.value);null!==(e=s.successor(e));)t.add(e.value);return t}},{key:\"entrySet\",value:function(){var t=new J,e=this.getFirstEntry();if(null!==e)for(t.add(e);null!==(e=s.successor(e));)t.add(e);return t}},{key:\"rotateLeft\",value:function(t){if(null!=t){var e=t.right;t.right=e.left,null!=e.left&&(e.left.parent=t),e.parent=t.parent,null==t.parent?this.root_=e:t.parent.left===t?t.parent.left=e:t.parent.right=e,e.left=t,t.parent=e}}},{key:\"rotateRight\",value:function(t){if(null!=t){var e=t.left;t.left=e.right,null!=e.right&&(e.right.parent=t),e.parent=t.parent,null==t.parent?this.root_=e:t.parent.right===t?t.parent.right=e:t.parent.left=e,e.right=t,t.parent=e}}},{key:\"getFirstEntry\",value:function(){var t=this.root_;if(null!=t)for(;null!=t.left;)t=t.left;return t}},{key:\"size\",value:function(){return this.size_}},{key:\"containsKey\",value:function(t){for(var e=this.root_;null!==e;){var n=t.compareTo(e.key);if(n<0)e=e.left;else{if(!(n>0))return!0;e=e.right}}return!1}}],[{key:\"successor\",value:function(t){var e;if(null===t)return null;if(null!==t.right){for(e=t.right;null!==e.left;)e=e.left;return e}e=t.parent;for(var n=t;null!==e&&n===e.right;)n=e,e=e.parent;return e}}]),s}(ze),je=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"find\",value:function(t){return this.nodeMap.get(t)}},{key:\"addNode\",value:function(){if(arguments[0]instanceof X){var t=arguments[0],e=this.nodeMap.get(t);return null===e&&(e=this.nodeFact.createNode(t),this.nodeMap.put(t,e)),e}if(arguments[0]instanceof Ye){var n=arguments[0],i=this.nodeMap.get(n.getCoordinate());return null===i?(this.nodeMap.put(n.getCoordinate(),n),n):(i.mergeLabel(n),i)}}},{key:\"print\",value:function(t){for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"iterator\",value:function(){return this.nodeMap.values().iterator()}},{key:\"values\",value:function(){return this.nodeMap.values()}},{key:\"getBoundaryNodes\",value:function(t){for(var e=new yt,n=this.iterator();n.hasNext();){var i=n.next();i.getLabel().getLocation(t)===H.BOUNDARY&&e.add(i)}return e}},{key:\"add\",value:function(t){var e=t.getCoordinate();this.addNode(e).add(t)}}],[{key:\"constructor_\",value:function(){this.nodeMap=new Ze,this.nodeFact=null;var t=arguments[0];this.nodeFact=t}}]),e}(),We=function(){function e(){t(this,e)}return n(e,null,[{key:\"isNorthern\",value:function(t){return t===e.NE||t===e.NW}},{key:\"isOpposite\",value:function(t,e){return t!==e&&2===(t-e+4)%4}},{key:\"commonHalfPlane\",value:function(t,e){if(t===e)return t;if(2===(t-e+4)%4)return-1;var n=t<e?t:e;return 0===n&&3===(t>e?t:e)?3:n}},{key:\"isInHalfPlane\",value:function(t,n){return n===e.SE?t===e.SE||t===e.SW:t===n||t===n+1}},{key:\"quadrant\",value:function(){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var t=arguments[0],n=arguments[1];if(0===t&&0===n)throw new m(\"Cannot compute the quadrant for point ( \"+t+\", \"+n+\" )\");return t>=0?n>=0?e.NE:e.SE:n>=0?e.NW:e.SW}if(arguments[0]instanceof X&&arguments[1]instanceof X){var i=arguments[0],r=arguments[1];if(r.x===i.x&&r.y===i.y)throw new m(\"Cannot compute the quadrant for two identical points \"+i);return r.x>=i.x?r.y>=i.y?e.NE:e.SE:r.y>=i.y?e.NW:e.SW}}}]),e}();We.NE=0,We.NW=1,We.SW=2,We.SE=3;var Ke=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"compareDirection\",value:function(t){return this._dx===t._dx&&this._dy===t._dy?0:this._quadrant>t._quadrant?1:this._quadrant<t._quadrant?-1:ct.index(t._p0,t._p1,this._p1)}},{key:\"getDy\",value:function(){return this._dy}},{key:\"getCoordinate\",value:function(){return this._p0}},{key:\"setNode\",value:function(t){this._node=t}},{key:\"print\",value:function(t){var e=Math.atan2(this._dy,this._dx),n=this.getClass().getName(),i=n.lastIndexOf(\".\"),r=n.substring(i+1);t.print(\" \"+r+\": \"+this._p0+\" - \"+this._p1+\" \"+this._quadrant+\":\"+e+\" \"+this._label)}},{key:\"compareTo\",value:function(t){var e=t;return this.compareDirection(e)}},{key:\"getDirectedCoordinate\",value:function(){return this._p1}},{key:\"getDx\",value:function(){return this._dx}},{key:\"getLabel\",value:function(){return this._label}},{key:\"getEdge\",value:function(){return this._edge}},{key:\"getQuadrant\",value:function(){return this._quadrant}},{key:\"getNode\",value:function(){return this._node}},{key:\"toString\",value:function(){var t=Math.atan2(this._dy,this._dx),e=this.getClass().getName(),n=e.lastIndexOf(\".\");return\" \"+e.substring(n+1)+\": \"+this._p0+\" - \"+this._p1+\" \"+this._quadrant+\":\"+t+\" \"+this._label}},{key:\"computeLabel\",value:function(t){}},{key:\"init\",value:function(t,e){this._p0=t,this._p1=e,this._dx=e.x-t.x,this._dy=e.y-t.y,this._quadrant=We.quadrant(this._dx,this._dy),G.isTrue(!(0===this._dx&&0===this._dy),\"EdgeEnd with identical endpoints found\")}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){if(this._edge=null,this._label=null,this._node=null,this._p0=null,this._p1=null,this._dx=null,this._dy=null,this._quadrant=null,1===arguments.length){var t=arguments[0];this._edge=t}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];e.constructor_.call(this,n,i,r,null)}else if(4===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3];e.constructor_.call(this,s),this.init(a,o),this._label=u}}}]),e}(),Je=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"getNextMin\",value:function(){return this._nextMin}},{key:\"getDepth\",value:function(t){return this._depth[t]}},{key:\"setVisited\",value:function(t){this._isVisited=t}},{key:\"computeDirectedLabel\",value:function(){this._label=new Pe(this._edge.getLabel()),this._isForward||this._label.flip()}},{key:\"getNext\",value:function(){return this._next}},{key:\"setDepth\",value:function(t,e){if(-999!==this._depth[t]&&this._depth[t]!==e)throw new vt(\"assigned depths do not match\",this.getCoordinate());this._depth[t]=e}},{key:\"isInteriorAreaEdge\",value:function(){for(var t=!0,e=0;e<2;e++)this._label.isArea(e)&&this._label.getLocation(e,$.LEFT)===H.INTERIOR&&this._label.getLocation(e,$.RIGHT)===H.INTERIOR||(t=!1);return t}},{key:\"setNextMin\",value:function(t){this._nextMin=t}},{key:\"print\",value:function(t){f(r(a.prototype),\"print\",this).call(this,t),t.print(\" \"+this._depth[$.LEFT]+\"/\"+this._depth[$.RIGHT]),t.print(\" (\"+this.getDepthDelta()+\")\"),this._isInResult&&t.print(\" inResult\")}},{key:\"setMinEdgeRing\",value:function(t){this._minEdgeRing=t}},{key:\"isLineEdge\",value:function(){var t=this._label.isLine(0)||this._label.isLine(1),e=!this._label.isArea(0)||this._label.allPositionsEqual(0,H.EXTERIOR),n=!this._label.isArea(1)||this._label.allPositionsEqual(1,H.EXTERIOR);return t&&e&&n}},{key:\"setEdgeRing\",value:function(t){this._edgeRing=t}},{key:\"getMinEdgeRing\",value:function(){return this._minEdgeRing}},{key:\"getDepthDelta\",value:function(){var t=this._edge.getDepthDelta();return this._isForward||(t=-t),t}},{key:\"setInResult\",value:function(t){this._isInResult=t}},{key:\"getSym\",value:function(){return this._sym}},{key:\"isForward\",value:function(){return this._isForward}},{key:\"getEdge\",value:function(){return this._edge}},{key:\"printEdge\",value:function(t){this.print(t),t.print(\" \"),this._isForward?this._edge.print(t):this._edge.printReverse(t)}},{key:\"setSym\",value:function(t){this._sym=t}},{key:\"setVisitedEdge\",value:function(t){this.setVisited(t),this._sym.setVisited(t)}},{key:\"setEdgeDepths\",value:function(t,e){var n=this.getEdge().getDepthDelta();this._isForward||(n=-n);var i=1;t===$.LEFT&&(i=-1);var r=$.opposite(t),s=e+n*i;this.setDepth(t,e),this.setDepth(r,s)}},{key:\"getEdgeRing\",value:function(){return this._edgeRing}},{key:\"isInResult\",value:function(){return this._isInResult}},{key:\"setNext\",value:function(t){this._next=t}},{key:\"isVisited\",value:function(){return this._isVisited}}],[{key:\"constructor_\",value:function(){this._isForward=null,this._isInResult=!1,this._isVisited=!1,this._sym=null,this._next=null,this._nextMin=null,this._edgeRing=null,this._minEdgeRing=null,this._depth=[0,-999,-999];var t=arguments[0],e=arguments[1];if(Ke.constructor_.call(this,t),this._isForward=e,e)this.init(t.getCoordinate(0),t.getCoordinate(1));else{var n=t.getNumPoints()-1;this.init(t.getCoordinate(n),t.getCoordinate(n-1))}this.computeDirectedLabel()}},{key:\"depthFactor\",value:function(t,e){return t===H.EXTERIOR&&e===H.INTERIOR?1:t===H.INTERIOR&&e===H.EXTERIOR?-1:0}}]),a}(Ke),Qe=function(){function e(){t(this,e)}return n(e,[{key:\"createNode\",value:function(t){return new Ye(t,null)}}]),e}(),$e=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"printEdges\",value:function(t){t.println(\"Edges:\");for(var e=0;e<this._edges.size();e++){t.println(\"edge \"+e+\":\");var n=this._edges.get(e);n.print(t),n.eiList.print(t)}}},{key:\"find\",value:function(t){return this._nodes.find(t)}},{key:\"addNode\",value:function(){if(arguments[0]instanceof Ye){var t=arguments[0];return this._nodes.addNode(t)}if(arguments[0]instanceof X){var e=arguments[0];return this._nodes.addNode(e)}}},{key:\"getNodeIterator\",value:function(){return this._nodes.iterator()}},{key:\"linkResultDirectedEdges\",value:function(){for(var t=this._nodes.iterator();t.hasNext();){t.next().getEdges().linkResultDirectedEdges()}}},{key:\"debugPrintln\",value:function(t){mt.out.println(t)}},{key:\"isBoundaryNode\",value:function(t,e){var n=this._nodes.find(e);if(null===n)return!1;var i=n.getLabel();return null!==i&&i.getLocation(t)===H.BOUNDARY}},{key:\"linkAllDirectedEdges\",value:function(){for(var t=this._nodes.iterator();t.hasNext();){t.next().getEdges().linkAllDirectedEdges()}}},{key:\"matchInSameDirection\",value:function(t,e,n,i){return!!t.equals(n)&&(ct.index(t,e,i)===ct.COLLINEAR&&We.quadrant(t,e)===We.quadrant(n,i))}},{key:\"getEdgeEnds\",value:function(){return this._edgeEndList}},{key:\"debugPrint\",value:function(t){mt.out.print(t)}},{key:\"getEdgeIterator\",value:function(){return this._edges.iterator()}},{key:\"findEdgeInSameDirection\",value:function(t,e){for(var n=0;n<this._edges.size();n++){var i=this._edges.get(n),r=i.getCoordinates();if(this.matchInSameDirection(t,e,r[0],r[1]))return i;if(this.matchInSameDirection(t,e,r[r.length-1],r[r.length-2]))return i}return null}},{key:\"insertEdge\",value:function(t){this._edges.add(t)}},{key:\"findEdgeEnd\",value:function(t){for(var e=this.getEdgeEnds().iterator();e.hasNext();){var n=e.next();if(n.getEdge()===t)return n}return null}},{key:\"addEdges\",value:function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();this._edges.add(n);var i=new Je(n,!0),r=new Je(n,!1);i.setSym(r),r.setSym(i),this.add(i),this.add(r)}}},{key:\"add\",value:function(t){this._nodes.add(t),this._edgeEndList.add(t)}},{key:\"getNodes\",value:function(){return this._nodes.values()}},{key:\"findEdge\",value:function(t,e){for(var n=0;n<this._edges.size();n++){var i=this._edges.get(n),r=i.getCoordinates();if(t.equals(r[0])&&e.equals(r[1]))return i}return null}}],[{key:\"constructor_\",value:function(){if(this._edges=new yt,this._nodes=null,this._edgeEndList=new yt,0===arguments.length)this._nodes=new je(new Qe);else if(1===arguments.length){var t=arguments[0];this._nodes=new je(t)}}},{key:\"linkResultDirectedEdges\",value:function(t){for(var e=t.iterator();e.hasNext();){e.next().getEdges().linkResultDirectedEdges()}}}]),e}(),tn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"sortShellsAndHoles\",value:function(t,e,n){for(var i=t.iterator();i.hasNext();){var r=i.next();r.isHole()?n.add(r):e.add(r)}}},{key:\"computePolygons\",value:function(t){for(var e=new yt,n=t.iterator();n.hasNext();){var i=n.next().toPolygon(this._geometryFactory);e.add(i)}return e}},{key:\"placeFreeHoles\",value:function(t,n){for(var i=n.iterator();i.hasNext();){var r=i.next();if(null===r.getShell()){var s=e.findEdgeRingContaining(r,t);if(null===s)throw new vt(\"unable to assign hole to a shell\",r.getCoordinate(0));r.setShell(s)}}}},{key:\"buildMinimalEdgeRings\",value:function(t,e,n){for(var i=new yt,r=t.iterator();r.hasNext();){var s=r.next();if(s.getMaxNodeDegree()>2){s.linkDirectedEdgesForMinimalEdgeRings();var a=s.buildMinimalRings(),o=this.findShell(a);null!==o?(this.placePolygonHoles(o,a),e.add(o)):n.addAll(a)}else i.add(s)}return i}},{key:\"buildMaximalEdgeRings\",value:function(t){for(var e=new yt,n=t.iterator();n.hasNext();){var i=n.next();if(i.isInResult()&&i.getLabel().isArea()&&null===i.getEdgeRing()){var r=new Ge(i,this._geometryFactory);e.add(r),r.setInResult()}}return e}},{key:\"placePolygonHoles\",value:function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next();i.isHole()&&i.setShell(t)}}},{key:\"getPolygons\",value:function(){return this.computePolygons(this._shellList)}},{key:\"findShell\",value:function(t){for(var e=0,n=null,i=t.iterator();i.hasNext();){var r=i.next();r.isHole()||(n=r,e++)}return G.isTrue(e<=1,\"found two shells in MinimalEdgeRing list\"),n}},{key:\"add\",value:function(){if(1===arguments.length){var t=arguments[0];this.add(t.getEdgeEnds(),t.getNodes())}else if(2===arguments.length){var e=arguments[0],n=arguments[1];$e.linkResultDirectedEdges(n);var i=this.buildMaximalEdgeRings(e),r=new yt,s=this.buildMinimalEdgeRings(i,this._shellList,r);this.sortShellsAndHoles(s,this._shellList,r),this.placeFreeHoles(this._shellList,r)}}}],[{key:\"constructor_\",value:function(){this._geometryFactory=null,this._shellList=new yt;var t=arguments[0];this._geometryFactory=t}},{key:\"findEdgeRingContaining\",value:function(t,e){for(var n=t.getLinearRing(),i=n.getEnvelopeInternal(),r=n.getCoordinateN(0),s=null,a=null,o=e.iterator();o.hasNext();){var u=o.next(),l=u.getLinearRing(),h=l.getEnvelopeInternal();if(!h.equals(i)&&h.contains(i)){r=jt.ptNotInList(n.getCoordinates(),l.getCoordinates());var c=!1;Me.isInRing(r,l.getCoordinates())&&(c=!0),c&&(null===s||a.contains(h))&&(a=(s=u).getLinearRing().getEnvelopeInternal())}}return s}}]),e}(),en=function(){function e(){t(this,e)}return n(e,[{key:\"getBounds\",value:function(){}}]),e}(),nn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getItem\",value:function(){return this._item}},{key:\"getBounds\",value:function(){return this._bounds}},{key:\"interfaces_\",get:function(){return[en,E]}}],[{key:\"constructor_\",value:function(){this._bounds=null,this._item=null;var t=arguments[0],e=arguments[1];this._bounds=t,this._item=e}}]),e}(),rn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"poll\",value:function(){if(this.isEmpty())return null;var t=this._items.get(1);return this._items.set(1,this._items.get(this._size)),this._size-=1,this.reorder(1),t}},{key:\"size\",value:function(){return this._size}},{key:\"reorder\",value:function(t){for(var e=null,n=this._items.get(t);2*t<=this._size&&((e=2*t)!==this._size&&this._items.get(e+1).compareTo(this._items.get(e))<0&&e++,this._items.get(e).compareTo(n)<0);t=e)this._items.set(t,this._items.get(e));this._items.set(t,n)}},{key:\"clear\",value:function(){this._size=0,this._items.clear()}},{key:\"peek\",value:function(){return this.isEmpty()?null:this._items.get(1)}},{key:\"isEmpty\",value:function(){return 0===this._size}},{key:\"add\",value:function(t){this._items.add(null),this._size+=1;var e=this._size;for(this._items.set(0,t);t.compareTo(this._items.get(Math.trunc(e/2)))<0;e/=2)this._items.set(e,this._items.get(Math.trunc(e/2)));this._items.set(e,t)}}],[{key:\"constructor_\",value:function(){this._size=null,this._items=null,this._size=0,this._items=new yt,this._items.add(null)}}]),e}(),sn=function(){function e(){t(this,e)}return n(e,[{key:\"insert\",value:function(t,e){}},{key:\"remove\",value:function(t,e){}},{key:\"query\",value:function(){}}]),e}(),an=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getLevel\",value:function(){return this._level}},{key:\"size\",value:function(){return this._childBoundables.size()}},{key:\"getChildBoundables\",value:function(){return this._childBoundables}},{key:\"addChildBoundable\",value:function(t){G.isTrue(null===this._bounds),this._childBoundables.add(t)}},{key:\"isEmpty\",value:function(){return this._childBoundables.isEmpty()}},{key:\"getBounds\",value:function(){return null===this._bounds&&(this._bounds=this.computeBounds()),this._bounds}},{key:\"interfaces_\",get:function(){return[en,E]}}],[{key:\"constructor_\",value:function(){if(this._childBoundables=new yt,this._bounds=null,this._level=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._level=t}}}]),e}(),on={reverseOrder:function(){return{compare:function(t,e){return e.compareTo(t)}}},min:function(t){return on.sort(t),t.get(0)},sort:function(t,e){var n=t.toArray();e?At.sort(n,e):At.sort(n);for(var i=t.iterator(),r=0,s=n.length;r<s;r++)i.next(),i.set(n[r])},singletonList:function(t){var e=new yt;return e.add(t),e}},un=function(){function e(){t(this,e)}return n(e,null,[{key:\"maxDistance\",value:function(t,n,i,r,s,a,o,u){var l=e.distance(t,n,s,a);return l=Math.max(l,e.distance(t,n,o,u)),l=Math.max(l,e.distance(i,r,s,a)),l=Math.max(l,e.distance(i,r,o,u))}},{key:\"distance\",value:function(t,e,n,i){var r=n-t,s=i-e;return Math.sqrt(r*r+s*s)}},{key:\"maximumDistance\",value:function(t,n){var i=Math.min(t.getMinX(),n.getMinX()),r=Math.min(t.getMinY(),n.getMinY()),s=Math.max(t.getMaxX(),n.getMaxX()),a=Math.max(t.getMaxY(),n.getMaxY());return e.distance(i,r,s,a)}},{key:\"minMaxDistance\",value:function(t,n){var i=t.getMinX(),r=t.getMinY(),s=t.getMaxX(),a=t.getMaxY(),o=n.getMinX(),u=n.getMinY(),l=n.getMaxX(),h=n.getMaxY(),c=e.maxDistance(i,r,i,a,o,u,o,h);return c=Math.min(c,e.maxDistance(i,r,i,a,o,u,l,u)),c=Math.min(c,e.maxDistance(i,r,i,a,l,h,o,h)),c=Math.min(c,e.maxDistance(i,r,i,a,l,h,l,u)),c=Math.min(c,e.maxDistance(i,r,s,r,o,u,o,h)),c=Math.min(c,e.maxDistance(i,r,s,r,o,u,l,u)),c=Math.min(c,e.maxDistance(i,r,s,r,l,h,o,h)),c=Math.min(c,e.maxDistance(i,r,s,r,l,h,l,u)),c=Math.min(c,e.maxDistance(s,a,i,a,o,u,o,h)),c=Math.min(c,e.maxDistance(s,a,i,a,o,u,l,u)),c=Math.min(c,e.maxDistance(s,a,i,a,l,h,o,h)),c=Math.min(c,e.maxDistance(s,a,i,a,l,h,l,u)),c=Math.min(c,e.maxDistance(s,a,s,r,o,u,o,h)),c=Math.min(c,e.maxDistance(s,a,s,r,o,u,l,u)),c=Math.min(c,e.maxDistance(s,a,s,r,l,h,o,h)),c=Math.min(c,e.maxDistance(s,a,s,r,l,h,l,u))}}]),e}(),ln=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"maximumDistance\",value:function(){return un.maximumDistance(this._boundable1.getBounds(),this._boundable2.getBounds())}},{key:\"expandToQueue\",value:function(t,n){var i=e.isComposite(this._boundable1),r=e.isComposite(this._boundable2);if(i&&r)return e.area(this._boundable1)>e.area(this._boundable2)?(this.expand(this._boundable1,this._boundable2,!1,t,n),null):(this.expand(this._boundable2,this._boundable1,!0,t,n),null);if(i)return this.expand(this._boundable1,this._boundable2,!1,t,n),null;if(r)return this.expand(this._boundable2,this._boundable1,!0,t,n),null;throw new m(\"neither boundable is composite\")}},{key:\"isLeaves\",value:function(){return!(e.isComposite(this._boundable1)||e.isComposite(this._boundable2))}},{key:\"compareTo\",value:function(t){var e=t;return this._distance<e._distance?-1:this._distance>e._distance?1:0}},{key:\"expand\",value:function(t,n,i,r,s){for(var a=t.getChildBoundables().iterator();a.hasNext();){var o=a.next(),u=null;(u=i?new e(n,o,this._itemDistance):new e(o,n,this._itemDistance)).getDistance()<s&&r.add(u)}}},{key:\"getBoundable\",value:function(t){return 0===t?this._boundable1:this._boundable2}},{key:\"getDistance\",value:function(){return this._distance}},{key:\"distance\",value:function(){return this.isLeaves()?this._itemDistance.distance(this._boundable1,this._boundable2):this._boundable1.getBounds().distance(this._boundable2.getBounds())}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._boundable1=null,this._boundable2=null,this._distance=null,this._itemDistance=null;var t=arguments[0],e=arguments[1],n=arguments[2];this._boundable1=t,this._boundable2=e,this._itemDistance=n,this._distance=this.distance()}},{key:\"area\",value:function(t){return t.getBounds().getArea()}},{key:\"isComposite\",value:function(t){return t instanceof an}}]),e}(),hn=function(){function e(){t(this,e)}return n(e,[{key:\"visitItem\",value:function(t){}}]),e}(),cn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"queryInternal\",value:function(){if(rt(arguments[2],hn)&&arguments[0]instanceof Object&&arguments[1]instanceof an)for(var t=arguments[0],e=arguments[1],n=arguments[2],i=e.getChildBoundables(),r=0;r<i.size();r++){var s=i.get(r);this.getIntersectsOp().intersects(s.getBounds(),t)&&(s instanceof an?this.queryInternal(t,s,n):s instanceof nn?n.visitItem(s.getItem()):G.shouldNeverReachHere())}else if(rt(arguments[2],nt)&&arguments[0]instanceof Object&&arguments[1]instanceof an)for(var a=arguments[0],o=arguments[1],u=arguments[2],l=o.getChildBoundables(),h=0;h<l.size();h++){var c=l.get(h);this.getIntersectsOp().intersects(c.getBounds(),a)&&(c instanceof an?this.queryInternal(a,c,u):c instanceof nn?u.add(c.getItem()):G.shouldNeverReachHere())}}},{key:\"getNodeCapacity\",value:function(){return this._nodeCapacity}},{key:\"lastNode\",value:function(t){return t.get(t.size()-1)}},{key:\"size\",value:function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.size(this._root));if(1===arguments.length){for(var t=arguments[0],e=0,n=t.getChildBoundables().iterator();n.hasNext();){var i=n.next();i instanceof an?e+=this.size(i):i instanceof nn&&(e+=1)}return e}}},{key:\"removeItem\",value:function(t,e){for(var n=null,i=t.getChildBoundables().iterator();i.hasNext();){var r=i.next();r instanceof nn&&r.getItem()===e&&(n=r)}return null!==n&&(t.getChildBoundables().remove(n),!0)}},{key:\"itemsTree\",value:function(){if(0===arguments.length){this.build();var t=this.itemsTree(this._root);return null===t?new yt:t}if(1===arguments.length){for(var e=arguments[0],n=new yt,i=e.getChildBoundables().iterator();i.hasNext();){var r=i.next();if(r instanceof an){var s=this.itemsTree(r);null!==s&&n.add(s)}else r instanceof nn?n.add(r.getItem()):G.shouldNeverReachHere()}return n.size()<=0?null:n}}},{key:\"insert\",value:function(t,e){G.isTrue(!this._built,\"Cannot insert items into an STR packed R-tree after it has been built.\"),this._itemBoundables.add(new nn(t,e))}},{key:\"boundablesAtLevel\",value:function(){if(1===arguments.length){var t=arguments[0],e=new yt;return this.boundablesAtLevel(t,this._root,e),e}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];if(G.isTrue(n>-2),i.getLevel()===n)return r.add(i),null;for(var s=i.getChildBoundables().iterator();s.hasNext();){var a=s.next();a instanceof an?this.boundablesAtLevel(n,a,r):(G.isTrue(a instanceof nn),-1===n&&r.add(a))}return null}}},{key:\"query\",value:function(){if(1===arguments.length){var t=arguments[0];this.build();var e=new yt;return this.isEmpty()||this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.queryInternal(t,this._root,e),e}if(2===arguments.length){var n=arguments[0],i=arguments[1];if(this.build(),this.isEmpty())return null;this.getIntersectsOp().intersects(this._root.getBounds(),n)&&this.queryInternal(n,this._root,i)}}},{key:\"build\",value:function(){if(this._built)return null;this._root=this._itemBoundables.isEmpty()?this.createNode(0):this.createHigherLevels(this._itemBoundables,-1),this._itemBoundables=null,this._built=!0}},{key:\"getRoot\",value:function(){return this.build(),this._root}},{key:\"remove\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return this.build(),!!this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.remove(t,this._root,e)}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],s=this.removeItem(i,r);if(s)return!0;for(var a=null,o=i.getChildBoundables().iterator();o.hasNext();){var u=o.next();if(this.getIntersectsOp().intersects(u.getBounds(),n)&&(u instanceof an&&(s=this.remove(n,u,r)))){a=u;break}}return null!==a&&a.getChildBoundables().isEmpty()&&i.getChildBoundables().remove(a),s}}},{key:\"createHigherLevels\",value:function(t,e){G.isTrue(!t.isEmpty());var n=this.createParentBoundables(t,e+1);return 1===n.size()?n.get(0):this.createHigherLevels(n,e+1)}},{key:\"depth\",value:function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.depth(this._root));if(1===arguments.length){for(var t=arguments[0],e=0,n=t.getChildBoundables().iterator();n.hasNext();){var i=n.next();if(i instanceof an){var r=this.depth(i);r>e&&(e=r)}}return e+1}}},{key:\"createParentBoundables\",value:function(t,e){G.isTrue(!t.isEmpty());var n=new yt;n.add(this.createNode(e));var i=new yt(t);on.sort(i,this.getComparator());for(var r=i.iterator();r.hasNext();){var s=r.next();this.lastNode(n).getChildBoundables().size()===this.getNodeCapacity()&&n.add(this.createNode(e)),this.lastNode(n).addChildBoundable(s)}return n}},{key:\"isEmpty\",value:function(){return this._built?this._root.isEmpty():this._itemBoundables.isEmpty()}},{key:\"interfaces_\",get:function(){return[E]}}],[{key:\"constructor_\",value:function(){if(this._root=null,this._built=!1,this._itemBoundables=new yt,this._nodeCapacity=null,0===arguments.length)e.constructor_.call(this,e.DEFAULT_NODE_CAPACITY);else if(1===arguments.length){var t=arguments[0];G.isTrue(t>1,\"Node capacity must be greater than 1\"),this._nodeCapacity=t}}},{key:\"compareDoubles\",value:function(t,e){return t>e?1:t<e?-1:0}}]),e}();cn.IntersectsOp=function(){},cn.DEFAULT_NODE_CAPACITY=10;var fn=function(){function e(){t(this,e)}return n(e,[{key:\"distance\",value:function(t,e){}}]),e}(),vn=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"createParentBoundablesFromVerticalSlices\",value:function(t,e){G.isTrue(t.length>0);for(var n=new yt,i=0;i<t.length;i++)n.addAll(this.createParentBoundablesFromVerticalSlice(t[i],e));return n}},{key:\"nearestNeighbourK\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return this.nearestNeighbourK(t,A.POSITIVE_INFINITY,e)}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],s=i,o=new rn;o.add(n);for(var u=new rn;!o.isEmpty()&&s>=0;){var l=o.poll(),h=l.getDistance();if(h>=s)break;if(l.isLeaves())if(u.size()<r)u.add(l);else{var c=u.peek();c.getDistance()>h&&(u.poll(),u.add(l));var f=u.peek();s=f.getDistance()}else l.expandToQueue(o,s)}return a.getItems(u)}}},{key:\"createNode\",value:function(t){return new gn(t)}},{key:\"size\",value:function(){return 0===arguments.length?f(r(a.prototype),\"size\",this).call(this):f(r(a.prototype),\"size\",this).apply(this,arguments)}},{key:\"insert\",value:function(){if(!(2===arguments.length&&arguments[1]instanceof Object&&arguments[0]instanceof U))return f(r(a.prototype),\"insert\",this).apply(this,arguments);var t=arguments[0],e=arguments[1];if(t.isNull())return null;f(r(a.prototype),\"insert\",this).call(this,t,e)}},{key:\"getIntersectsOp\",value:function(){return a.intersectsOp}},{key:\"verticalSlices\",value:function(t,e){for(var n=Math.trunc(Math.ceil(t.size()/e)),i=new Array(e).fill(null),r=t.iterator(),s=0;s<e;s++){i[s]=new yt;for(var a=0;r.hasNext()&&a<n;){var o=r.next();i[s].add(o),a++}}return i}},{key:\"query\",value:function(){if(1===arguments.length){var t=arguments[0];return f(r(a.prototype),\"query\",this).call(this,t)}if(2===arguments.length){var e=arguments[0],n=arguments[1];f(r(a.prototype),\"query\",this).call(this,e,n)}}},{key:\"getComparator\",value:function(){return a.yComparator}},{key:\"createParentBoundablesFromVerticalSlice\",value:function(t,e){return f(r(a.prototype),\"createParentBoundables\",this).call(this,t,e)}},{key:\"remove\",value:function(){if(2===arguments.length&&arguments[1]instanceof Object&&arguments[0]instanceof U){var t=arguments[0],e=arguments[1];return f(r(a.prototype),\"remove\",this).call(this,t,e)}return f(r(a.prototype),\"remove\",this).apply(this,arguments)}},{key:\"depth\",value:function(){return 0===arguments.length?f(r(a.prototype),\"depth\",this).call(this):f(r(a.prototype),\"depth\",this).apply(this,arguments)}},{key:\"createParentBoundables\",value:function(t,e){G.isTrue(!t.isEmpty());var n=Math.trunc(Math.ceil(t.size()/this.getNodeCapacity())),i=new yt(t);on.sort(i,a.xComparator);var r=this.verticalSlices(i,Math.trunc(Math.ceil(Math.sqrt(n))));return this.createParentBoundablesFromVerticalSlices(r,e)}},{key:\"nearestNeighbour\",value:function(){if(1===arguments.length){if(rt(arguments[0],fn)){var t=arguments[0];if(this.isEmpty())return null;var e=new ln(this.getRoot(),this.getRoot(),t);return this.nearestNeighbour(e)}if(arguments[0]instanceof ln){var n=arguments[0],i=A.POSITIVE_INFINITY,r=null,s=new rn;for(s.add(n);!s.isEmpty()&&i>0;){var a=s.poll(),o=a.getDistance();if(o>=i)break;a.isLeaves()?(i=o,r=a):a.expandToQueue(s,i)}return null===r?null:[r.getBoundable(0).getItem(),r.getBoundable(1).getItem()]}}else{if(2===arguments.length){var u=arguments[0],l=arguments[1];if(this.isEmpty()||u.isEmpty())return null;var h=new ln(this.getRoot(),u.getRoot(),l);return this.nearestNeighbour(h)}if(3===arguments.length){var c=arguments[0],f=arguments[1],v=arguments[2],g=new nn(c,f),y=new ln(this.getRoot(),g,v);return this.nearestNeighbour(y)[0]}if(4===arguments.length){var d=arguments[0],_=arguments[1],p=arguments[2],m=arguments[3],k=new nn(d,_),x=new ln(this.getRoot(),k,p);return this.nearestNeighbourK(x,m)}}}},{key:\"isWithinDistance\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1],n=A.POSITIVE_INFINITY,i=new rn;for(i.add(t);!i.isEmpty();){var r=i.poll(),s=r.getDistance();if(s>e)return!1;if(r.maximumDistance()<=e)return!0;if(r.isLeaves()){if((n=s)<=e)return!0}else r.expandToQueue(i,n)}return!1}if(3===arguments.length){var a=arguments[0],o=arguments[1],u=arguments[2],l=new ln(this.getRoot(),a.getRoot(),o);return this.isWithinDistance(l,u)}}},{key:\"interfaces_\",get:function(){return[sn,E]}}],[{key:\"constructor_\",value:function(){if(0===arguments.length)a.constructor_.call(this,a.DEFAULT_NODE_CAPACITY);else if(1===arguments.length){var t=arguments[0];cn.constructor_.call(this,t)}}},{key:\"centreX\",value:function(t){return a.avg(t.getMinX(),t.getMaxX())}},{key:\"avg\",value:function(t,e){return(t+e)/2}},{key:\"getItems\",value:function(t){for(var e=new Array(t.size()).fill(null),n=0;!t.isEmpty();){var i=t.poll();e[n]=i.getBoundable(0).getItem(),n++}return e}},{key:\"centreY\",value:function(t){return a.avg(t.getMinY(),t.getMaxY())}}]),a}(cn),gn=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"computeBounds\",value:function(){for(var t=null,e=this.getChildBoundables().iterator();e.hasNext();){var n=e.next();null===t?t=new U(n.getBounds()):t.expandToInclude(n.getBounds())}return t}}],[{key:\"constructor_\",value:function(){var t=arguments[0];an.constructor_.call(this,t)}}]),s}(an);vn.STRtreeNode=gn,vn.xComparator=new(function(){function e(){t(this,e)}return n(e,[{key:\"interfaces_\",get:function(){return[P]}},{key:\"compare\",value:function(t,e){return cn.compareDoubles(vn.centreX(t.getBounds()),vn.centreX(e.getBounds()))}}]),e}()),vn.yComparator=new(function(){function e(){t(this,e)}return n(e,[{key:\"interfaces_\",get:function(){return[P]}},{key:\"compare\",value:function(t,e){return cn.compareDoubles(vn.centreY(t.getBounds()),vn.centreY(e.getBounds()))}}]),e}()),vn.intersectsOp=new(function(){function e(){t(this,e)}return n(e,[{key:\"interfaces_\",get:function(){return[IntersectsOp]}},{key:\"intersects\",value:function(t,e){return t.intersects(e)}}]),e}()),vn.DEFAULT_NODE_CAPACITY=10;var yn=function(){function e(){t(this,e)}return n(e,null,[{key:\"relativeSign\",value:function(t,e){return t<e?-1:t>e?1:0}},{key:\"compare\",value:function(t,n,i){if(n.equals2D(i))return 0;var r=e.relativeSign(n.x,i.x),s=e.relativeSign(n.y,i.y);switch(t){case 0:return e.compareValue(r,s);case 1:return e.compareValue(s,r);case 2:return e.compareValue(s,-r);case 3:return e.compareValue(-r,s);case 4:return e.compareValue(-r,-s);case 5:return e.compareValue(-s,-r);case 6:return e.compareValue(-s,r);case 7:return e.compareValue(r,-s)}return G.shouldNeverReachHere(\"invalid octant value\"),0}},{key:\"compareValue\",value:function(t,e){return t<0?-1:t>0?1:e<0?-1:e>0?1:0}}]),e}(),dn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getCoordinate\",value:function(){return this.coord}},{key:\"print\",value:function(t){t.print(this.coord),t.print(\" seg # = \"+this.segmentIndex)}},{key:\"compareTo\",value:function(t){var e=t;return this.segmentIndex<e.segmentIndex?-1:this.segmentIndex>e.segmentIndex?1:this.coord.equals2D(e.coord)?0:this._isInterior?e._isInterior?yn.compare(this._segmentOctant,this.coord,e.coord):1:-1}},{key:\"isEndPoint\",value:function(t){return 0===this.segmentIndex&&!this._isInterior||this.segmentIndex===t}},{key:\"toString\",value:function(){return this.segmentIndex+\":\"+this.coord.toString()}},{key:\"isInterior\",value:function(){return this._isInterior}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._segString=null,this.coord=null,this.segmentIndex=null,this._segmentOctant=null,this._isInterior=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._segString=t,this.coord=new X(e),this.segmentIndex=n,this._segmentOctant=i,this._isInterior=!e.equals2D(t.getCoordinate(n))}}]),e}(),_n=function(){function e(){t(this,e)}return n(e,[{key:\"hasNext\",value:function(){}},{key:\"next\",value:function(){}},{key:\"remove\",value:function(){}}]),e}(),pn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getSplitCoordinates\",value:function(){var t=new Zt;this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next();this.addEdgeCoordinates(n,i,t),n=i}return t.toCoordinateArray()}},{key:\"addCollapsedNodes\",value:function(){var t=new yt;this.findCollapsesFromInsertedNodes(t),this.findCollapsesFromExistingVertices(t);for(var e=t.iterator();e.hasNext();){var n=e.next().intValue();this.add(this._edge.getCoordinate(n),n)}}},{key:\"createSplitEdgePts\",value:function(t,e){var n=e.segmentIndex-t.segmentIndex+2;if(2===n)return[new X(t.coord),new X(e.coord)];var i=this._edge.getCoordinate(e.segmentIndex),r=e.isInterior()||!e.coord.equals2D(i);r||n--;var s=new Array(n).fill(null),a=0;s[a++]=new X(t.coord);for(var o=t.segmentIndex+1;o<=e.segmentIndex;o++)s[a++]=this._edge.getCoordinate(o);return r&&(s[a]=new X(e.coord)),s}},{key:\"print\",value:function(t){t.println(\"Intersections:\");for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"findCollapsesFromExistingVertices\",value:function(t){for(var e=0;e<this._edge.size()-2;e++){var n=this._edge.getCoordinate(e);this._edge.getCoordinate(e+1);var i=this._edge.getCoordinate(e+2);n.equals2D(i)&&t.add(at.valueOf(e+1))}}},{key:\"addEdgeCoordinates\",value:function(t,e,n){var i=this.createSplitEdgePts(t,e);n.add(i,!1)}},{key:\"iterator\",value:function(){return this._nodeMap.values().iterator()}},{key:\"addSplitEdges\",value:function(t){this.addEndpoints(),this.addCollapsedNodes();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}}},{key:\"findCollapseIndex\",value:function(t,e,n){if(!t.coord.equals2D(e.coord))return!1;var i=e.segmentIndex-t.segmentIndex;return e.isInterior()||i--,1===i&&(n[0]=t.segmentIndex+1,!0)}},{key:\"findCollapsesFromInsertedNodes\",value:function(t){for(var e=new Array(1).fill(null),n=this.iterator(),i=n.next();n.hasNext();){var r=n.next();this.findCollapseIndex(i,r,e)&&t.add(at.valueOf(e[0])),i=r}}},{key:\"getEdge\",value:function(){return this._edge}},{key:\"addEndpoints\",value:function(){var t=this._edge.size()-1;this.add(this._edge.getCoordinate(0),0),this.add(this._edge.getCoordinate(t),t)}},{key:\"createSplitEdge\",value:function(t,e){var n=this.createSplitEdgePts(t,e);return new In(n,this._edge.getData())}},{key:\"add\",value:function(t,e){var n=new dn(this._edge,t,e,this._edge.getSegmentOctant(e)),i=this._nodeMap.get(n);return null!==i?(G.isTrue(i.coord.equals2D(t),\"Found equal nodes with different coordinates\"),i):(this._nodeMap.put(n,n),n)}},{key:\"checkSplitEdgesCorrectness\",value:function(t){var e=this._edge.getCoordinates(),n=t.get(0).getCoordinate(0);if(!n.equals2D(e[0]))throw new D(\"bad split edge start point at \"+n);var i=t.get(t.size()-1).getCoordinates(),r=i[i.length-1];if(!r.equals2D(e[e.length-1]))throw new D(\"bad split edge end point at \"+r)}}],[{key:\"constructor_\",value:function(){this._nodeMap=new Ze,this._edge=null;var t=arguments[0];this._edge=t}}]),e}(),mn=function(){function e(){t(this,e)}return n(e,null,[{key:\"octant\",value:function(){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var t=arguments[0],n=arguments[1];if(0===t&&0===n)throw new m(\"Cannot compute the octant for point ( \"+t+\", \"+n+\" )\");var i=Math.abs(t),r=Math.abs(n);return t>=0?n>=0?i>=r?0:1:i>=r?7:6:n>=0?i>=r?3:2:i>=r?4:5}if(arguments[0]instanceof X&&arguments[1]instanceof X){var s=arguments[0],a=arguments[1],o=a.x-s.x,u=a.y-s.y;if(0===o&&0===u)throw new m(\"Cannot compute the octant for two identical points \"+s);return e.octant(o,u)}}}]),e}(),kn=function(){function e(){t(this,e)}return n(e,[{key:\"getCoordinates\",value:function(){}},{key:\"size\",value:function(){}},{key:\"getCoordinate\",value:function(t){}},{key:\"isClosed\",value:function(){}},{key:\"setData\",value:function(t){}},{key:\"getData\",value:function(){}}]),e}(),xn=function(){function e(){t(this,e)}return n(e,[{key:\"addIntersection\",value:function(t,e){}},{key:\"interfaces_\",get:function(){return[kn]}}]),e}(),In=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getCoordinates\",value:function(){return this._pts}},{key:\"size\",value:function(){return this._pts.length}},{key:\"getCoordinate\",value:function(t){return this._pts[t]}},{key:\"isClosed\",value:function(){return this._pts[0].equals(this._pts[this._pts.length-1])}},{key:\"getSegmentOctant\",value:function(t){return t===this._pts.length-1?-1:this.safeOctant(this.getCoordinate(t),this.getCoordinate(t+1))}},{key:\"setData\",value:function(t){this._data=t}},{key:\"safeOctant\",value:function(t,e){return t.equals2D(e)?0:mn.octant(t,e)}},{key:\"getData\",value:function(){return this._data}},{key:\"addIntersection\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.addIntersectionNode(t,e)}else if(4===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[3],s=new X(n.getIntersection(r));this.addIntersection(s,i)}}},{key:\"toString\",value:function(){return Re.toLineString(new Qt(this._pts))}},{key:\"getNodeList\",value:function(){return this._nodeList}},{key:\"addIntersectionNode\",value:function(t,e){var n=e,i=n+1;if(i<this._pts.length){var r=this._pts[i];t.equals2D(r)&&(n=i)}return this._nodeList.add(t,n)}},{key:\"addIntersections\",value:function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++)this.addIntersection(t,e,n,i)}},{key:\"interfaces_\",get:function(){return[xn]}}],[{key:\"constructor_\",value:function(){this._nodeList=new pn(this),this._pts=null,this._data=null;var t=arguments[0],e=arguments[1];this._pts=t,this._data=e}},{key:\"getNodedSubstrings\",value:function(){if(1===arguments.length){var t=arguments[0],n=new yt;return e.getNodedSubstrings(t,n),n}if(2===arguments.length)for(var i=arguments[0],r=arguments[1],s=i.iterator();s.hasNext();){var a=s.next();a.getNodeList().addSplitEdges(r)}}}]),e}(),En=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"minX\",value:function(){return Math.min(this.p0.x,this.p1.x)}},{key:\"orientationIndex\",value:function(){if(arguments[0]instanceof e){var t=arguments[0],n=ct.index(this.p0,this.p1,t.p0),i=ct.index(this.p0,this.p1,t.p1);return n>=0&&i>=0||n<=0&&i<=0?Math.max(n,i):0}if(arguments[0]instanceof X){var r=arguments[0];return ct.index(this.p0,this.p1,r)}}},{key:\"toGeometry\",value:function(t){return t.createLineString([this.p0,this.p1])}},{key:\"isVertical\",value:function(){return this.p0.x===this.p1.x}},{key:\"equals\",value:function(t){if(!(t instanceof e))return!1;var n=t;return this.p0.equals(n.p0)&&this.p1.equals(n.p1)}},{key:\"intersection\",value:function(t){var e=new Oe;return e.computeIntersection(this.p0,this.p1,t.p0,t.p1),e.hasIntersection()?e.getIntersection(0):null}},{key:\"project\",value:function(){if(arguments[0]instanceof X){var t=arguments[0];if(t.equals(this.p0)||t.equals(this.p1))return new X(t);var n=this.projectionFactor(t),i=new X;return i.x=this.p0.x+n*(this.p1.x-this.p0.x),i.y=this.p0.y+n*(this.p1.y-this.p0.y),i}if(arguments[0]instanceof e){var r=arguments[0],s=this.projectionFactor(r.p0),a=this.projectionFactor(r.p1);if(s>=1&&a>=1)return null;if(s<=0&&a<=0)return null;var o=this.project(r.p0);s<0&&(o=this.p0),s>1&&(o=this.p1);var u=this.project(r.p1);return a<0&&(u=this.p0),a>1&&(u=this.p1),new e(o,u)}}},{key:\"normalize\",value:function(){this.p1.compareTo(this.p0)<0&&this.reverse()}},{key:\"angle\",value:function(){return Math.atan2(this.p1.y-this.p0.y,this.p1.x-this.p0.x)}},{key:\"getCoordinate\",value:function(t){return 0===t?this.p0:this.p1}},{key:\"distancePerpendicular\",value:function(t){return xt.pointToLinePerpendicular(t,this.p0,this.p1)}},{key:\"minY\",value:function(){return Math.min(this.p0.y,this.p1.y)}},{key:\"midPoint\",value:function(){return e.midPoint(this.p0,this.p1)}},{key:\"projectionFactor\",value:function(t){if(t.equals(this.p0))return 0;if(t.equals(this.p1))return 1;var e=this.p1.x-this.p0.x,n=this.p1.y-this.p0.y,i=e*e+n*n;return i<=0?A.NaN:((t.x-this.p0.x)*e+(t.y-this.p0.y)*n)/i}},{key:\"closestPoints\",value:function(t){var e=this.intersection(t);if(null!==e)return[e,e];var n=new Array(2).fill(null),i=A.MAX_VALUE,r=null,s=this.closestPoint(t.p0);i=s.distance(t.p0),n[0]=s,n[1]=t.p0;var a=this.closestPoint(t.p1);(r=a.distance(t.p1))<i&&(i=r,n[0]=a,n[1]=t.p1);var o=t.closestPoint(this.p0);(r=o.distance(this.p0))<i&&(i=r,n[0]=this.p0,n[1]=o);var u=t.closestPoint(this.p1);return(r=u.distance(this.p1))<i&&(i=r,n[0]=this.p1,n[1]=u),n}},{key:\"closestPoint\",value:function(t){var e=this.projectionFactor(t);return e>0&&e<1?this.project(t):this.p0.distance(t)<this.p1.distance(t)?this.p0:this.p1}},{key:\"maxX\",value:function(){return Math.max(this.p0.x,this.p1.x)}},{key:\"getLength\",value:function(){return this.p0.distance(this.p1)}},{key:\"compareTo\",value:function(t){var e=t,n=this.p0.compareTo(e.p0);return 0!==n?n:this.p1.compareTo(e.p1)}},{key:\"reverse\",value:function(){var t=this.p0;this.p0=this.p1,this.p1=t}},{key:\"equalsTopo\",value:function(t){return this.p0.equals(t.p0)&&this.p1.equals(t.p1)||this.p0.equals(t.p1)&&this.p1.equals(t.p0)}},{key:\"lineIntersection\",value:function(t){return pt.intersection(this.p0,this.p1,t.p0,t.p1)}},{key:\"maxY\",value:function(){return Math.max(this.p0.y,this.p1.y)}},{key:\"pointAlongOffset\",value:function(t,e){var n=this.p0.x+t*(this.p1.x-this.p0.x),i=this.p0.y+t*(this.p1.y-this.p0.y),r=this.p1.x-this.p0.x,s=this.p1.y-this.p0.y,a=Math.sqrt(r*r+s*s),o=0,u=0;if(0!==e){if(a<=0)throw new IllegalStateException(\"Cannot compute offset from zero-length line segment\");o=e*r/a,u=e*s/a}return new X(n-u,i+o)}},{key:\"setCoordinates\",value:function(){if(1===arguments.length){var t=arguments[0];this.setCoordinates(t.p0,t.p1)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.p0.x=e.x,this.p0.y=e.y,this.p1.x=n.x,this.p1.y=n.y}}},{key:\"segmentFraction\",value:function(t){var e=this.projectionFactor(t);return e<0?e=0:(e>1||A.isNaN(e))&&(e=1),e}},{key:\"toString\",value:function(){return\"LINESTRING( \"+this.p0.x+\" \"+this.p0.y+\", \"+this.p1.x+\" \"+this.p1.y+\")\"}},{key:\"isHorizontal\",value:function(){return this.p0.y===this.p1.y}},{key:\"reflect\",value:function(t){var e=this.p1.getY()-this.p0.getY(),n=this.p0.getX()-this.p1.getX(),i=this.p0.getY()*(this.p1.getX()-this.p0.getX())-this.p0.getX()*(this.p1.getY()-this.p0.getY()),r=e*e+n*n,s=e*e-n*n,a=t.getX(),o=t.getY();return new X((-s*a-2*e*n*o-2*e*i)/r,(s*o-2*e*n*a-2*n*i)/r)}},{key:\"distance\",value:function(){if(arguments[0]instanceof e){var t=arguments[0];return xt.segmentToSegment(this.p0,this.p1,t.p0,t.p1)}if(arguments[0]instanceof X){var n=arguments[0];return xt.pointToSegment(n,this.p0,this.p1)}}},{key:\"pointAlong\",value:function(t){var e=new X;return e.x=this.p0.x+t*(this.p1.x-this.p0.x),e.y=this.p0.y+t*(this.p1.y-this.p0.y),e}},{key:\"hashCode\",value:function(){var t=A.doubleToLongBits(this.p0.x);t^=31*A.doubleToLongBits(this.p0.y);var e=Math.trunc(t)^Math.trunc(t>>32),n=A.doubleToLongBits(this.p1.x);return n^=31*A.doubleToLongBits(this.p1.y),e^(Math.trunc(n)^Math.trunc(n>>32))}},{key:\"interfaces_\",get:function(){return[x,E]}}],[{key:\"constructor_\",value:function(){if(this.p0=null,this.p1=null,0===arguments.length)e.constructor_.call(this,new X,new X);else if(1===arguments.length){var t=arguments[0];e.constructor_.call(this,t.p0,t.p1)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.p0=n,this.p1=i}else if(4===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3];e.constructor_.call(this,new X(r,s),new X(a,o))}}},{key:\"midPoint\",value:function(t,e){return new X((t.x+e.x)/2,(t.y+e.y)/2)}}]),e}(),Nn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"overlap\",value:function(){if(2===arguments.length);else if(4===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];t.getLineSegment(e,this._overlapSeg1),n.getLineSegment(i,this._overlapSeg2),this.overlap(this._overlapSeg1,this._overlapSeg2)}}}],[{key:\"constructor_\",value:function(){this._overlapSeg1=new En,this._overlapSeg2=new En}}]),e}(),Tn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getLineSegment\",value:function(t,e){e.p0=this._pts[t],e.p1=this._pts[t+1]}},{key:\"computeSelect\",value:function(t,e,n,i){var r=this._pts[e],s=this._pts[n];if(n-e==1)return i.select(this,e),null;if(!t.intersects(r,s))return null;var a=Math.trunc((e+n)/2);e<a&&this.computeSelect(t,e,a,i),a<n&&this.computeSelect(t,a,n,i)}},{key:\"getCoordinates\",value:function(){for(var t=new Array(this._end-this._start+1).fill(null),e=0,n=this._start;n<=this._end;n++)t[e++]=this._pts[n];return t}},{key:\"computeOverlaps\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.computeOverlaps(this._start,this._end,t,t._start,t._end,e)}else if(6===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],s=arguments[3],a=arguments[4],o=arguments[5];if(i-n==1&&a-s==1)return o.overlap(this,n,r,s),null;if(!this.overlaps(n,i,r,s,a))return null;var u=Math.trunc((n+i)/2),l=Math.trunc((s+a)/2);n<u&&(s<l&&this.computeOverlaps(n,u,r,s,l,o),l<a&&this.computeOverlaps(n,u,r,l,a,o)),u<i&&(s<l&&this.computeOverlaps(u,i,r,s,l,o),l<a&&this.computeOverlaps(u,i,r,l,a,o))}}},{key:\"setId\",value:function(t){this._id=t}},{key:\"select\",value:function(t,e){this.computeSelect(t,this._start,this._end,e)}},{key:\"getEnvelope\",value:function(){if(null===this._env){var t=this._pts[this._start],e=this._pts[this._end];this._env=new U(t,e)}return this._env}},{key:\"overlaps\",value:function(t,e,n,i,r){return U.intersects(this._pts[t],this._pts[e],n._pts[i],n._pts[r])}},{key:\"getEndIndex\",value:function(){return this._end}},{key:\"getStartIndex\",value:function(){return this._start}},{key:\"getContext\",value:function(){return this._context}},{key:\"getId\",value:function(){return this._id}}],[{key:\"constructor_\",value:function(){this._pts=null,this._start=null,this._end=null,this._env=null,this._context=null,this._id=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._pts=t,this._start=e,this._end=n,this._context=i}}]),e}(),Sn=function(){function e(){t(this,e)}return n(e,null,[{key:\"findChainEnd\",value:function(t,e){for(var n=e;n<t.length-1&&t[n].equals2D(t[n+1]);)n++;if(n>=t.length-1)return t.length-1;for(var i=We.quadrant(t[n],t[n+1]),r=e+1;r<t.length;){if(!t[r-1].equals2D(t[r]))if(We.quadrant(t[r-1],t[r])!==i)break;r++}return r-1}},{key:\"getChains\",value:function(){if(1===arguments.length){var t=arguments[0];return e.getChains(t,null)}if(2===arguments.length){var n=arguments[0],i=arguments[1],r=new yt,s=0;do{var a=e.findChainEnd(n,s),o=new Tn(n,s,a,i);r.add(o),s=a}while(s<n.length-1);return r}}}]),e}(),Ln=function(){function e(){t(this,e)}return n(e,[{key:\"computeNodes\",value:function(t){}},{key:\"getNodedSubstrings\",value:function(){}}]),e}(),Cn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"setSegmentIntersector\",value:function(t){this._segInt=t}},{key:\"interfaces_\",get:function(){return[Ln]}}],[{key:\"constructor_\",value:function(){if(this._segInt=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this.setSegmentIntersector(t)}}}]),e}(),Rn=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,[{key:\"getMonotoneChains\",value:function(){return this._monoChains}},{key:\"getNodedSubstrings\",value:function(){return In.getNodedSubstrings(this._nodedSegStrings)}},{key:\"getIndex\",value:function(){return this._index}},{key:\"add\",value:function(t){for(var e=Sn.getChains(t.getCoordinates(),t).iterator();e.hasNext();){var n=e.next();n.setId(this._idCounter++),this._index.insert(n.getEnvelope(),n),this._monoChains.add(n)}}},{key:\"computeNodes\",value:function(t){this._nodedSegStrings=t;for(var e=t.iterator();e.hasNext();)this.add(e.next());this.intersectChains()}},{key:\"intersectChains\",value:function(){for(var t=new wn(this._segInt),e=this._monoChains.iterator();e.hasNext();)for(var n=e.next(),i=this._index.query(n.getEnvelope()).iterator();i.hasNext();){var r=i.next();if(r.getId()>n.getId()&&(n.computeOverlaps(r,t),this._nOverlaps++),this._segInt.isDone())return null}}}],[{key:\"constructor_\",value:function(){if(this._monoChains=new yt,this._index=new vn,this._idCounter=0,this._nodedSegStrings=null,this._nOverlaps=0,0===arguments.length);else if(1===arguments.length){var t=arguments[0];Cn.constructor_.call(this,t)}}}]),s}(Cn),wn=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"overlap\",value:function(){if(4!==arguments.length)return f(r(a.prototype),\"overlap\",this).apply(this,arguments);var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3],s=t.getContext(),o=n.getContext();this._si.processIntersections(s,e,o,i)}}],[{key:\"constructor_\",value:function(){this._si=null;var t=arguments[0];this._si=t}}]),a}(Nn);Rn.SegmentOverlapAction=wn;var On=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"isDeletable\",value:function(t,e,n,i){var r=this._inputLine[t],s=this._inputLine[e],a=this._inputLine[n];return!!this.isConcave(r,s,a)&&(!!this.isShallow(r,s,a,i)&&this.isShallowSampled(r,s,t,n,i))}},{key:\"deleteShallowConcavities\",value:function(){for(var t=1,n=this.findNextNonDeletedIndex(t),i=this.findNextNonDeletedIndex(n),r=!1;i<this._inputLine.length;){var s=!1;this.isDeletable(t,n,i,this._distanceTol)&&(this._isDeleted[n]=e.DELETE,s=!0,r=!0),t=s?i:n,n=this.findNextNonDeletedIndex(t),i=this.findNextNonDeletedIndex(n)}return r}},{key:\"isShallowConcavity\",value:function(t,e,n,i){return ct.index(t,e,n)===this._angleOrientation&&xt.pointToSegment(e,t,n)<i}},{key:\"isShallowSampled\",value:function(t,n,i,r,s){var a=Math.trunc((r-i)/e.NUM_PTS_TO_CHECK);a<=0&&(a=1);for(var o=i;o<r;o+=a)if(!this.isShallow(t,n,this._inputLine[o],s))return!1;return!0}},{key:\"isConcave\",value:function(t,e,n){var i=ct.index(t,e,n)===this._angleOrientation;return i}},{key:\"simplify\",value:function(t){this._distanceTol=Math.abs(t),t<0&&(this._angleOrientation=ct.CLOCKWISE),this._isDeleted=new Array(this._inputLine.length).fill(null);var e=!1;do{e=this.deleteShallowConcavities()}while(e);return this.collapseLine()}},{key:\"findNextNonDeletedIndex\",value:function(t){for(var n=t+1;n<this._inputLine.length&&this._isDeleted[n]===e.DELETE;)n++;return n}},{key:\"isShallow\",value:function(t,e,n,i){return xt.pointToSegment(e,t,n)<i}},{key:\"collapseLine\",value:function(){for(var t=new Zt,n=0;n<this._inputLine.length;n++)this._isDeleted[n]!==e.DELETE&&t.add(this._inputLine[n]);return t.toCoordinateArray()}}],[{key:\"constructor_\",value:function(){this._inputLine=null,this._distanceTol=null,this._isDeleted=null,this._angleOrientation=ct.COUNTERCLOCKWISE;var t=arguments[0];this._inputLine=t}},{key:\"simplify\",value:function(t,n){return new e(t).simplify(n)}}]),e}();On.INIT=0,On.DELETE=1,On.KEEP=1,On.NUM_PTS_TO_CHECK=10;var bn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getCoordinates\",value:function(){return this._ptList.toArray(e.COORDINATE_ARRAY_TYPE)}},{key:\"setPrecisionModel\",value:function(t){this._precisionModel=t}},{key:\"addPt\",value:function(t){var e=new X(t);if(this._precisionModel.makePrecise(e),this.isRedundant(e))return null;this._ptList.add(e)}},{key:\"reverse\",value:function(){}},{key:\"addPts\",value:function(t,e){if(e)for(var n=0;n<t.length;n++)this.addPt(t[n]);else for(var i=t.length-1;i>=0;i--)this.addPt(t[i])}},{key:\"isRedundant\",value:function(t){if(this._ptList.size()<1)return!1;var e=this._ptList.get(this._ptList.size()-1);return t.distance(e)<this._minimimVertexDistance}},{key:\"toString\",value:function(){return(new ae).createLineString(this.getCoordinates()).toString()}},{key:\"closeRing\",value:function(){if(this._ptList.size()<1)return null;var t=new X(this._ptList.get(0)),e=this._ptList.get(this._ptList.size()-1);if(t.equals(e))return null;this._ptList.add(t)}},{key:\"setMinimumVertexDistance\",value:function(t){this._minimimVertexDistance=t}}],[{key:\"constructor_\",value:function(){this._ptList=null,this._precisionModel=null,this._minimimVertexDistance=0,this._ptList=new yt}}]),e}();bn.COORDINATE_ARRAY_TYPE=new Array(0).fill(null);var Mn=function(){function e(){t(this,e)}return n(e,null,[{key:\"toDegrees\",value:function(t){return 180*t/Math.PI}},{key:\"normalize\",value:function(t){for(;t>Math.PI;)t-=e.PI_TIMES_2;for(;t<=-Math.PI;)t+=e.PI_TIMES_2;return t}},{key:\"angle\",value:function(){if(1===arguments.length){var t=arguments[0];return Math.atan2(t.y,t.x)}if(2===arguments.length){var e=arguments[0],n=arguments[1],i=n.x-e.x,r=n.y-e.y;return Math.atan2(r,i)}}},{key:\"isAcute\",value:function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)>0}},{key:\"isObtuse\",value:function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)<0}},{key:\"interiorAngle\",value:function(t,n,i){var r=e.angle(n,t),s=e.angle(n,i);return Math.abs(s-r)}},{key:\"normalizePositive\",value:function(t){if(t<0){for(;t<0;)t+=e.PI_TIMES_2;t>=e.PI_TIMES_2&&(t=0)}else{for(;t>=e.PI_TIMES_2;)t-=e.PI_TIMES_2;t<0&&(t=0)}return t}},{key:\"angleBetween\",value:function(t,n,i){var r=e.angle(n,t),s=e.angle(n,i);return e.diff(r,s)}},{key:\"diff\",value:function(t,e){var n=null;return(n=t<e?e-t:t-e)>Math.PI&&(n=2*Math.PI-n),n}},{key:\"toRadians\",value:function(t){return t*Math.PI/180}},{key:\"getTurn\",value:function(t,n){var i=Math.sin(n-t);return i>0?e.COUNTERCLOCKWISE:i<0?e.CLOCKWISE:e.NONE}},{key:\"angleBetweenOriented\",value:function(t,n,i){var r=e.angle(n,t),s=e.angle(n,i)-r;return s<=-Math.PI?s+e.PI_TIMES_2:s>Math.PI?s-e.PI_TIMES_2:s}}]),e}();Mn.PI_TIMES_2=2*Math.PI,Mn.PI_OVER_2=Math.PI/2,Mn.PI_OVER_4=Math.PI/4,Mn.COUNTERCLOCKWISE=ct.COUNTERCLOCKWISE,Mn.CLOCKWISE=ct.CLOCKWISE,Mn.NONE=ct.COLLINEAR;var An=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"addNextSegment\",value:function(t,e){if(this._s0=this._s1,this._s1=this._s2,this._s2=t,this._seg0.setCoordinates(this._s0,this._s1),this.computeOffsetSegment(this._seg0,this._side,this._distance,this._offset0),this._seg1.setCoordinates(this._s1,this._s2),this.computeOffsetSegment(this._seg1,this._side,this._distance,this._offset1),this._s1.equals(this._s2))return null;var n=ct.index(this._s0,this._s1,this._s2),i=n===ct.CLOCKWISE&&this._side===$.LEFT||n===ct.COUNTERCLOCKWISE&&this._side===$.RIGHT;0===n?this.addCollinear(e):i?this.addOutsideTurn(n,e):this.addInsideTurn(n,e)}},{key:\"addLineEndCap\",value:function(t,e){var n=new En(t,e),i=new En;this.computeOffsetSegment(n,$.LEFT,this._distance,i);var r=new En;this.computeOffsetSegment(n,$.RIGHT,this._distance,r);var s=e.x-t.x,a=e.y-t.y,o=Math.atan2(a,s);switch(this._bufParams.getEndCapStyle()){case _.CAP_ROUND:this._segList.addPt(i.p1),this.addDirectedFillet(e,o+Math.PI/2,o-Math.PI/2,ct.CLOCKWISE,this._distance),this._segList.addPt(r.p1);break;case _.CAP_FLAT:this._segList.addPt(i.p1),this._segList.addPt(r.p1);break;case _.CAP_SQUARE:var u=new X;u.x=Math.abs(this._distance)*Math.cos(o),u.y=Math.abs(this._distance)*Math.sin(o);var l=new X(i.p1.x+u.x,i.p1.y+u.y),h=new X(r.p1.x+u.x,r.p1.y+u.y);this._segList.addPt(l),this._segList.addPt(h)}}},{key:\"getCoordinates\",value:function(){return this._segList.getCoordinates()}},{key:\"addMitreJoin\",value:function(t,e,n,i){var r=pt.intersection(e.p0,e.p1,n.p0,n.p1);if(null!==r&&(i<=0?1:r.distance(t)/Math.abs(i))<=this._bufParams.getMitreLimit())return this._segList.addPt(r),null;this.addLimitedMitreJoin(e,n,i,this._bufParams.getMitreLimit())}},{key:\"addOutsideTurn\",value:function(t,n){if(this._offset0.p1.distance(this._offset1.p0)<this._distance*e.OFFSET_SEGMENT_SEPARATION_FACTOR)return this._segList.addPt(this._offset0.p1),null;this._bufParams.getJoinStyle()===_.JOIN_MITRE?this.addMitreJoin(this._s1,this._offset0,this._offset1,this._distance):this._bufParams.getJoinStyle()===_.JOIN_BEVEL?this.addBevelJoin(this._offset0,this._offset1):(n&&this._segList.addPt(this._offset0.p1),this.addCornerFillet(this._s1,this._offset0.p1,this._offset1.p0,t,this._distance),this._segList.addPt(this._offset1.p0))}},{key:\"createSquare\",value:function(t){this._segList.addPt(new X(t.x+this._distance,t.y+this._distance)),this._segList.addPt(new X(t.x+this._distance,t.y-this._distance)),this._segList.addPt(new X(t.x-this._distance,t.y-this._distance)),this._segList.addPt(new X(t.x-this._distance,t.y+this._distance)),this._segList.closeRing()}},{key:\"addSegments\",value:function(t,e){this._segList.addPts(t,e)}},{key:\"addFirstSegment\",value:function(){this._segList.addPt(this._offset1.p0)}},{key:\"addCornerFillet\",value:function(t,e,n,i,r){var s=e.x-t.x,a=e.y-t.y,o=Math.atan2(a,s),u=n.x-t.x,l=n.y-t.y,h=Math.atan2(l,u);i===ct.CLOCKWISE?o<=h&&(o+=2*Math.PI):o>=h&&(o-=2*Math.PI),this._segList.addPt(e),this.addDirectedFillet(t,o,h,i,r),this._segList.addPt(n)}},{key:\"addLastSegment\",value:function(){this._segList.addPt(this._offset1.p1)}},{key:\"initSideSegments\",value:function(t,e,n){this._s1=t,this._s2=e,this._side=n,this._seg1.setCoordinates(t,e),this.computeOffsetSegment(this._seg1,n,this._distance,this._offset1)}},{key:\"addLimitedMitreJoin\",value:function(t,e,n,i){var r=this._seg0.p1,s=Mn.angle(r,this._seg0.p0),a=Mn.angleBetweenOriented(this._seg0.p0,r,this._seg1.p1)/2,o=Mn.normalize(s+a),u=Mn.normalize(o+Math.PI),l=i*n,h=n-l*Math.abs(Math.sin(a)),c=r.x+l*Math.cos(u),f=r.y+l*Math.sin(u),v=new X(c,f),g=new En(r,v),y=g.pointAlongOffset(1,h),d=g.pointAlongOffset(1,-h);this._side===$.LEFT?(this._segList.addPt(y),this._segList.addPt(d)):(this._segList.addPt(d),this._segList.addPt(y))}},{key:\"addDirectedFillet\",value:function(t,e,n,i,r){var s=i===ct.CLOCKWISE?-1:1,a=Math.abs(e-n),o=Math.trunc(a/this._filletAngleQuantum+.5);if(o<1)return null;for(var u=a/o,l=new X,h=0;h<o;h++){var c=e+s*h*u;l.x=t.x+r*Math.cos(c),l.y=t.y+r*Math.sin(c),this._segList.addPt(l)}}},{key:\"computeOffsetSegment\",value:function(t,e,n,i){var r=e===$.LEFT?1:-1,s=t.p1.x-t.p0.x,a=t.p1.y-t.p0.y,o=Math.sqrt(s*s+a*a),u=r*n*s/o,l=r*n*a/o;i.p0.x=t.p0.x-l,i.p0.y=t.p0.y+u,i.p1.x=t.p1.x-l,i.p1.y=t.p1.y+u}},{key:\"addInsideTurn\",value:function(t,n){if(this._li.computeIntersection(this._offset0.p0,this._offset0.p1,this._offset1.p0,this._offset1.p1),this._li.hasIntersection())this._segList.addPt(this._li.getIntersection(0));else if(this._hasNarrowConcaveAngle=!0,this._offset0.p1.distance(this._offset1.p0)<this._distance*e.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR)this._segList.addPt(this._offset0.p1);else{if(this._segList.addPt(this._offset0.p1),this._closingSegLengthFactor>0){var i=new X((this._closingSegLengthFactor*this._offset0.p1.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset0.p1.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(i);var r=new X((this._closingSegLengthFactor*this._offset1.p0.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset1.p0.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(r)}else this._segList.addPt(this._s1);this._segList.addPt(this._offset1.p0)}}},{key:\"createCircle\",value:function(t){var e=new X(t.x+this._distance,t.y);this._segList.addPt(e),this.addDirectedFillet(t,0,2*Math.PI,-1,this._distance),this._segList.closeRing()}},{key:\"addBevelJoin\",value:function(t,e){this._segList.addPt(t.p1),this._segList.addPt(e.p0)}},{key:\"init\",value:function(t){this._distance=t,this._maxCurveSegmentError=t*(1-Math.cos(this._filletAngleQuantum/2)),this._segList=new bn,this._segList.setPrecisionModel(this._precisionModel),this._segList.setMinimumVertexDistance(t*e.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)}},{key:\"addCollinear\",value:function(t){this._li.computeIntersection(this._s0,this._s1,this._s1,this._s2),this._li.getIntersectionNum()>=2&&(this._bufParams.getJoinStyle()===_.JOIN_BEVEL||this._bufParams.getJoinStyle()===_.JOIN_MITRE?(t&&this._segList.addPt(this._offset0.p1),this._segList.addPt(this._offset1.p0)):this.addCornerFillet(this._s1,this._offset0.p1,this._offset1.p0,ct.CLOCKWISE,this._distance))}},{key:\"closeRing\",value:function(){this._segList.closeRing()}},{key:\"hasNarrowConcaveAngle\",value:function(){return this._hasNarrowConcaveAngle}}],[{key:\"constructor_\",value:function(){this._maxCurveSegmentError=0,this._filletAngleQuantum=null,this._closingSegLengthFactor=1,this._segList=null,this._distance=0,this._precisionModel=null,this._bufParams=null,this._li=null,this._s0=null,this._s1=null,this._s2=null,this._seg0=new En,this._seg1=new En,this._offset0=new En,this._offset1=new En,this._side=0,this._hasNarrowConcaveAngle=!1;var t=arguments[0],n=arguments[1],i=arguments[2];this._precisionModel=t,this._bufParams=n,this._li=new Oe,this._filletAngleQuantum=Math.PI/2/n.getQuadrantSegments(),n.getQuadrantSegments()>=8&&n.getJoinStyle()===_.JOIN_ROUND&&(this._closingSegLengthFactor=e.MAX_CLOSING_SEG_LEN_FACTOR),this.init(i)}}]),e}();An.OFFSET_SEGMENT_SEPARATION_FACTOR=.001,An.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR=.001,An.CURVE_VERTEX_SNAP_DISTANCE_FACTOR=1e-6,An.MAX_CLOSING_SEG_LEN_FACTOR=80;var Pn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getOffsetCurve\",value:function(t,e){if(this._distance=e,0===e)return null;var n=e<0,i=Math.abs(e),r=this.getSegGen(i);t.length<=1?this.computePointCurve(t[0],r):this.computeOffsetCurve(t,n,r);var s=r.getCoordinates();return n&&jt.reverse(s),s}},{key:\"computeSingleSidedBufferCurve\",value:function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){n.addSegments(t,!0);var r=On.simplify(t,-i),s=r.length-1;n.initSideSegments(r[s],r[s-1],$.LEFT),n.addFirstSegment();for(var a=s-2;a>=0;a--)n.addNextSegment(r[a],!0)}else{n.addSegments(t,!1);var o=On.simplify(t,i),u=o.length-1;n.initSideSegments(o[0],o[1],$.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(o[l],!0)}n.addLastSegment(),n.closeRing()}},{key:\"computeRingBufferCurve\",value:function(t,e,n){var i=this.simplifyTolerance(this._distance);e===$.RIGHT&&(i=-i);var r=On.simplify(t,i),s=r.length-1;n.initSideSegments(r[s-1],r[0],e);for(var a=1;a<=s;a++){var o=1!==a;n.addNextSegment(r[a],o)}n.closeRing()}},{key:\"computeLineBufferCurve\",value:function(t,e){var n=this.simplifyTolerance(this._distance),i=On.simplify(t,n),r=i.length-1;e.initSideSegments(i[0],i[1],$.LEFT);for(var s=2;s<=r;s++)e.addNextSegment(i[s],!0);e.addLastSegment(),e.addLineEndCap(i[r-1],i[r]);var a=On.simplify(t,-n),o=a.length-1;e.initSideSegments(a[o],a[o-1],$.LEFT);for(var u=o-2;u>=0;u--)e.addNextSegment(a[u],!0);e.addLastSegment(),e.addLineEndCap(a[1],a[0]),e.closeRing()}},{key:\"computePointCurve\",value:function(t,e){switch(this._bufParams.getEndCapStyle()){case _.CAP_ROUND:e.createCircle(t);break;case _.CAP_SQUARE:e.createSquare(t)}}},{key:\"getLineCurve\",value:function(t,e){if(this._distance=e,this.isLineOffsetEmpty(e))return null;var n=Math.abs(e),i=this.getSegGen(n);if(t.length<=1)this.computePointCurve(t[0],i);else if(this._bufParams.isSingleSided()){var r=e<0;this.computeSingleSidedBufferCurve(t,r,i)}else this.computeLineBufferCurve(t,i);return i.getCoordinates()}},{key:\"getBufferParameters\",value:function(){return this._bufParams}},{key:\"simplifyTolerance\",value:function(t){return t*this._bufParams.getSimplifyFactor()}},{key:\"getRingCurve\",value:function(t,n,i){if(this._distance=i,t.length<=2)return this.getLineCurve(t,i);if(0===i)return e.copyCoordinates(t);var r=this.getSegGen(i);return this.computeRingBufferCurve(t,n,r),r.getCoordinates()}},{key:\"computeOffsetCurve\",value:function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){var r=On.simplify(t,-i),s=r.length-1;n.initSideSegments(r[s],r[s-1],$.LEFT),n.addFirstSegment();for(var a=s-2;a>=0;a--)n.addNextSegment(r[a],!0)}else{var o=On.simplify(t,i),u=o.length-1;n.initSideSegments(o[0],o[1],$.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(o[l],!0)}n.addLastSegment()}},{key:\"isLineOffsetEmpty\",value:function(t){return 0===t||t<0&&!this._bufParams.isSingleSided()}},{key:\"getSegGen\",value:function(t){return new An(this._precisionModel,this._bufParams,t)}}],[{key:\"constructor_\",value:function(){this._distance=0,this._precisionModel=null,this._bufParams=null;var t=arguments[0],e=arguments[1];this._precisionModel=t,this._bufParams=e}},{key:\"copyCoordinates\",value:function(t){for(var e=new Array(t.length).fill(null),n=0;n<e.length;n++)e[n]=new X(t[n]);return e}}]),e}(),Dn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"findStabbedSegments\",value:function(){if(1===arguments.length){for(var t=arguments[0],e=new yt,n=this._subgraphs.iterator();n.hasNext();){var i=n.next(),r=i.getEnvelope();t.y<r.getMinY()||t.y>r.getMaxY()||this.findStabbedSegments(t,i.getDirectedEdges(),e)}return e}if(3===arguments.length)if(rt(arguments[2],nt)&&arguments[0]instanceof X&&arguments[1]instanceof Je)for(var s=arguments[0],a=arguments[1],o=arguments[2],u=a.getEdge().getCoordinates(),l=0;l<u.length-1;l++){this._seg.p0=u[l],this._seg.p1=u[l+1],this._seg.p0.y>this._seg.p1.y&&this._seg.reverse();var h=Math.max(this._seg.p0.x,this._seg.p1.x);if(!(h<s.x)&&!(this._seg.isHorizontal()||s.y<this._seg.p0.y||s.y>this._seg.p1.y||ct.index(this._seg.p0,this._seg.p1,s)===ct.RIGHT)){var c=a.getDepth($.LEFT);this._seg.p0.equals(u[l])||(c=a.getDepth($.RIGHT));var f=new Fn(this._seg,c);o.add(f)}}else if(rt(arguments[2],nt)&&arguments[0]instanceof X&&rt(arguments[1],nt))for(var v=arguments[0],g=arguments[1],y=arguments[2],d=g.iterator();d.hasNext();){var _=d.next();_.isForward()&&this.findStabbedSegments(v,_,y)}}},{key:\"getDepth\",value:function(t){var e=this.findStabbedSegments(t);return 0===e.size()?0:on.min(e)._leftDepth}}],[{key:\"constructor_\",value:function(){this._subgraphs=null,this._seg=new En;var t=arguments[0];this._subgraphs=t}}]),e}(),Fn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"compareTo\",value:function(t){var e=t;if(this._upwardSeg.minX()>=e._upwardSeg.maxX())return 1;if(this._upwardSeg.maxX()<=e._upwardSeg.minX())return-1;var n=this._upwardSeg.orientationIndex(e._upwardSeg);return 0!==n||0!==(n=-1*e._upwardSeg.orientationIndex(this._upwardSeg))?n:this._upwardSeg.compareTo(e._upwardSeg)}},{key:\"compareX\",value:function(t,e){var n=t.p0.compareTo(e.p0);return 0!==n?n:t.p1.compareTo(e.p1)}},{key:\"toString\",value:function(){return this._upwardSeg.toString()}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._upwardSeg=null,this._leftDepth=null;var t=arguments[0],e=arguments[1];this._upwardSeg=new En(t),this._leftDepth=e}}]),e}();Dn.DepthSegment=Fn;var Gn=function(e){i(s,e);var r=c(s);function s(){var e;return t(this,s),e=r.call(this),s.constructor_.apply(l(e),arguments),e}return n(s,null,[{key:\"constructor_\",value:function(){p.constructor_.call(this,\"Projective point not representable on the Cartesian plane.\")}}]),s}(p),qn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getY\",value:function(){var t=this.y/this.w;if(A.isNaN(t)||A.isInfinite(t))throw new Gn;return t}},{key:\"getX\",value:function(){var t=this.x/this.w;if(A.isNaN(t)||A.isInfinite(t))throw new Gn;return t}},{key:\"getCoordinate\",value:function(){var t=new X;return t.x=this.getX(),t.y=this.getY(),t}}],[{key:\"constructor_\",value:function(){if(this.x=null,this.y=null,this.w=null,0===arguments.length)this.x=0,this.y=0,this.w=1;else if(1===arguments.length){var t=arguments[0];this.x=t.x,this.y=t.y,this.w=1}else if(2===arguments.length){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var n=arguments[0],i=arguments[1];this.x=n,this.y=i,this.w=1}else if(arguments[0]instanceof e&&arguments[1]instanceof e){var r=arguments[0],s=arguments[1];this.x=r.y*s.w-s.y*r.w,this.y=s.x*r.w-r.x*s.w,this.w=r.x*s.y-s.x*r.y}else if(arguments[0]instanceof X&&arguments[1]instanceof X){var a=arguments[0],o=arguments[1];this.x=a.y-o.y,this.y=o.x-a.x,this.w=a.x*o.y-o.x*a.y}}else if(3===arguments.length){var u=arguments[0],l=arguments[1],h=arguments[2];this.x=u,this.y=l,this.w=h}else if(4===arguments.length){var c=arguments[0],f=arguments[1],v=arguments[2],g=arguments[3],y=c.y-f.y,d=f.x-c.x,_=c.x*f.y-f.x*c.y,p=v.y-g.y,m=g.x-v.x,k=v.x*g.y-g.x*v.y;this.x=d*k-m*_,this.y=p*_-y*k,this.w=y*m-p*d}}}]),e}(),Yn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"area\",value:function(){return e.area(this.p0,this.p1,this.p2)}},{key:\"signedArea\",value:function(){return e.signedArea(this.p0,this.p1,this.p2)}},{key:\"interpolateZ\",value:function(t){if(null===t)throw new m(\"Supplied point is null.\");return e.interpolateZ(t,this.p0,this.p1,this.p2)}},{key:\"longestSideLength\",value:function(){return e.longestSideLength(this.p0,this.p1,this.p2)}},{key:\"isAcute\",value:function(){return e.isAcute(this.p0,this.p1,this.p2)}},{key:\"circumcentre\",value:function(){return e.circumcentre(this.p0,this.p1,this.p2)}},{key:\"area3D\",value:function(){return e.area3D(this.p0,this.p1,this.p2)}},{key:\"centroid\",value:function(){return e.centroid(this.p0,this.p1,this.p2)}},{key:\"inCentre\",value:function(){return e.inCentre(this.p0,this.p1,this.p2)}}],[{key:\"constructor_\",value:function(){this.p0=null,this.p1=null,this.p2=null;var t=arguments[0],e=arguments[1],n=arguments[2];this.p0=t,this.p1=e,this.p2=n}},{key:\"area\",value:function(t,e,n){return Math.abs(((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2)}},{key:\"signedArea\",value:function(t,e,n){return((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2}},{key:\"det\",value:function(t,e,n,i){return t*i-e*n}},{key:\"interpolateZ\",value:function(t,e,n,i){var r=e.x,s=e.y,a=n.x-r,o=i.x-r,u=n.y-s,l=i.y-s,h=a*l-o*u,c=t.x-r,f=t.y-s,v=(l*c-o*f)/h,g=(-u*c+a*f)/h;return e.getZ()+v*(n.getZ()-e.getZ())+g*(i.getZ()-e.getZ())}},{key:\"longestSideLength\",value:function(t,e,n){var i=t.distance(e),r=e.distance(n),s=n.distance(t),a=i;return r>a&&(a=r),s>a&&(a=s),a}},{key:\"circumcentreDD\",value:function(t,e,n){var i=ut.valueOf(t.x).subtract(n.x),r=ut.valueOf(t.y).subtract(n.y),s=ut.valueOf(e.x).subtract(n.x),a=ut.valueOf(e.y).subtract(n.y),o=ut.determinant(i,r,s,a).multiply(2),u=i.sqr().add(r.sqr()),l=s.sqr().add(a.sqr()),h=ut.determinant(r,u,a,l),c=ut.determinant(i,u,s,l),f=ut.valueOf(n.x).subtract(h.divide(o)).doubleValue(),v=ut.valueOf(n.y).add(c.divide(o)).doubleValue();return new X(f,v)}},{key:\"isAcute\",value:function(t,e,n){return!!Mn.isAcute(t,e,n)&&(!!Mn.isAcute(e,n,t)&&!!Mn.isAcute(n,t,e))}},{key:\"circumcentre\",value:function(t,n,i){var r=i.x,s=i.y,a=t.x-r,o=t.y-s,u=n.x-r,l=n.y-s,h=2*e.det(a,o,u,l),c=e.det(o,a*a+o*o,l,u*u+l*l),f=e.det(a,a*a+o*o,u,u*u+l*l);return new X(r-c/h,s+f/h)}},{key:\"perpendicularBisector\",value:function(t,e){var n=e.x-t.x,i=e.y-t.y,r=new qn(t.x+n/2,t.y+i/2,1),s=new qn(t.x-i+n/2,t.y+n+i/2,1);return new qn(r,s)}},{key:\"angleBisector\",value:function(t,e,n){var i=e.distance(t),r=i/(i+e.distance(n)),s=n.x-t.x,a=n.y-t.y;return new X(t.x+r*s,t.y+r*a)}},{key:\"area3D\",value:function(t,e,n){var i=e.x-t.x,r=e.y-t.y,s=e.getZ()-t.getZ(),a=n.x-t.x,o=n.y-t.y,u=n.getZ()-t.getZ(),l=r*u-s*o,h=s*a-i*u,c=i*o-r*a,f=l*l+h*h+c*c,v=Math.sqrt(f)/2;return v}},{key:\"centroid\",value:function(t,e,n){var i=(t.x+e.x+n.x)/3,r=(t.y+e.y+n.y)/3;return new X(i,r)}},{key:\"inCentre\",value:function(t,e,n){var i=e.distance(n),r=t.distance(n),s=t.distance(e),a=i+r+s,o=(i*t.x+r*e.x+s*n.x)/a,u=(i*t.y+r*e.y+s*n.y)/a;return new X(o,u)}}]),e}(),zn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"addRingSide\",value:function(t,e,n,i,r){if(0===e&&t.length<Xt.MINIMUM_VALID_SIZE)return null;var s=i,a=r;t.length>=Xt.MINIMUM_VALID_SIZE&&ct.isCCW(t)&&(s=r,a=i,n=$.opposite(n));var o=this._curveBuilder.getRingCurve(t,n,e);this.addCurve(o,s,a)}},{key:\"addRingBothSides\",value:function(t,e){this.addRingSide(t,e,$.LEFT,H.EXTERIOR,H.INTERIOR),this.addRingSide(t,e,$.RIGHT,H.INTERIOR,H.EXTERIOR)}},{key:\"addPoint\",value:function(t){if(this._distance<=0)return null;var e=t.getCoordinates(),n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,H.EXTERIOR,H.INTERIOR)}},{key:\"addPolygon\",value:function(t){var e=this._distance,n=$.LEFT;this._distance<0&&(e=-this._distance,n=$.RIGHT);var i=t.getExteriorRing(),r=jt.removeRepeatedPoints(i.getCoordinates());if(this._distance<0&&this.isErodedCompletely(i,this._distance))return null;if(this._distance<=0&&r.length<3)return null;this.addRingSide(r,e,n,H.EXTERIOR,H.INTERIOR);for(var s=0;s<t.getNumInteriorRing();s++){var a=t.getInteriorRingN(s),o=jt.removeRepeatedPoints(a.getCoordinates());this._distance>0&&this.isErodedCompletely(a,-this._distance)||this.addRingSide(o,e,$.opposite(n),H.INTERIOR,H.EXTERIOR)}}},{key:\"isTriangleErodedCompletely\",value:function(t,e){var n=new Yn(t[0],t[1],t[2]),i=n.inCentre();return xt.pointToSegment(i,n.p0,n.p1)<Math.abs(e)}},{key:\"addLineString\",value:function(t){if(this._curveBuilder.isLineOffsetEmpty(this._distance))return null;var e=jt.removeRepeatedPoints(t.getCoordinates());if(jt.isRing(e)&&!this._curveBuilder.getBufferParameters().isSingleSided())this.addRingBothSides(e,this._distance);else{var n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,H.EXTERIOR,H.INTERIOR)}}},{key:\"addCurve\",value:function(t,e,n){if(null===t||t.length<2)return null;var i=new In(t,new Pe(0,H.BOUNDARY,e,n));this._curveList.add(i)}},{key:\"getCurves\",value:function(){return this.add(this._inputGeom),this._curveList}},{key:\"add\",value:function(t){if(t.isEmpty())return null;if(t instanceof Dt)this.addPolygon(t);else if(t instanceof wt)this.addLineString(t);else if(t instanceof bt)this.addPoint(t);else if(t instanceof zt)this.addCollection(t);else if(t instanceof se)this.addCollection(t);else if(t instanceof te)this.addCollection(t);else{if(!(t instanceof Yt))throw new W(t.getGeometryType());this.addCollection(t)}}},{key:\"isErodedCompletely\",value:function(t,e){var n=t.getCoordinates();if(n.length<4)return e<0;if(4===n.length)return this.isTriangleErodedCompletely(n,e);var i=t.getEnvelopeInternal(),r=Math.min(i.getHeight(),i.getWidth());return e<0&&2*Math.abs(e)>r}},{key:\"addCollection\",value:function(t){for(var e=0;e<t.getNumGeometries();e++){var n=t.getGeometryN(e);this.add(n)}}}],[{key:\"constructor_\",value:function(){this._inputGeom=null,this._distance=null,this._curveBuilder=null,this._curveList=new yt;var t=arguments[0],e=arguments[1],n=arguments[2];this._inputGeom=t,this._distance=e,this._curveBuilder=n}}]),e}(),Xn=function(){function e(){t(this,e)}return n(e,[{key:\"locate\",value:function(t){}}]),e}(),Bn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"next\",value:function(){if(this._atStart)return this._atStart=!1,e.isAtomic(this._parent)&&this._index++,this._parent;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return this._subcollectionIterator.next();this._subcollectionIterator=null}if(this._index>=this._max)throw new j;var t=this._parent.getGeometryN(this._index++);return t instanceof Yt?(this._subcollectionIterator=new e(t),this._subcollectionIterator.next()):t}},{key:\"remove\",value:function(){throw new W(this.getClass().getName())}},{key:\"hasNext\",value:function(){if(this._atStart)return!0;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return!0;this._subcollectionIterator=null}return!(this._index>=this._max)}},{key:\"interfaces_\",get:function(){return[_n]}}],[{key:\"constructor_\",value:function(){this._parent=null,this._atStart=null,this._max=null,this._index=null,this._subcollectionIterator=null;var t=arguments[0];this._parent=t,this._atStart=!0,this._index=0,this._max=t.getNumGeometries()}},{key:\"isAtomic\",value:function(t){return!(t instanceof Yt)}}]),e}(),Un=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"locate\",value:function(t){return e.locate(t,this._geom)}},{key:\"interfaces_\",get:function(){return[Xn]}}],[{key:\"constructor_\",value:function(){this._geom=null;var t=arguments[0];this._geom=t}},{key:\"locatePointInPolygon\",value:function(t,n){if(n.isEmpty())return H.EXTERIOR;var i=n.getExteriorRing(),r=e.locatePointInRing(t,i);if(r!==H.INTERIOR)return r;for(var s=0;s<n.getNumInteriorRing();s++){var a=n.getInteriorRingN(s),o=e.locatePointInRing(t,a);if(o===H.BOUNDARY)return H.BOUNDARY;if(o===H.INTERIOR)return H.EXTERIOR}return H.INTERIOR}},{key:\"locatePointInRing\",value:function(t,e){return e.getEnvelopeInternal().intersects(t)?Me.locateInRing(t,e.getCoordinates()):H.EXTERIOR}},{key:\"containsPointInPolygon\",value:function(t,n){return H.EXTERIOR!==e.locatePointInPolygon(t,n)}},{key:\"locateInGeometry\",value:function(t,n){if(n instanceof Dt)return e.locatePointInPolygon(t,n);if(n instanceof Yt)for(var i=new Bn(n);i.hasNext();){var r=i.next();if(r!==n){var s=e.locateInGeometry(t,r);if(s!==H.EXTERIOR)return s}}return H.EXTERIOR}},{key:\"isContained\",value:function(t,n){return H.EXTERIOR!==e.locate(t,n)}},{key:\"locate\",value:function(t,n){return n.isEmpty()?H.EXTERIOR:n.getEnvelopeInternal().intersects(t)?e.locateInGeometry(t,n):H.EXTERIOR}}]),e}(),Vn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getNextCW\",value:function(t){this.getEdges();var e=this._edgeList.indexOf(t),n=e-1;return 0===e&&(n=this._edgeList.size()-1),this._edgeList.get(n)}},{key:\"propagateSideLabels\",value:function(t){for(var e=H.NONE,n=this.iterator();n.hasNext();){var i=n.next().getLabel();i.isArea(t)&&i.getLocation(t,$.LEFT)!==H.NONE&&(e=i.getLocation(t,$.LEFT))}if(e===H.NONE)return null;for(var r=e,s=this.iterator();s.hasNext();){var a=s.next(),o=a.getLabel();if(o.getLocation(t,$.ON)===H.NONE&&o.setLocation(t,$.ON,r),o.isArea(t)){var u=o.getLocation(t,$.LEFT),l=o.getLocation(t,$.RIGHT);if(l!==H.NONE){if(l!==r)throw new vt(\"side location conflict\",a.getCoordinate());u===H.NONE&&G.shouldNeverReachHere(\"found single null side (at \"+a.getCoordinate()+\")\"),r=u}else G.isTrue(o.getLocation(t,$.LEFT)===H.NONE,\"found single null side\"),o.setLocation(t,$.RIGHT,r),o.setLocation(t,$.LEFT,r)}}}},{key:\"getCoordinate\",value:function(){var t=this.iterator();return t.hasNext()?t.next().getCoordinate():null}},{key:\"print\",value:function(t){mt.out.println(\"EdgeEndStar: \"+this.getCoordinate());for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"isAreaLabelsConsistent\",value:function(t){return this.computeEdgeEndLabels(t.getBoundaryNodeRule()),this.checkAreaLabelsConsistent(0)}},{key:\"checkAreaLabelsConsistent\",value:function(t){var e=this.getEdges();if(e.size()<=0)return!0;var n=e.size()-1,i=e.get(n).getLabel().getLocation(t,$.LEFT);G.isTrue(i!==H.NONE,\"Found unlabelled area edge\");for(var r=i,s=this.iterator();s.hasNext();){var a=s.next().getLabel();G.isTrue(a.isArea(t),\"Found non-area edge\");var o=a.getLocation(t,$.LEFT),u=a.getLocation(t,$.RIGHT);if(o===u)return!1;if(u!==r)return!1;r=o}return!0}},{key:\"findIndex\",value:function(t){this.iterator();for(var e=0;e<this._edgeList.size();e++){if(this._edgeList.get(e)===t)return e}return-1}},{key:\"iterator\",value:function(){return this.getEdges().iterator()}},{key:\"getEdges\",value:function(){return null===this._edgeList&&(this._edgeList=new yt(this._edgeMap.values())),this._edgeList}},{key:\"getLocation\",value:function(t,e,n){return this._ptInAreaLocation[t]===H.NONE&&(this._ptInAreaLocation[t]=Un.locate(e,n[t].getGeometry())),this._ptInAreaLocation[t]}},{key:\"toString\",value:function(){var t=new st;t.append(\"EdgeEndStar: \"+this.getCoordinate()),t.append(\"\\n\");for(var e=this.iterator();e.hasNext();){var n=e.next();t.append(n),t.append(\"\\n\")}return t.toString()}},{key:\"computeEdgeEndLabels\",value:function(t){for(var e=this.iterator();e.hasNext();){e.next().computeLabel(t)}}},{key:\"computeLabelling\",value:function(t){this.computeEdgeEndLabels(t[0].getBoundaryNodeRule()),this.propagateSideLabels(0),this.propagateSideLabels(1);for(var e=[!1,!1],n=this.iterator();n.hasNext();)for(var i=n.next().getLabel(),r=0;r<2;r++)i.isLine(r)&&i.getLocation(r)===H.BOUNDARY&&(e[r]=!0);for(var s=this.iterator();s.hasNext();)for(var a=s.next(),o=a.getLabel(),u=0;u<2;u++)if(o.isAnyNull(u)){var l=H.NONE;if(e[u])l=H.EXTERIOR;else{var h=a.getCoordinate();l=this.getLocation(u,h,t)}o.setAllLocationsIfNull(u,l)}}},{key:\"getDegree\",value:function(){return this._edgeMap.size()}},{key:\"insertEdgeEnd\",value:function(t,e){this._edgeMap.put(t,e),this._edgeList=null}}],[{key:\"constructor_\",value:function(){this._edgeMap=new Ze,this._edgeList=null,this._ptInAreaLocation=[H.NONE,H.NONE]}}]),e}(),Hn=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"linkResultDirectedEdges\",value:function(){this.getResultAreaEdges();for(var t=null,e=null,n=this._SCANNING_FOR_INCOMING,i=0;i<this._resultAreaEdgeList.size();i++){var r=this._resultAreaEdgeList.get(i),s=r.getSym();if(r.getLabel().isArea())switch(null===t&&r.isInResult()&&(t=r),n){case this._SCANNING_FOR_INCOMING:if(!s.isInResult())continue;e=s,n=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(!r.isInResult())continue;e.setNext(r),n=this._SCANNING_FOR_INCOMING}}if(n===this._LINKING_TO_OUTGOING){if(null===t)throw new vt(\"no outgoing dirEdge found\",this.getCoordinate());G.isTrue(t.isInResult(),\"unable to link last incoming dirEdge\"),e.setNext(t)}}},{key:\"insert\",value:function(t){var e=t;this.insertEdgeEnd(e,e)}},{key:\"getRightmostEdge\",value:function(){var t=this.getEdges(),e=t.size();if(e<1)return null;var n=t.get(0);if(1===e)return n;var i=t.get(e-1),r=n.getQuadrant(),s=i.getQuadrant();return We.isNorthern(r)&&We.isNorthern(s)?n:We.isNorthern(r)||We.isNorthern(s)?0!==n.getDy()?n:0!==i.getDy()?i:(G.shouldNeverReachHere(\"found two horizontal edges incident on node\"),null):i}},{key:\"print\",value:function(t){mt.out.println(\"DirectedEdgeStar: \"+this.getCoordinate());for(var e=this.iterator();e.hasNext();){var n=e.next();t.print(\"out \"),n.print(t),t.println(),t.print(\"in \"),n.getSym().print(t),t.println()}}},{key:\"getResultAreaEdges\",value:function(){if(null!==this._resultAreaEdgeList)return this._resultAreaEdgeList;this._resultAreaEdgeList=new yt;for(var t=this.iterator();t.hasNext();){var e=t.next();(e.isInResult()||e.getSym().isInResult())&&this._resultAreaEdgeList.add(e)}return this._resultAreaEdgeList}},{key:\"updateLabelling\",value:function(t){for(var e=this.iterator();e.hasNext();){var n=e.next().getLabel();n.setAllLocationsIfNull(0,t.getLocation(0)),n.setAllLocationsIfNull(1,t.getLocation(1))}}},{key:\"linkAllDirectedEdges\",value:function(){this.getEdges();for(var t=null,e=null,n=this._edgeList.size()-1;n>=0;n--){var i=this._edgeList.get(n),r=i.getSym();null===e&&(e=r),null!==t&&r.setNext(t),t=i}e.setNext(t)}},{key:\"computeDepths\",value:function(){if(1===arguments.length){var t=arguments[0],e=this.findIndex(t),n=t.getDepth($.LEFT),i=t.getDepth($.RIGHT),r=this.computeDepths(e+1,this._edgeList.size(),n),s=this.computeDepths(0,e,r);if(s!==i)throw new vt(\"depth mismatch at \"+t.getCoordinate())}else if(3===arguments.length){for(var a=arguments[0],o=arguments[1],u=arguments[2],l=u,h=a;h<o;h++){var c=this._edgeList.get(h);c.setEdgeDepths($.RIGHT,l),l=c.getDepth($.LEFT)}return l}}},{key:\"mergeSymLabels\",value:function(){for(var t=this.iterator();t.hasNext();){var e=t.next();e.getLabel().merge(e.getSym().getLabel())}}},{key:\"linkMinimalDirectedEdges\",value:function(t){for(var e=null,n=null,i=this._SCANNING_FOR_INCOMING,r=this._resultAreaEdgeList.size()-1;r>=0;r--){var s=this._resultAreaEdgeList.get(r),a=s.getSym();switch(null===e&&s.getEdgeRing()===t&&(e=s),i){case this._SCANNING_FOR_INCOMING:if(a.getEdgeRing()!==t)continue;n=a,i=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(s.getEdgeRing()!==t)continue;n.setNextMin(s),i=this._SCANNING_FOR_INCOMING}}i===this._LINKING_TO_OUTGOING&&(G.isTrue(null!==e,\"found null for first outgoing dirEdge\"),G.isTrue(e.getEdgeRing()===t,\"unable to link last incoming dirEdge\"),n.setNextMin(e))}},{key:\"getOutgoingDegree\",value:function(){if(0===arguments.length){for(var t=0,e=this.iterator();e.hasNext();){var n=e.next();n.isInResult()&&t++}return t}if(1===arguments.length){for(var i=arguments[0],r=0,s=this.iterator();s.hasNext();){var a=s.next();a.getEdgeRing()===i&&r++}return r}}},{key:\"getLabel\",value:function(){return this._label}},{key:\"findCoveredLineEdges\",value:function(){for(var t=H.NONE,e=this.iterator();e.hasNext();){var n=e.next(),i=n.getSym();if(!n.isLineEdge()){if(n.isInResult()){t=H.INTERIOR;break}if(i.isInResult()){t=H.EXTERIOR;break}}}if(t===H.NONE)return null;for(var r=t,s=this.iterator();s.hasNext();){var a=s.next(),o=a.getSym();a.isLineEdge()?a.getEdge().setCovered(r===H.INTERIOR):(a.isInResult()&&(r=H.EXTERIOR),o.isInResult()&&(r=H.INTERIOR))}}},{key:\"computeLabelling\",value:function(t){f(r(a.prototype),\"computeLabelling\",this).call(this,t),this._label=new Pe(H.NONE);for(var e=this.iterator();e.hasNext();)for(var n=e.next().getEdge().getLabel(),i=0;i<2;i++){var s=n.getLocation(i);s!==H.INTERIOR&&s!==H.BOUNDARY||this._label.setLocation(i,H.INTERIOR)}}}],[{key:\"constructor_\",value:function(){this._resultAreaEdgeList=null,this._label=null,this._SCANNING_FOR_INCOMING=1,this._LINKING_TO_OUTGOING=2}}]),a}(Vn),Zn=function(e){i(s,e);var r=c(s);function s(){return t(this,s),r.call(this)}return n(s,[{key:\"createNode\",value:function(t){return new Ye(t,new Hn)}}]),s}(Qe),jn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"compareTo\",value:function(t){var n=t;return e.compareOriented(this._pts,this._orientation,n._pts,n._orientation)}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._pts=null,this._orientation=null;var t=arguments[0];this._pts=t,this._orientation=e.orientation(t)}},{key:\"orientation\",value:function(t){return 1===jt.increasingDirection(t)}},{key:\"compareOriented\",value:function(t,e,n,i){for(var r=e?1:-1,s=i?1:-1,a=e?t.length:-1,o=i?n.length:-1,u=e?0:t.length-1,l=i?0:n.length-1;;){var h=t[u].compareTo(n[l]);if(0!==h)return h;var c=(u+=r)===a,f=(l+=s)===o;if(c&&!f)return-1;if(!c&&f)return 1;if(c&&f)return 0}}}]),e}(),Wn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"print\",value:function(t){t.print(\"MULTILINESTRING ( \");for(var e=0;e<this._edges.size();e++){var n=this._edges.get(e);e>0&&t.print(\",\"),t.print(\"(\");for(var i=n.getCoordinates(),r=0;r<i.length;r++)r>0&&t.print(\",\"),t.print(i[r].x+\" \"+i[r].y);t.println(\")\")}t.print(\") \")}},{key:\"addAll\",value:function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next())}},{key:\"findEdgeIndex\",value:function(t){for(var e=0;e<this._edges.size();e++)if(this._edges.get(e).equals(t))return e;return-1}},{key:\"iterator\",value:function(){return this._edges.iterator()}},{key:\"getEdges\",value:function(){return this._edges}},{key:\"get\",value:function(t){return this._edges.get(t)}},{key:\"findEqualEdge\",value:function(t){var e=new jn(t.getCoordinates());return this._ocaMap.get(e)}},{key:\"add\",value:function(t){this._edges.add(t);var e=new jn(t.getCoordinates());this._ocaMap.put(e,t)}}],[{key:\"constructor_\",value:function(){this._edges=new yt,this._ocaMap=new Ze}}]),e}(),Kn=function(){function e(){t(this,e)}return n(e,[{key:\"processIntersections\",value:function(t,e,n,i){}},{key:\"isDone\",value:function(){}}]),e}(),Jn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"isTrivialIntersection\",value:function(t,n,i,r){if(t===i&&1===this._li.getIntersectionNum()){if(e.isAdjacentSegments(n,r))return!0;if(t.isClosed()){var s=t.size()-1;if(0===n&&r===s||0===r&&n===s)return!0}}return!1}},{key:\"getProperIntersectionPoint\",value:function(){return this._properIntersectionPoint}},{key:\"hasProperInteriorIntersection\",value:function(){return this._hasProperInterior}},{key:\"getLineIntersector\",value:function(){return this._li}},{key:\"hasProperIntersection\",value:function(){return this._hasProper}},{key:\"processIntersections\",value:function(t,e,n,i){if(t===n&&e===i)return null;this.numTests++;var r=t.getCoordinates()[e],s=t.getCoordinates()[e+1],a=n.getCoordinates()[i],o=n.getCoordinates()[i+1];this._li.computeIntersection(r,s,a,o),this._li.hasIntersection()&&(this.numIntersections++,this._li.isInteriorIntersection()&&(this.numInteriorIntersections++,this._hasInterior=!0),this.isTrivialIntersection(t,e,n,i)||(this._hasIntersection=!0,t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1),this._li.isProper()&&(this.numProperIntersections++,this._hasProper=!0,this._hasProperInterior=!0)))}},{key:\"hasIntersection\",value:function(){return this._hasIntersection}},{key:\"isDone\",value:function(){return!1}},{key:\"hasInteriorIntersection\",value:function(){return this._hasInterior}},{key:\"interfaces_\",get:function(){return[Kn]}}],[{key:\"constructor_\",value:function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._hasInterior=!1,this._properIntersectionPoint=null,this._li=null,this._isSelfIntersection=null,this.numIntersections=0,this.numInteriorIntersections=0,this.numProperIntersections=0,this.numTests=0;var t=arguments[0];this._li=t}},{key:\"isAdjacentSegments\",value:function(t,e){return 1===Math.abs(t-e)}}]),e}(),Qn=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getSegmentIndex\",value:function(){return this.segmentIndex}},{key:\"getCoordinate\",value:function(){return this.coord}},{key:\"print\",value:function(t){t.print(this.coord),t.print(\" seg # = \"+this.segmentIndex),t.println(\" dist = \"+this.dist)}},{key:\"compareTo\",value:function(t){var e=t;return this.compare(e.segmentIndex,e.dist)}},{key:\"isEndPoint\",value:function(t){return 0===this.segmentIndex&&0===this.dist||this.segmentIndex===t}},{key:\"toString\",value:function(){return this.coord+\" seg # = \"+this.segmentIndex+\" dist = \"+this.dist}},{key:\"getDistance\",value:function(){return this.dist}},{key:\"compare\",value:function(t,e){return this.segmentIndex<t?-1:this.segmentIndex>t?1:this.dist<e?-1:this.dist>e?1:0}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this.coord=null,this.segmentIndex=null,this.dist=null;var t=arguments[0],e=arguments[1],n=arguments[2];this.coord=new X(t),this.segmentIndex=e,this.dist=n}}]),e}(),$n=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"print\",value:function(t){t.println(\"Intersections:\");for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"iterator\",value:function(){return this._nodeMap.values().iterator()}},{key:\"addSplitEdges\",value:function(t){this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}}},{key:\"addEndpoints\",value:function(){var t=this.edge.pts.length-1;this.add(this.edge.pts[0],0,0),this.add(this.edge.pts[t],t,0)}},{key:\"createSplitEdge\",value:function(t,e){var n=e.segmentIndex-t.segmentIndex+2,i=this.edge.pts[e.segmentIndex],r=e.dist>0||!e.coord.equals2D(i);r||n--;var s=new Array(n).fill(null),a=0;s[a++]=new X(t.coord);for(var o=t.segmentIndex+1;o<=e.segmentIndex;o++)s[a++]=this.edge.pts[o];return r&&(s[a]=e.coord),new si(s,new Pe(this.edge._label))}},{key:\"add\",value:function(t,e,n){var i=new Qn(t,e,n),r=this._nodeMap.get(i);return null!==r?r:(this._nodeMap.put(i,i),i)}},{key:\"isIntersection\",value:function(t){for(var e=this.iterator();e.hasNext();){if(e.next().coord.equals(t))return!0}return!1}}],[{key:\"constructor_\",value:function(){this._nodeMap=new Ze,this.edge=null;var t=arguments[0];this.edge=t}}]),e}(),ti=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"isIntersects\",value:function(){return!this.isDisjoint()}},{key:\"isCovers\",value:function(){return(e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])||e.isTrue(this._matrix[H.INTERIOR][H.BOUNDARY])||e.isTrue(this._matrix[H.BOUNDARY][H.INTERIOR])||e.isTrue(this._matrix[H.BOUNDARY][H.BOUNDARY]))&&this._matrix[H.EXTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.BOUNDARY]===Lt.FALSE}},{key:\"isCoveredBy\",value:function(){return(e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])||e.isTrue(this._matrix[H.INTERIOR][H.BOUNDARY])||e.isTrue(this._matrix[H.BOUNDARY][H.INTERIOR])||e.isTrue(this._matrix[H.BOUNDARY][H.BOUNDARY]))&&this._matrix[H.INTERIOR][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.EXTERIOR]===Lt.FALSE}},{key:\"set\",value:function(){if(1===arguments.length)for(var t=arguments[0],e=0;e<t.length;e++){var n=Math.trunc(e/3),i=e%3;this._matrix[n][i]=Lt.toDimensionValue(t.charAt(e))}else if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2];this._matrix[r][s]=a}}},{key:\"isContains\",value:function(){return e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&this._matrix[H.EXTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.BOUNDARY]===Lt.FALSE}},{key:\"setAtLeast\",value:function(){if(1===arguments.length)for(var t=arguments[0],e=0;e<t.length;e++){var n=Math.trunc(e/3),i=e%3;this.setAtLeast(n,i,Lt.toDimensionValue(t.charAt(e)))}else if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2];this._matrix[r][s]<a&&(this._matrix[r][s]=a)}}},{key:\"setAtLeastIfValid\",value:function(t,e,n){t>=0&&e>=0&&this.setAtLeast(t,e,n)}},{key:\"isWithin\",value:function(){return e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&this._matrix[H.INTERIOR][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.EXTERIOR]===Lt.FALSE}},{key:\"isTouches\",value:function(t,n){return t>n?this.isTouches(n,t):(t===Lt.A&&n===Lt.A||t===Lt.L&&n===Lt.L||t===Lt.L&&n===Lt.A||t===Lt.P&&n===Lt.A||t===Lt.P&&n===Lt.L)&&(this._matrix[H.INTERIOR][H.INTERIOR]===Lt.FALSE&&(e.isTrue(this._matrix[H.INTERIOR][H.BOUNDARY])||e.isTrue(this._matrix[H.BOUNDARY][H.INTERIOR])||e.isTrue(this._matrix[H.BOUNDARY][H.BOUNDARY])))}},{key:\"isOverlaps\",value:function(t,n){return t===Lt.P&&n===Lt.P||t===Lt.A&&n===Lt.A?e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&e.isTrue(this._matrix[H.INTERIOR][H.EXTERIOR])&&e.isTrue(this._matrix[H.EXTERIOR][H.INTERIOR]):t===Lt.L&&n===Lt.L&&(1===this._matrix[H.INTERIOR][H.INTERIOR]&&e.isTrue(this._matrix[H.INTERIOR][H.EXTERIOR])&&e.isTrue(this._matrix[H.EXTERIOR][H.INTERIOR]))}},{key:\"isEquals\",value:function(t,n){return t===n&&(e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&this._matrix[H.INTERIOR][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.BOUNDARY]===Lt.FALSE)}},{key:\"toString\",value:function(){for(var t=new Jt(\"123456789\"),e=0;e<3;e++)for(var n=0;n<3;n++)t.setCharAt(3*e+n,Lt.toDimensionSymbol(this._matrix[e][n]));return t.toString()}},{key:\"setAll\",value:function(t){for(var e=0;e<3;e++)for(var n=0;n<3;n++)this._matrix[e][n]=t}},{key:\"get\",value:function(t,e){return this._matrix[t][e]}},{key:\"transpose\",value:function(){var t=this._matrix[1][0];return this._matrix[1][0]=this._matrix[0][1],this._matrix[0][1]=t,t=this._matrix[2][0],this._matrix[2][0]=this._matrix[0][2],this._matrix[0][2]=t,t=this._matrix[2][1],this._matrix[2][1]=this._matrix[1][2],this._matrix[1][2]=t,this}},{key:\"matches\",value:function(t){if(9!==t.length)throw new m(\"Should be length 9: \"+t);for(var n=0;n<3;n++)for(var i=0;i<3;i++)if(!e.matches(this._matrix[n][i],t.charAt(3*n+i)))return!1;return!0}},{key:\"add\",value:function(t){for(var e=0;e<3;e++)for(var n=0;n<3;n++)this.setAtLeast(e,n,t.get(e,n))}},{key:\"isDisjoint\",value:function(){return this._matrix[H.INTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.INTERIOR][H.BOUNDARY]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.INTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.BOUNDARY]===Lt.FALSE}},{key:\"isCrosses\",value:function(t,n){return t===Lt.P&&n===Lt.L||t===Lt.P&&n===Lt.A||t===Lt.L&&n===Lt.A?e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&e.isTrue(this._matrix[H.INTERIOR][H.EXTERIOR]):t===Lt.L&&n===Lt.P||t===Lt.A&&n===Lt.P||t===Lt.A&&n===Lt.L?e.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&e.isTrue(this._matrix[H.EXTERIOR][H.INTERIOR]):t===Lt.L&&n===Lt.L&&0===this._matrix[H.INTERIOR][H.INTERIOR]}},{key:\"interfaces_\",get:function(){return[I]}}],[{key:\"constructor_\",value:function(){if(this._matrix=null,0===arguments.length)this._matrix=Array(3).fill().map((function(){return Array(3)})),this.setAll(Lt.FALSE);else if(1===arguments.length)if(\"string\"==typeof arguments[0]){var t=arguments[0];e.constructor_.call(this),this.set(t)}else if(arguments[0]instanceof e){var n=arguments[0];e.constructor_.call(this),this._matrix[H.INTERIOR][H.INTERIOR]=n._matrix[H.INTERIOR][H.INTERIOR],this._matrix[H.INTERIOR][H.BOUNDARY]=n._matrix[H.INTERIOR][H.BOUNDARY],this._matrix[H.INTERIOR][H.EXTERIOR]=n._matrix[H.INTERIOR][H.EXTERIOR],this._matrix[H.BOUNDARY][H.INTERIOR]=n._matrix[H.BOUNDARY][H.INTERIOR],this._matrix[H.BOUNDARY][H.BOUNDARY]=n._matrix[H.BOUNDARY][H.BOUNDARY],this._matrix[H.BOUNDARY][H.EXTERIOR]=n._matrix[H.BOUNDARY][H.EXTERIOR],this._matrix[H.EXTERIOR][H.INTERIOR]=n._matrix[H.EXTERIOR][H.INTERIOR],this._matrix[H.EXTERIOR][H.BOUNDARY]=n._matrix[H.EXTERIOR][H.BOUNDARY],this._matrix[H.EXTERIOR][H.EXTERIOR]=n._matrix[H.EXTERIOR][H.EXTERIOR]}}},{key:\"matches\",value:function(){if(Number.isInteger(arguments[0])&&\"string\"==typeof arguments[1]){var t=arguments[0],n=arguments[1];return n===Lt.SYM_DONTCARE||(n===Lt.SYM_TRUE&&(t>=0||t===Lt.TRUE)||(n===Lt.SYM_FALSE&&t===Lt.FALSE||(n===Lt.SYM_P&&t===Lt.P||(n===Lt.SYM_L&&t===Lt.L||n===Lt.SYM_A&&t===Lt.A))))}if(\"string\"==typeof arguments[0]&&\"string\"==typeof arguments[1]){var i=arguments[0],r=arguments[1],s=new e(i);return s.matches(r)}}},{key:\"isTrue\",value:function(t){return t>=0||t===Lt.TRUE}}]),e}(),ei=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"size\",value:function(){return this._size}},{key:\"addAll\",value:function(t){return null===t||0===t.length?null:(this.ensureCapacity(this._size+t.length),mt.arraycopy(t,0,this._data,this._size,t.length),void(this._size+=t.length))}},{key:\"ensureCapacity\",value:function(t){if(t<=this._data.length)return null;var e=Math.max(t,2*this._data.length);this._data=At.copyOf(this._data,e)}},{key:\"toArray\",value:function(){var t=new Array(this._size).fill(null);return mt.arraycopy(this._data,0,t,0,this._size),t}},{key:\"add\",value:function(t){this.ensureCapacity(this._size+1),this._data[this._size]=t,++this._size}}],[{key:\"constructor_\",value:function(){if(this._data=null,this._size=0,0===arguments.length)e.constructor_.call(this,10);else if(1===arguments.length){var t=arguments[0];this._data=new Array(t).fill(null)}}}]),e}(),ni=function(){function e(){t(this,e)}return n(e,[{key:\"getChainStartIndices\",value:function(t){var e=0,n=new ei(Math.trunc(t.length/2));n.add(e);do{var i=this.findChainEnd(t,e);n.add(i),e=i}while(e<t.length-1);return n.toArray()}},{key:\"findChainEnd\",value:function(t,e){for(var n=We.quadrant(t[e],t[e+1]),i=e+1;i<t.length;){if(We.quadrant(t[i-1],t[i])!==n)break;i++}return i-1}},{key:\"OLDgetChainStartIndices\",value:function(t){var n=0,i=new yt;i.add(n);do{var r=this.findChainEnd(t,n);i.add(r),n=r}while(n<t.length-1);return e.toIntArray(i)}}],[{key:\"toIntArray\",value:function(t){for(var e=new Array(t.size()).fill(null),n=0;n<e.length;n++)e[n]=t.get(n).intValue();return e}}]),e}(),ii=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getCoordinates\",value:function(){return this.pts}},{key:\"getMaxX\",value:function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return e>n?e:n}},{key:\"getMinX\",value:function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return e<n?e:n}},{key:\"computeIntersectsForChain\",value:function(){if(4===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this.computeIntersectsForChain(this.startIndex[t],this.startIndex[t+1],e,e.startIndex[n],e.startIndex[n+1],i)}else if(6===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3],u=arguments[4],l=arguments[5];if(s-r==1&&u-o==1)return l.addIntersections(this.e,r,a.e,o),null;if(!this.overlaps(r,s,a,o,u))return null;var h=Math.trunc((r+s)/2),c=Math.trunc((o+u)/2);r<h&&(o<c&&this.computeIntersectsForChain(r,h,a,o,c,l),c<u&&this.computeIntersectsForChain(r,h,a,c,u,l)),h<s&&(o<c&&this.computeIntersectsForChain(h,s,a,o,c,l),c<u&&this.computeIntersectsForChain(h,s,a,c,u,l))}}},{key:\"overlaps\",value:function(t,e,n,i,r){return U.intersects(this.pts[t],this.pts[e],n.pts[i],n.pts[r])}},{key:\"getStartIndexes\",value:function(){return this.startIndex}},{key:\"computeIntersects\",value:function(t,e){for(var n=0;n<this.startIndex.length-1;n++)for(var i=0;i<t.startIndex.length-1;i++)this.computeIntersectsForChain(n,t,i,e)}}],[{key:\"constructor_\",value:function(){this.e=null,this.pts=null,this.startIndex=null;var t=arguments[0];this.e=t,this.pts=t.getCoordinates();var e=new ni;this.startIndex=e.getChainStartIndices(this.pts)}}]),e}(),ri=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"getDepth\",value:function(t,e){return this._depth[t][e]}},{key:\"setDepth\",value:function(t,e,n){this._depth[t][e]=n}},{key:\"isNull\",value:function(){if(0===arguments.length){for(var t=0;t<2;t++)for(var n=0;n<3;n++)if(this._depth[t][n]!==e.NULL_VALUE)return!1;return!0}if(1===arguments.length){var i=arguments[0];return this._depth[i][1]===e.NULL_VALUE}if(2===arguments.length){var r=arguments[0],s=arguments[1];return this._depth[r][s]===e.NULL_VALUE}}},{key:\"normalize\",value:function(){for(var t=0;t<2;t++)if(!this.isNull(t)){var e=this._depth[t][1];this._depth[t][2]<e&&(e=this._depth[t][2]),e<0&&(e=0);for(var n=1;n<3;n++){var i=0;this._depth[t][n]>e&&(i=1),this._depth[t][n]=i}}}},{key:\"getDelta\",value:function(t){return this._depth[t][$.RIGHT]-this._depth[t][$.LEFT]}},{key:\"getLocation\",value:function(t,e){return this._depth[t][e]<=0?H.EXTERIOR:H.INTERIOR}},{key:\"toString\",value:function(){return\"A: \"+this._depth[0][1]+\",\"+this._depth[0][2]+\" B: \"+this._depth[1][1]+\",\"+this._depth[1][2]}},{key:\"add\",value:function(){if(1===arguments.length)for(var t=arguments[0],n=0;n<2;n++)for(var i=1;i<3;i++){var r=t.getLocation(n,i);r!==H.EXTERIOR&&r!==H.INTERIOR||(this.isNull(n,i)?this._depth[n][i]=e.depthAtLocation(r):this._depth[n][i]+=e.depthAtLocation(r))}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];o===H.INTERIOR&&this._depth[s][a]++}}}],[{key:\"constructor_\",value:function(){this._depth=Array(2).fill().map((function(){return Array(3)}));for(var t=0;t<2;t++)for(var n=0;n<3;n++)this._depth[t][n]=e.NULL_VALUE}},{key:\"depthAtLocation\",value:function(t){return t===H.EXTERIOR?0:t===H.INTERIOR?1:e.NULL_VALUE}}]),e}();ri.NULL_VALUE=-1;var si=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"getDepth\",value:function(){return this._depth}},{key:\"getCollapsedEdge\",value:function(){var t=new Array(2).fill(null);return t[0]=this.pts[0],t[1]=this.pts[1],new a(t,Pe.toLineLabel(this._label))}},{key:\"isIsolated\",value:function(){return this._isIsolated}},{key:\"getCoordinates\",value:function(){return this.pts}},{key:\"setIsolated\",value:function(t){this._isIsolated=t}},{key:\"setName\",value:function(t){this._name=t}},{key:\"equals\",value:function(t){if(!(t instanceof a))return!1;var e=t;if(this.pts.length!==e.pts.length)return!1;for(var n=!0,i=!0,r=this.pts.length,s=0;s<this.pts.length;s++)if(this.pts[s].equals2D(e.pts[s])||(n=!1),this.pts[s].equals2D(e.pts[--r])||(i=!1),!n&&!i)return!1;return!0}},{key:\"getCoordinate\",value:function(){if(0===arguments.length)return this.pts.length>0?this.pts[0]:null;if(1===arguments.length){var t=arguments[0];return this.pts[t]}}},{key:\"print\",value:function(t){t.print(\"edge \"+this._name+\": \"),t.print(\"LINESTRING (\");for(var e=0;e<this.pts.length;e++)e>0&&t.print(\",\"),t.print(this.pts[e].x+\" \"+this.pts[e].y);t.print(\") \"+this._label+\" \"+this._depthDelta)}},{key:\"computeIM\",value:function(t){a.updateIM(this._label,t)}},{key:\"isCollapsed\",value:function(){return!!this._label.isArea()&&(3===this.pts.length&&!!this.pts[0].equals(this.pts[2]))}},{key:\"isClosed\",value:function(){return this.pts[0].equals(this.pts[this.pts.length-1])}},{key:\"getMaximumSegmentIndex\",value:function(){return this.pts.length-1}},{key:\"getDepthDelta\",value:function(){return this._depthDelta}},{key:\"getNumPoints\",value:function(){return this.pts.length}},{key:\"printReverse\",value:function(t){t.print(\"edge \"+this._name+\": \");for(var e=this.pts.length-1;e>=0;e--)t.print(this.pts[e]+\" \");t.println(\"\")}},{key:\"getMonotoneChainEdge\",value:function(){return null===this._mce&&(this._mce=new ii(this)),this._mce}},{key:\"getEnvelope\",value:function(){if(null===this._env){this._env=new U;for(var t=0;t<this.pts.length;t++)this._env.expandToInclude(this.pts[t])}return this._env}},{key:\"addIntersection\",value:function(t,e,n,i){var r=new X(t.getIntersection(i)),s=e,a=t.getEdgeDistance(n,i),o=s+1;if(o<this.pts.length){var u=this.pts[o];r.equals2D(u)&&(s=o,a=0)}this.eiList.add(r,s,a)}},{key:\"toString\",value:function(){var t=new Jt;t.append(\"edge \"+this._name+\": \"),t.append(\"LINESTRING (\");for(var e=0;e<this.pts.length;e++)e>0&&t.append(\",\"),t.append(this.pts[e].x+\" \"+this.pts[e].y);return t.append(\") \"+this._label+\" \"+this._depthDelta),t.toString()}},{key:\"isPointwiseEqual\",value:function(t){if(this.pts.length!==t.pts.length)return!1;for(var e=0;e<this.pts.length;e++)if(!this.pts[e].equals2D(t.pts[e]))return!1;return!0}},{key:\"setDepthDelta\",value:function(t){this._depthDelta=t}},{key:\"getEdgeIntersectionList\",value:function(){return this.eiList}},{key:\"addIntersections\",value:function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++)this.addIntersection(t,e,n,i)}}],[{key:\"constructor_\",value:function(){if(this.pts=null,this._env=null,this.eiList=new $n(this),this._name=null,this._mce=null,this._isIsolated=!0,this._depth=new ri,this._depthDelta=0,1===arguments.length){var t=arguments[0];a.constructor_.call(this,t,null)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.pts=e,this._label=n}}},{key:\"updateIM\",value:function(){if(!(2===arguments.length&&arguments[1]instanceof ti&&arguments[0]instanceof Pe))return f(r(a),\"updateIM\",this).apply(this,arguments);var t=arguments[0],e=arguments[1];e.setAtLeastIfValid(t.getLocation(0,$.ON),t.getLocation(1,$.ON),1),t.isArea()&&(e.setAtLeastIfValid(t.getLocation(0,$.LEFT),t.getLocation(1,$.LEFT),2),e.setAtLeastIfValid(t.getLocation(0,$.RIGHT),t.getLocation(1,$.RIGHT),2))}}]),a}(qe),ai=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"setWorkingPrecisionModel\",value:function(t){this._workingPrecisionModel=t}},{key:\"insertUniqueEdge\",value:function(t){var n=this._edgeList.findEqualEdge(t);if(null!==n){var i=n.getLabel(),r=t.getLabel();n.isPointwiseEqual(t)||(r=new Pe(t.getLabel())).flip(),i.merge(r);var s=e.depthDelta(r),a=n.getDepthDelta()+s;n.setDepthDelta(a)}else this._edgeList.add(t),t.setDepthDelta(e.depthDelta(t.getLabel()))}},{key:\"buildSubgraphs\",value:function(t,e){for(var n=new yt,i=t.iterator();i.hasNext();){var r=i.next(),s=r.getRightmostCoordinate(),a=new Dn(n).getDepth(s);r.computeDepth(a),r.findResultEdges(),n.add(r),e.add(r.getDirectedEdges(),r.getNodes())}}},{key:\"createSubgraphs\",value:function(t){for(var e=new yt,n=t.getNodes().iterator();n.hasNext();){var i=n.next();if(!i.isVisited()){var r=new _t;r.create(i),e.add(r)}}return on.sort(e,on.reverseOrder()),e}},{key:\"createEmptyResultGeometry\",value:function(){return this._geomFact.createPolygon()}},{key:\"getNoder\",value:function(t){if(null!==this._workingNoder)return this._workingNoder;var e=new Rn,n=new Oe;return n.setPrecisionModel(t),e.setSegmentIntersector(new Jn(n)),e}},{key:\"buffer\",value:function(t,e){var n=this._workingPrecisionModel;null===n&&(n=t.getPrecisionModel()),this._geomFact=t.getFactory();var i=new Pn(n,this._bufParams),r=new zn(t,e,i).getCurves();if(r.size()<=0)return this.createEmptyResultGeometry();this.computeNodedEdges(r,n),this._graph=new $e(new Zn),this._graph.addEdges(this._edgeList.getEdges());var s=this.createSubgraphs(this._graph),a=new tn(this._geomFact);this.buildSubgraphs(s,a);var o=a.getPolygons();return o.size()<=0?this.createEmptyResultGeometry():this._geomFact.buildGeometry(o)}},{key:\"computeNodedEdges\",value:function(t,e){var n=this.getNoder(e);n.computeNodes(t);for(var i=n.getNodedSubstrings().iterator();i.hasNext();){var r=i.next(),s=r.getCoordinates();if(2!==s.length||!s[0].equals2D(s[1])){var a=r.getData(),o=new si(r.getCoordinates(),new Pe(a));this.insertUniqueEdge(o)}}}},{key:\"setNoder\",value:function(t){this._workingNoder=t}}],[{key:\"constructor_\",value:function(){this._bufParams=null,this._workingPrecisionModel=null,this._workingNoder=null,this._geomFact=null,this._graph=null,this._edgeList=new Wn;var t=arguments[0];this._bufParams=t}},{key:\"depthDelta\",value:function(t){var e=t.getLocation(0,$.LEFT),n=t.getLocation(0,$.RIGHT);return e===H.INTERIOR&&n===H.EXTERIOR?1:e===H.EXTERIOR&&n===H.INTERIOR?-1:0}},{key:\"convertSegStrings\",value:function(t){for(var e=new ae,n=new yt;t.hasNext();){var i=t.next(),r=e.createLineString(i.getCoordinates());n.add(r)}return e.buildGeometry(n)}}]),e}(),oi=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"rescale\",value:function(){if(rt(arguments[0],Z))for(var t=arguments[0],e=t.iterator();e.hasNext();){var n=e.next();this.rescale(n.getCoordinates())}else if(arguments[0]instanceof Array){for(var i=arguments[0],r=0;r<i.length;r++)i[r].x=i[r].x/this._scaleFactor+this._offsetX,i[r].y=i[r].y/this._scaleFactor+this._offsetY;2===i.length&&i[0].equals2D(i[1])&&mt.out.println(i)}}},{key:\"scale\",value:function(){if(rt(arguments[0],Z)){for(var t=arguments[0],e=new yt(t.size()),n=t.iterator();n.hasNext();){var i=n.next();e.add(new In(this.scale(i.getCoordinates()),i.getData()))}return e}if(arguments[0]instanceof Array){for(var r=arguments[0],s=new Array(r.length).fill(null),a=0;a<r.length;a++)s[a]=new X(Math.round((r[a].x-this._offsetX)*this._scaleFactor),Math.round((r[a].y-this._offsetY)*this._scaleFactor),r[a].getZ());var o=jt.removeRepeatedPoints(s);return o}}},{key:\"isIntegerPrecision\",value:function(){return 1===this._scaleFactor}},{key:\"getNodedSubstrings\",value:function(){var t=this._noder.getNodedSubstrings();return this._isScaled&&this.rescale(t),t}},{key:\"computeNodes\",value:function(t){var e=t;this._isScaled&&(e=this.scale(t)),this._noder.computeNodes(e)}},{key:\"interfaces_\",get:function(){return[Ln]}}],[{key:\"constructor_\",value:function(){if(this._noder=null,this._scaleFactor=null,this._offsetX=null,this._offsetY=null,this._isScaled=!1,2===arguments.length){var t=arguments[0],n=arguments[1];e.constructor_.call(this,t,n,0,0)}else if(4===arguments.length){var i=arguments[0],r=arguments[1];this._noder=i,this._scaleFactor=r,this._isScaled=!this.isIntegerPrecision()}}}]),e}(),ui=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"checkEndPtVertexIntersections\",value:function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();){var e=t.next(),n=e.getCoordinates();this.checkEndPtVertexIntersections(n[0],this._segStrings),this.checkEndPtVertexIntersections(n[n.length-1],this._segStrings)}else if(2===arguments.length)for(var i=arguments[0],r=arguments[1],s=r.iterator();s.hasNext();)for(var a=s.next(),o=a.getCoordinates(),u=1;u<o.length-1;u++)if(o[u].equals(i))throw new D(\"found endpt/interior pt intersection at index \"+u+\" :pt \"+i)}},{key:\"checkInteriorIntersections\",value:function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();)for(var e=t.next(),n=this._segStrings.iterator();n.hasNext();){var i=n.next();this.checkInteriorIntersections(e,i)}else if(2===arguments.length)for(var r=arguments[0],s=arguments[1],a=r.getCoordinates(),o=s.getCoordinates(),u=0;u<a.length-1;u++)for(var l=0;l<o.length-1;l++)this.checkInteriorIntersections(r,u,s,l);else if(4===arguments.length){var h=arguments[0],c=arguments[1],f=arguments[2],v=arguments[3];if(h===f&&c===v)return null;var g=h.getCoordinates()[c],y=h.getCoordinates()[c+1],d=f.getCoordinates()[v],_=f.getCoordinates()[v+1];if(this._li.computeIntersection(g,y,d,_),this._li.hasIntersection()&&(this._li.isProper()||this.hasInteriorIntersection(this._li,g,y)||this.hasInteriorIntersection(this._li,d,_)))throw new D(\"found non-noded intersection at \"+g+\"-\"+y+\" and \"+d+\"-\"+_)}}},{key:\"checkValid\",value:function(){this.checkEndPtVertexIntersections(),this.checkInteriorIntersections(),this.checkCollapses()}},{key:\"checkCollapses\",value:function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();){var e=t.next();this.checkCollapses(e)}else if(1===arguments.length)for(var n=arguments[0],i=n.getCoordinates(),r=0;r<i.length-2;r++)this.checkCollapse(i[r],i[r+1],i[r+2])}},{key:\"hasInteriorIntersection\",value:function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++){var r=t.getIntersection(i);if(!r.equals(e)&&!r.equals(n))return!0}return!1}},{key:\"checkCollapse\",value:function(t,n,i){if(t.equals(i))throw new D(\"found non-noded collapse at \"+e.fact.createLineString([t,n,i]))}}],[{key:\"constructor_\",value:function(){this._li=new Oe,this._segStrings=null;var t=arguments[0];this._segStrings=t}}]),e}();ui.fact=new ae;var li=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"intersectsScaled\",value:function(t,e){var n=Math.min(t.x,e.x),i=Math.max(t.x,e.x),r=Math.min(t.y,e.y),s=Math.max(t.y,e.y),a=this._maxx<n||this._minx>i||this._maxy<r||this._miny>s;if(a)return!1;var o=this.intersectsToleranceSquare(t,e);return G.isTrue(!(a&&o),\"Found bad envelope test\"),o}},{key:\"initCorners\",value:function(t){var e=.5;this._minx=t.x-e,this._maxx=t.x+e,this._miny=t.y-e,this._maxy=t.y+e,this._corner[0]=new X(this._maxx,this._maxy),this._corner[1]=new X(this._minx,this._maxy),this._corner[2]=new X(this._minx,this._miny),this._corner[3]=new X(this._maxx,this._miny)}},{key:\"intersects\",value:function(t,e){return 1===this._scaleFactor?this.intersectsScaled(t,e):(this.copyScaled(t,this._p0Scaled),this.copyScaled(e,this._p1Scaled),this.intersectsScaled(this._p0Scaled,this._p1Scaled))}},{key:\"scale\",value:function(t){return Math.round(t*this._scaleFactor)}},{key:\"getCoordinate\",value:function(){return this._originalPt}},{key:\"copyScaled\",value:function(t,e){e.x=this.scale(t.x),e.y=this.scale(t.y)}},{key:\"getSafeEnvelope\",value:function(){if(null===this._safeEnv){var t=e.SAFE_ENV_EXPANSION_FACTOR/this._scaleFactor;this._safeEnv=new U(this._originalPt.x-t,this._originalPt.x+t,this._originalPt.y-t,this._originalPt.y+t)}return this._safeEnv}},{key:\"intersectsPixelClosure\",value:function(t,e){return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.hasIntersection())))}},{key:\"intersectsToleranceSquare\",value:function(t,e){var n=!1,i=!1;return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.isProper()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.isProper()||(this._li.hasIntersection()&&(n=!0),this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.isProper()||(this._li.hasIntersection()&&(i=!0),this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.isProper()||(!(!n||!i)||(!!t.equals(this._pt)||!!e.equals(this._pt))))))}},{key:\"addSnappedNode\",value:function(t,e){var n=t.getCoordinate(e),i=t.getCoordinate(e+1);return!!this.intersects(n,i)&&(t.addIntersection(this.getCoordinate(),e),!0)}}],[{key:\"constructor_\",value:function(){this._li=null,this._pt=null,this._originalPt=null,this._ptScaled=null,this._p0Scaled=null,this._p1Scaled=null,this._scaleFactor=null,this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,this._corner=new Array(4).fill(null),this._safeEnv=null;var t=arguments[0],e=arguments[1],n=arguments[2];if(this._originalPt=t,this._pt=t,this._scaleFactor=e,this._li=n,e<=0)throw new m(\"Scale factor must be non-zero\");1!==e&&(this._pt=new X(this.scale(t.x),this.scale(t.y)),this._p0Scaled=new X,this._p1Scaled=new X),this.initCorners(this._pt)}}]),e}();li.SAFE_ENV_EXPANSION_FACTOR=.75;var hi=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"select\",value:function(){if(1===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];t.getLineSegment(e,this.selectedSegment),this.select(this.selectedSegment)}}}],[{key:\"constructor_\",value:function(){this.selectedSegment=new En}}]),e}(),ci=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"snap\",value:function(){if(1===arguments.length){var e=arguments[0];return this.snap(e,null,-1)}if(3===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2],a=i.getSafeEnvelope(),o=new fi(i,r,s);return this._index.query(a,new(function(){function e(){t(this,e)}return n(e,[{key:\"interfaces_\",get:function(){return[hn]}},{key:\"visitItem\",value:function(t){t.select(a,o)}}]),e}())),o.isNodeAdded()}}}],[{key:\"constructor_\",value:function(){this._index=null;var t=arguments[0];this._index=t}}]),e}(),fi=function(e){i(a,e);var s=c(a);function a(){var e;return t(this,a),e=s.call(this),a.constructor_.apply(l(e),arguments),e}return n(a,[{key:\"isNodeAdded\",value:function(){return this._isNodeAdded}},{key:\"select\",value:function(){if(!(2===arguments.length&&Number.isInteger(arguments[1])&&arguments[0]instanceof Tn))return f(r(a.prototype),\"select\",this).apply(this,arguments);var t=arguments[0],e=arguments[1],n=t.getContext();if(this._parentEdge===n&&(e===this._hotPixelVertexIndex||e+1===this._hotPixelVertexIndex))return null;this._isNodeAdded|=this._hotPixel.addSnappedNode(n,e)}}],[{key:\"constructor_\",value:function(){this._hotPixel=null,this._parentEdge=null,this._hotPixelVertexIndex=null,this._isNodeAdded=!1;var t=arguments[0],e=arguments[1],n=arguments[2];this._hotPixel=t,this._parentEdge=e,this._hotPixelVertexIndex=n}}]),a}(hi);ci.HotPixelSnapAction=fi;var vi=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"processIntersections\",value:function(t,e,n,i){if(t===n&&e===i)return null;var r=t.getCoordinates()[e],s=t.getCoordinates()[e+1],a=n.getCoordinates()[i],o=n.getCoordinates()[i+1];if(this._li.computeIntersection(r,s,a,o),this._li.hasIntersection()&&this._li.isInteriorIntersection()){for(var u=0;u<this._li.getIntersectionNum();u++)this._interiorIntersections.add(this._li.getIntersection(u));t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1)}}},{key:\"isDone\",value:function(){return!1}},{key:\"getInteriorIntersections\",value:function(){return this._interiorIntersections}},{key:\"interfaces_\",get:function(){return[Kn]}}],[{key:\"constructor_\",value:function(){this._li=null,this._interiorIntersections=null;var t=arguments[0];this._li=t,this._interiorIntersections=new yt}}]),e}(),gi=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"checkCorrectness\",value:function(t){var e=In.getNodedSubstrings(t),n=new ui(e);try{n.checkValid()}catch(t){if(!(t instanceof p))throw t;t.printStackTrace()}}},{key:\"getNodedSubstrings\",value:function(){return In.getNodedSubstrings(this._nodedSegStrings)}},{key:\"snapRound\",value:function(t,e){var n=this.findInteriorIntersections(t,e);this.computeIntersectionSnaps(n),this.computeVertexSnaps(t)}},{key:\"findInteriorIntersections\",value:function(t,e){var n=new vi(e);return this._noder.setSegmentIntersector(n),this._noder.computeNodes(t),n.getInteriorIntersections()}},{key:\"computeVertexSnaps\",value:function(){if(rt(arguments[0],Z))for(var t=arguments[0],e=t.iterator();e.hasNext();){var n=e.next();this.computeVertexSnaps(n)}else if(arguments[0]instanceof In)for(var i=arguments[0],r=i.getCoordinates(),s=0;s<r.length;s++){var a=new li(r[s],this._scaleFactor,this._li),o=this._pointSnapper.snap(a,i,s);o&&i.addIntersection(r[s],s)}}},{key:\"computeNodes\",value:function(t){this._nodedSegStrings=t,this._noder=new Rn,this._pointSnapper=new ci(this._noder.getIndex()),this.snapRound(t,this._li)}},{key:\"computeIntersectionSnaps\",value:function(t){for(var e=t.iterator();e.hasNext();){var n=e.next(),i=new li(n,this._scaleFactor,this._li);this._pointSnapper.snap(i)}}},{key:\"interfaces_\",get:function(){return[Ln]}}],[{key:\"constructor_\",value:function(){this._pm=null,this._li=null,this._scaleFactor=null,this._noder=null,this._pointSnapper=null,this._nodedSegStrings=null;var t=arguments[0];this._pm=t,this._li=new Oe,this._li.setPrecisionModel(t),this._scaleFactor=t.getScale()}}]),e}(),yi=function(){function e(){t(this,e),e.constructor_.apply(this,arguments)}return n(e,[{key:\"bufferFixedPrecision\",value:function(t){var e=new oi(new gi(new ie(1)),t.getScale()),n=new ai(this._bufParams);n.setWorkingPrecisionModel(t),n.setNoder(e),this._resultGeometry=n.buffer(this._argGeom,this._distance)}},{key:\"bufferReducedPrecision\",value:function(){if(0===arguments.length){for(var t=e.MAX_PRECISION_DIGITS;t>=0;t--){try{this.bufferReducedPrecision(t)}catch(t){if(!(t instanceof vt))throw t;this._saveException=t}if(null!==this._resultGeometry)return null}throw this._saveException}if(1===arguments.length){var n=arguments[0],i=e.precisionScaleFactor(this._argGeom,this._distance,n),r=new ie(i);this.bufferFixedPrecision(r)}}},{key:\"computeGeometry\",value:function(){if(this.bufferOriginalPrecision(),null!==this._resultGeometry)return null;var t=this._argGeom.getFactory().getPrecisionModel();t.getType()===ie.FIXED?this.bufferFixedPrecision(t):this.bufferReducedPrecision()}},{key:\"setQuadrantSegments\",value:function(t){this._bufParams.setQuadrantSegments(t)}},{key:\"bufferOriginalPrecision\",value:function(){try{var t=new ai(this._bufParams);this._resultGeometry=t.buffer(this._argGeom,this._distance)}catch(t){if(!(t instanceof D))throw t;this._saveException=t}}},{key:\"getResultGeometry\",value:function(t){return this._distance=t,this.computeGeometry(),this._resultGeometry}},{key:\"setEndCapStyle\",value:function(t){this._bufParams.setEndCapStyle(t)}}],[{key:\"constructor_\",value:function(){if(this._argGeom=null,this._distance=null,this._bufParams=new _,this._resultGeometry=null,this._saveException=null,1===arguments.length){var t=arguments[0];this._argGeom=t}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this._argGeom=e,this._bufParams=n}}},{key:\"bufferOp\",value:function(){if(2===arguments.length){var t=arguments[0],n=arguments[1],i=new e(t),r=i.getResultGeometry(n);return r}if(3===arguments.length){if(Number.isInteger(arguments[2])&&arguments[0]instanceof V&&\"number\"==typeof arguments[1]){var s=arguments[0],a=arguments[1],o=arguments[2],u=new e(s);u.setQuadrantSegments(o);var l=u.getResultGeometry(a);return l}if(arguments[2]instanceof _&&arguments[0]instanceof V&&\"number\"==typeof arguments[1]){var h=arguments[0],c=arguments[1],f=arguments[2],v=new e(h,f),g=v.getResultGeometry(c);return g}}else if(4===arguments.length){var y=arguments[0],d=arguments[1],p=arguments[2],m=arguments[3],k=new e(y);k.setQuadrantSegments(p),k.setEndCapStyle(m);var x=k.getResultGeometry(d);return x}}},{key:\"precisionScaleFactor\",value:function(t,e,n){var i=t.getEnvelopeInternal(),r=kt.max(Math.abs(i.getMaxX()),Math.abs(i.getMaxY()),Math.abs(i.getMinX()),Math.abs(i.getMinY()))+2*(e>0?e:0),s=n-Math.trunc(Math.log(r)/Math.log(10)+1);return Math.pow(10,s)}}]),e}();yi.CAP_ROUND=_.CAP_ROUND,yi.CAP_BUTT=_.CAP_FLAT,yi.CAP_FLAT=_.CAP_FLAT,yi.CAP_SQUARE=_.CAP_SQUARE,yi.MAX_PRECISION_DIGITS=12;var di=[\"Point\",\"MultiPoint\",\"LineString\",\"MultiLineString\",\"Polygon\",\"MultiPolygon\"],_i=function(){function e(n){t(this,e),this.geometryFactory=n||new ae}return n(e,[{key:\"read\",value:function(t){var e,n=(e=\"string\"==typeof t?JSON.parse(t):t).type;if(!pi[n])throw new Error(\"Unknown GeoJSON type: \"+e.type);return-1!==di.indexOf(n)?pi[n].call(this,e.coordinates):\"GeometryCollection\"===n?pi[n].call(this,e.geometries):pi[n].call(this,e)}},{key:\"write\",value:function(t){var e=t.getGeometryType();if(!mi[e])throw new Error(\"Geometry is not supported\");return mi[e].call(this,t)}}]),e}(),pi={Feature:function(t){var e={};for(var n in t)e[n]=t[n];if(t.geometry){var i=t.geometry.type;if(!pi[i])throw new Error(\"Unknown GeoJSON type: \"+t.type);e.geometry=this.read(t.geometry)}return t.bbox&&(e.bbox=pi.bbox.call(this,t.bbox)),e},FeatureCollection:function(t){var e={};if(t.features){e.features=[];for(var n=0;n<t.features.length;++n)e.features.push(this.read(t.features[n]))}return t.bbox&&(e.bbox=this.parse.bbox.call(this,t.bbox)),e},coordinates:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(o(X,v(i)))}return e},bbox:function(t){return this.geometryFactory.createLinearRing([new X(t[0],t[1]),new X(t[2],t[1]),new X(t[2],t[3]),new X(t[0],t[3]),new X(t[0],t[1])])},Point:function(t){var e=o(X,v(t));return this.geometryFactory.createPoint(e)},MultiPoint:function(t){for(var e=[],n=0;n<t.length;++n)e.push(pi.Point.call(this,t[n]));return this.geometryFactory.createMultiPoint(e)},LineString:function(t){var e=pi.coordinates.call(this,t);return this.geometryFactory.createLineString(e)},MultiLineString:function(t){for(var e=[],n=0;n<t.length;++n)e.push(pi.LineString.call(this,t[n]));return this.geometryFactory.createMultiLineString(e)},Polygon:function(t){for(var e=pi.coordinates.call(this,t[0]),n=this.geometryFactory.createLinearRing(e),i=[],r=1;r<t.length;++r){var s=t[r],a=pi.coordinates.call(this,s),o=this.geometryFactory.createLinearRing(a);i.push(o)}return this.geometryFactory.createPolygon(n,i)},MultiPolygon:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(pi.Polygon.call(this,i))}return this.geometryFactory.createMultiPolygon(e)},GeometryCollection:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(this.read(i))}return this.geometryFactory.createGeometryCollection(e)}},mi={coordinate:function(t){var e=[t.x,t.y];return t.z&&e.push(t.z),t.m&&e.push(t.m),e},Point:function(t){return{type:\"Point\",coordinates:mi.coordinate.call(this,t.getCoordinate())}},MultiPoint:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=mi.Point.call(this,i);e.push(r.coordinates)}return{type:\"MultiPoint\",coordinates:e}},LineString:function(t){for(var e=[],n=t.getCoordinates(),i=0;i<n.length;++i){var r=n[i];e.push(mi.coordinate.call(this,r))}return{type:\"LineString\",coordinates:e}},MultiLineString:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=mi.LineString.call(this,i);e.push(r.coordinates)}return{type:\"MultiLineString\",coordinates:e}},Polygon:function(t){var e=[],n=mi.LineString.call(this,t._shell);e.push(n.coordinates);for(var i=0;i<t._holes.length;++i){var r=t._holes[i],s=mi.LineString.call(this,r);e.push(s.coordinates)}return{type:\"Polygon\",coordinates:e}},MultiPolygon:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=mi.Polygon.call(this,i);e.push(r.coordinates)}return{type:\"MultiPolygon\",coordinates:e}},GeometryCollection:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=i.getGeometryType();e.push(mi[r].call(this,i))}return{type:\"GeometryCollection\",geometries:e}}};return{BufferOp:yi,GeoJSONReader:function(){function e(n){t(this,e),this.parser=new _i(n||new ae)}return n(e,[{key:\"read\",value:function(t){return this.parser.read(t)}}]),e}(),GeoJSONWriter:function(){function e(){t(this,e),this.parser=new _i(this.geometryFactory)}return n(e,[{key:\"write\",value:function(t){return this.parser.write(t)}}]),e}()}}));\n//# sourceMappingURL=jsts.min.js.map\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipPolygon from \"./polygon\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport function clipExtent(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","import clipBuffer from \"./buffer\";\nimport clipPolygon from \"./polygon\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(rotate, sink) {\n var line = clipLine(sink),\n rotatedStart = rotate.invert(start[0], start[1]),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, rotatedStart);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n var point = rotate(lambda, phi);\n if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n var point = rotate(lambda, phi);\n line.point(point[0], point[1]);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n var point = rotate(lambda, phi);\n ringSink.point(point[0], point[1]);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius, delta) {\n var cr = cos(radius),\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nexport function fitExtent(projection, extent, object) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n clip = projection.clipExtent && projection.clipExtent();\n\n projection\n .scale(150)\n .translate([0, 0]);\n\n if (clip != null) projection.clipExtent(null);\n\n geoStream(object, projection.stream(boundsStream));\n\n var b = boundsStream.result(),\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n\n if (clip != null) projection.clipExtent(clip);\n\n return projection\n .scale(k * 150)\n .translate([x, y]);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport {clipExtent} from \"../clip/extent\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {degrees, radians, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n dx, dy, lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n theta = null, preclip = clipAntimeridian, // clip angle\n x0 = null, y0, x1, y1, postclip = identity, // clip extent\n delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n cache,\n cacheStream;\n\n function projection(point) {\n point = projectRotate(point[0] * radians, point[1] * radians);\n return [point[0] * k + dx, dy - point[1] * k];\n }\n\n function invert(point) {\n point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n function recenter() {\n projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n var center = project(lambda, phi);\n dx = x - center[0] * k;\n dy = y + center[1] * k;\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","// index.js\nimport { center } from \"@turf/center\";\nimport jsts from \"@turf/jsts\";\nimport { geomEach, featureEach } from \"@turf/meta\";\nimport { geoAzimuthalEquidistant } from \"d3-geo\";\nimport {\n feature,\n featureCollection,\n radiansToLength,\n lengthToRadians,\n earthRadius\n} from \"@turf/helpers\";\nvar { BufferOp, GeoJSONReader, GeoJSONWriter } = jsts;\nfunction buffer(geojson, radius, options) {\n options = options || {};\n var units = options.units || \"kilometers\";\n var steps = options.steps || 8;\n if (!geojson)\n throw new Error(\"geojson is required\");\n if (typeof options !== \"object\")\n throw new Error(\"options must be an object\");\n if (typeof steps !== \"number\")\n throw new Error(\"steps must be an number\");\n if (radius === void 0)\n throw new Error(\"radius is required\");\n if (steps <= 0)\n throw new Error(\"steps must be greater than 0\");\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function(geometry) {\n var buffered = bufferFeature(geometry, radius, units, steps);\n if (buffered)\n results.push(buffered);\n });\n return featureCollection(results);\n case \"FeatureCollection\":\n featureEach(geojson, function(feature2) {\n var multiBuffered = bufferFeature(feature2, radius, units, steps);\n if (multiBuffered) {\n featureEach(multiBuffered, function(buffered) {\n if (buffered)\n results.push(buffered);\n });\n }\n });\n return featureCollection(results);\n }\n return bufferFeature(geojson, radius, units, steps);\n}\nfunction bufferFeature(geojson, radius, units, steps) {\n var properties = geojson.properties || {};\n var geometry = geojson.type === \"Feature\" ? geojson.geometry : geojson;\n if (geometry.type === \"GeometryCollection\") {\n var results = [];\n geomEach(geojson, function(geometry2) {\n var buffered2 = bufferFeature(geometry2, radius, units, steps);\n if (buffered2)\n results.push(buffered2);\n });\n return featureCollection(results);\n }\n var projection = defineProjection(geometry);\n var projected = {\n type: geometry.type,\n coordinates: projectCoords(geometry.coordinates, projection)\n };\n var reader = new GeoJSONReader();\n var geom = reader.read(projected);\n var distance = radiansToLength(lengthToRadians(radius, units), \"meters\");\n var buffered = BufferOp.bufferOp(geom, distance, steps);\n var writer = new GeoJSONWriter();\n buffered = writer.write(buffered);\n if (coordsIsNaN(buffered.coordinates))\n return void 0;\n var result = {\n type: buffered.type,\n coordinates: unprojectCoords(buffered.coordinates, projection)\n };\n return feature(result, properties);\n}\nfunction coordsIsNaN(coords) {\n if (Array.isArray(coords[0]))\n return coordsIsNaN(coords[0]);\n return isNaN(coords[0]);\n}\nfunction projectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\")\n return proj(coords);\n return coords.map(function(coord) {\n return projectCoords(coord, proj);\n });\n}\nfunction unprojectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\")\n return proj.invert(coords);\n return coords.map(function(coord) {\n return unprojectCoords(coord, proj);\n });\n}\nfunction defineProjection(geojson) {\n var coords = center(geojson).geometry.coordinates;\n var rotation = [-coords[0], -coords[1]];\n return geoAzimuthalEquidistant().rotate(rotation).scale(earthRadius);\n}\nvar turf_buffer_default = buffer;\nexport {\n buffer,\n turf_buffer_default as default\n};\n//# sourceMappingURL=index.js.map","/**\n * splaytree v3.1.2\n * Fast Splay tree for Node and browser\n *\n * @author Alexander Milevski <info@w8r.name>\n * @license MIT\n * @preserve\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nvar Node = /** @class */ (function () {\r\n function Node(key, data) {\r\n this.next = null;\r\n this.key = key;\r\n this.data = data;\r\n this.left = null;\r\n this.right = null;\r\n }\r\n return Node;\r\n}());\n\n/* follows \"An implementation of top-down splaying\"\r\n * by D. Sleator <sleator@cs.cmu.edu> March 1992\r\n */\r\nfunction DEFAULT_COMPARE(a, b) {\r\n return a > b ? 1 : a < b ? -1 : 0;\r\n}\r\n/**\r\n * Simple top down splay, not requiring i to be in the tree t.\r\n */\r\nfunction splay(i, t, comparator) {\r\n var N = new Node(null, null);\r\n var l = N;\r\n var r = N;\r\n while (true) {\r\n var cmp = comparator(i, t.key);\r\n //if (i < t.key) {\r\n if (cmp < 0) {\r\n if (t.left === null)\r\n break;\r\n //if (i < t.left.key) {\r\n if (comparator(i, t.left.key) < 0) {\r\n var y = t.left; /* rotate right */\r\n t.left = y.right;\r\n y.right = t;\r\n t = y;\r\n if (t.left === null)\r\n break;\r\n }\r\n r.left = t; /* link right */\r\n r = t;\r\n t = t.left;\r\n //} else if (i > t.key) {\r\n }\r\n else if (cmp > 0) {\r\n if (t.right === null)\r\n break;\r\n //if (i > t.right.key) {\r\n if (comparator(i, t.right.key) > 0) {\r\n var y = t.right; /* rotate left */\r\n t.right = y.left;\r\n y.left = t;\r\n t = y;\r\n if (t.right === null)\r\n break;\r\n }\r\n l.right = t; /* link left */\r\n l = t;\r\n t = t.right;\r\n }\r\n else\r\n break;\r\n }\r\n /* assemble */\r\n l.right = t.left;\r\n r.left = t.right;\r\n t.left = N.right;\r\n t.right = N.left;\r\n return t;\r\n}\r\nfunction insert(i, data, t, comparator) {\r\n var node = new Node(i, data);\r\n if (t === null) {\r\n node.left = node.right = null;\r\n return node;\r\n }\r\n t = splay(i, t, comparator);\r\n var cmp = comparator(i, t.key);\r\n if (cmp < 0) {\r\n node.left = t.left;\r\n node.right = t;\r\n t.left = null;\r\n }\r\n else if (cmp >= 0) {\r\n node.right = t.right;\r\n node.left = t;\r\n t.right = null;\r\n }\r\n return node;\r\n}\r\nfunction split(key, v, comparator) {\r\n var left = null;\r\n var right = null;\r\n if (v) {\r\n v = splay(key, v, comparator);\r\n var cmp = comparator(v.key, key);\r\n if (cmp === 0) {\r\n left = v.left;\r\n right = v.right;\r\n }\r\n else if (cmp < 0) {\r\n right = v.right;\r\n v.right = null;\r\n left = v;\r\n }\r\n else {\r\n left = v.left;\r\n v.left = null;\r\n right = v;\r\n }\r\n }\r\n return { left: left, right: right };\r\n}\r\nfunction merge(left, right, comparator) {\r\n if (right === null)\r\n return left;\r\n if (left === null)\r\n return right;\r\n right = splay(left.key, right, comparator);\r\n right.left = left;\r\n return right;\r\n}\r\n/**\r\n * Prints level of the tree\r\n */\r\nfunction printRow(root, prefix, isTail, out, printNode) {\r\n if (root) {\r\n out(\"\" + prefix + (isTail ? '└── ' : '├── ') + printNode(root) + \"\\n\");\r\n var indent = prefix + (isTail ? ' ' : '│ ');\r\n if (root.left)\r\n printRow(root.left, indent, false, out, printNode);\r\n if (root.right)\r\n printRow(root.right, indent, true, out, printNode);\r\n }\r\n}\r\nvar Tree = /** @class */ (function () {\r\n function Tree(comparator) {\r\n if (comparator === void 0) { comparator = DEFAULT_COMPARE; }\r\n this._root = null;\r\n this._size = 0;\r\n this._comparator = comparator;\r\n }\r\n /**\r\n * Inserts a key, allows duplicates\r\n */\r\n Tree.prototype.insert = function (key, data) {\r\n this._size++;\r\n return this._root = insert(key, data, this._root, this._comparator);\r\n };\r\n /**\r\n * Adds a key, if it is not present in the tree\r\n */\r\n Tree.prototype.add = function (key, data) {\r\n var node = new Node(key, data);\r\n if (this._root === null) {\r\n node.left = node.right = null;\r\n this._size++;\r\n this._root = node;\r\n }\r\n var comparator = this._comparator;\r\n var t = splay(key, this._root, comparator);\r\n var cmp = comparator(key, t.key);\r\n if (cmp === 0)\r\n this._root = t;\r\n else {\r\n if (cmp < 0) {\r\n node.left = t.left;\r\n node.right = t;\r\n t.left = null;\r\n }\r\n else if (cmp > 0) {\r\n node.right = t.right;\r\n node.left = t;\r\n t.right = null;\r\n }\r\n this._size++;\r\n this._root = node;\r\n }\r\n return this._root;\r\n };\r\n /**\r\n * @param {Key} key\r\n * @return {Node|null}\r\n */\r\n Tree.prototype.remove = function (key) {\r\n this._root = this._remove(key, this._root, this._comparator);\r\n };\r\n /**\r\n * Deletes i from the tree if it's there\r\n */\r\n Tree.prototype._remove = function (i, t, comparator) {\r\n var x;\r\n if (t === null)\r\n return null;\r\n t = splay(i, t, comparator);\r\n var cmp = comparator(i, t.key);\r\n if (cmp === 0) { /* found it */\r\n if (t.left === null) {\r\n x = t.right;\r\n }\r\n else {\r\n x = splay(i, t.left, comparator);\r\n x.right = t.right;\r\n }\r\n this._size--;\r\n return x;\r\n }\r\n return t; /* It wasn't there */\r\n };\r\n /**\r\n * Removes and returns the node with smallest key\r\n */\r\n Tree.prototype.pop = function () {\r\n var node = this._root;\r\n if (node) {\r\n while (node.left)\r\n node = node.left;\r\n this._root = splay(node.key, this._root, this._comparator);\r\n this._root = this._remove(node.key, this._root, this._comparator);\r\n return { key: node.key, data: node.data };\r\n }\r\n return null;\r\n };\r\n /**\r\n * Find without splaying\r\n */\r\n Tree.prototype.findStatic = function (key) {\r\n var current = this._root;\r\n var compare = this._comparator;\r\n while (current) {\r\n var cmp = compare(key, current.key);\r\n if (cmp === 0)\r\n return current;\r\n else if (cmp < 0)\r\n current = current.left;\r\n else\r\n current = current.right;\r\n }\r\n return null;\r\n };\r\n Tree.prototype.find = function (key) {\r\n if (this._root) {\r\n this._root = splay(key, this._root, this._comparator);\r\n if (this._comparator(key, this._root.key) !== 0)\r\n return null;\r\n }\r\n return this._root;\r\n };\r\n Tree.prototype.contains = function (key) {\r\n var current = this._root;\r\n var compare = this._comparator;\r\n while (current) {\r\n var cmp = compare(key, current.key);\r\n if (cmp === 0)\r\n return true;\r\n else if (cmp < 0)\r\n current = current.left;\r\n else\r\n current = current.right;\r\n }\r\n return false;\r\n };\r\n Tree.prototype.forEach = function (visitor, ctx) {\r\n var current = this._root;\r\n var Q = []; /* Initialize stack s */\r\n var done = false;\r\n while (!done) {\r\n if (current !== null) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length !== 0) {\r\n current = Q.pop();\r\n visitor.call(ctx, current);\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Walk key range from `low` to `high`. Stops if `fn` returns a value.\r\n */\r\n Tree.prototype.range = function (low, high, fn, ctx) {\r\n var Q = [];\r\n var compare = this._comparator;\r\n var node = this._root;\r\n var cmp;\r\n while (Q.length !== 0 || node) {\r\n if (node) {\r\n Q.push(node);\r\n node = node.left;\r\n }\r\n else {\r\n node = Q.pop();\r\n cmp = compare(node.key, high);\r\n if (cmp > 0) {\r\n break;\r\n }\r\n else if (compare(node.key, low) >= 0) {\r\n if (fn.call(ctx, node))\r\n return this; // stop if smth is returned\r\n }\r\n node = node.right;\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Returns array of keys\r\n */\r\n Tree.prototype.keys = function () {\r\n var keys = [];\r\n this.forEach(function (_a) {\r\n var key = _a.key;\r\n return keys.push(key);\r\n });\r\n return keys;\r\n };\r\n /**\r\n * Returns array of all the data in the nodes\r\n */\r\n Tree.prototype.values = function () {\r\n var values = [];\r\n this.forEach(function (_a) {\r\n var data = _a.data;\r\n return values.push(data);\r\n });\r\n return values;\r\n };\r\n Tree.prototype.min = function () {\r\n if (this._root)\r\n return this.minNode(this._root).key;\r\n return null;\r\n };\r\n Tree.prototype.max = function () {\r\n if (this._root)\r\n return this.maxNode(this._root).key;\r\n return null;\r\n };\r\n Tree.prototype.minNode = function (t) {\r\n if (t === void 0) { t = this._root; }\r\n if (t)\r\n while (t.left)\r\n t = t.left;\r\n return t;\r\n };\r\n Tree.prototype.maxNode = function (t) {\r\n if (t === void 0) { t = this._root; }\r\n if (t)\r\n while (t.right)\r\n t = t.right;\r\n return t;\r\n };\r\n /**\r\n * Returns node at given index\r\n */\r\n Tree.prototype.at = function (index) {\r\n var current = this._root;\r\n var done = false;\r\n var i = 0;\r\n var Q = [];\r\n while (!done) {\r\n if (current) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length > 0) {\r\n current = Q.pop();\r\n if (i === index)\r\n return current;\r\n i++;\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n return null;\r\n };\r\n Tree.prototype.next = function (d) {\r\n var root = this._root;\r\n var successor = null;\r\n if (d.right) {\r\n successor = d.right;\r\n while (successor.left)\r\n successor = successor.left;\r\n return successor;\r\n }\r\n var comparator = this._comparator;\r\n while (root) {\r\n var cmp = comparator(d.key, root.key);\r\n if (cmp === 0)\r\n break;\r\n else if (cmp < 0) {\r\n successor = root;\r\n root = root.left;\r\n }\r\n else\r\n root = root.right;\r\n }\r\n return successor;\r\n };\r\n Tree.prototype.prev = function (d) {\r\n var root = this._root;\r\n var predecessor = null;\r\n if (d.left !== null) {\r\n predecessor = d.left;\r\n while (predecessor.right)\r\n predecessor = predecessor.right;\r\n return predecessor;\r\n }\r\n var comparator = this._comparator;\r\n while (root) {\r\n var cmp = comparator(d.key, root.key);\r\n if (cmp === 0)\r\n break;\r\n else if (cmp < 0)\r\n root = root.left;\r\n else {\r\n predecessor = root;\r\n root = root.right;\r\n }\r\n }\r\n return predecessor;\r\n };\r\n Tree.prototype.clear = function () {\r\n this._root = null;\r\n this._size = 0;\r\n return this;\r\n };\r\n Tree.prototype.toList = function () {\r\n return toList(this._root);\r\n };\r\n /**\r\n * Bulk-load items. Both array have to be same size\r\n */\r\n Tree.prototype.load = function (keys, values, presort) {\r\n if (values === void 0) { values = []; }\r\n if (presort === void 0) { presort = false; }\r\n var size = keys.length;\r\n var comparator = this._comparator;\r\n // sort if needed\r\n if (presort)\r\n sort(keys, values, 0, size - 1, comparator);\r\n if (this._root === null) { // empty tree\r\n this._root = loadRecursive(keys, values, 0, size);\r\n this._size = size;\r\n }\r\n else { // that re-builds the whole tree from two in-order traversals\r\n var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);\r\n size = this._size + size;\r\n this._root = sortedListToBST({ head: mergedList }, 0, size);\r\n }\r\n return this;\r\n };\r\n Tree.prototype.isEmpty = function () { return this._root === null; };\r\n Object.defineProperty(Tree.prototype, \"size\", {\r\n get: function () { return this._size; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tree.prototype, \"root\", {\r\n get: function () { return this._root; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Tree.prototype.toString = function (printNode) {\r\n if (printNode === void 0) { printNode = function (n) { return String(n.key); }; }\r\n var out = [];\r\n printRow(this._root, '', true, function (v) { return out.push(v); }, printNode);\r\n return out.join('');\r\n };\r\n Tree.prototype.update = function (key, newKey, newData) {\r\n var comparator = this._comparator;\r\n var _a = split(key, this._root, comparator), left = _a.left, right = _a.right;\r\n if (comparator(key, newKey) < 0) {\r\n right = insert(newKey, newData, right, comparator);\r\n }\r\n else {\r\n left = insert(newKey, newData, left, comparator);\r\n }\r\n this._root = merge(left, right, comparator);\r\n };\r\n Tree.prototype.split = function (key) {\r\n return split(key, this._root, this._comparator);\r\n };\r\n Tree.prototype[Symbol.iterator] = function () {\r\n var current, Q, done;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n current = this._root;\r\n Q = [];\r\n done = false;\r\n _a.label = 1;\r\n case 1:\r\n if (!!done) return [3 /*break*/, 6];\r\n if (!(current !== null)) return [3 /*break*/, 2];\r\n Q.push(current);\r\n current = current.left;\r\n return [3 /*break*/, 5];\r\n case 2:\r\n if (!(Q.length !== 0)) return [3 /*break*/, 4];\r\n current = Q.pop();\r\n return [4 /*yield*/, current];\r\n case 3:\r\n _a.sent();\r\n current = current.right;\r\n return [3 /*break*/, 5];\r\n case 4:\r\n done = true;\r\n _a.label = 5;\r\n case 5: return [3 /*break*/, 1];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n };\r\n return Tree;\r\n}());\r\nfunction loadRecursive(keys, values, start, end) {\r\n var size = end - start;\r\n if (size > 0) {\r\n var middle = start + Math.floor(size / 2);\r\n var key = keys[middle];\r\n var data = values[middle];\r\n var node = new Node(key, data);\r\n node.left = loadRecursive(keys, values, start, middle);\r\n node.right = loadRecursive(keys, values, middle + 1, end);\r\n return node;\r\n }\r\n return null;\r\n}\r\nfunction createList(keys, values) {\r\n var head = new Node(null, null);\r\n var p = head;\r\n for (var i = 0; i < keys.length; i++) {\r\n p = p.next = new Node(keys[i], values[i]);\r\n }\r\n p.next = null;\r\n return head.next;\r\n}\r\nfunction toList(root) {\r\n var current = root;\r\n var Q = [];\r\n var done = false;\r\n var head = new Node(null, null);\r\n var p = head;\r\n while (!done) {\r\n if (current) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length > 0) {\r\n current = p = p.next = Q.pop();\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n p.next = null; // that'll work even if the tree was empty\r\n return head.next;\r\n}\r\nfunction sortedListToBST(list, start, end) {\r\n var size = end - start;\r\n if (size > 0) {\r\n var middle = start + Math.floor(size / 2);\r\n var left = sortedListToBST(list, start, middle);\r\n var root = list.head;\r\n root.left = left;\r\n list.head = list.head.next;\r\n root.right = sortedListToBST(list, middle + 1, end);\r\n return root;\r\n }\r\n return null;\r\n}\r\nfunction mergeLists(l1, l2, compare) {\r\n var head = new Node(null, null); // dummy\r\n var p = head;\r\n var p1 = l1;\r\n var p2 = l2;\r\n while (p1 !== null && p2 !== null) {\r\n if (compare(p1.key, p2.key) < 0) {\r\n p.next = p1;\r\n p1 = p1.next;\r\n }\r\n else {\r\n p.next = p2;\r\n p2 = p2.next;\r\n }\r\n p = p.next;\r\n }\r\n if (p1 !== null) {\r\n p.next = p1;\r\n }\r\n else if (p2 !== null) {\r\n p.next = p2;\r\n }\r\n return head.next;\r\n}\r\nfunction sort(keys, values, left, right, compare) {\r\n if (left >= right)\r\n return;\r\n var pivot = keys[(left + right) >> 1];\r\n var i = left - 1;\r\n var j = right + 1;\r\n while (true) {\r\n do\r\n i++;\r\n while (compare(keys[i], pivot) < 0);\r\n do\r\n j--;\r\n while (compare(keys[j], pivot) > 0);\r\n if (i >= j)\r\n break;\r\n var tmp = keys[i];\r\n keys[i] = keys[j];\r\n keys[j] = tmp;\r\n tmp = values[i];\r\n values[i] = values[j];\r\n values[j] = tmp;\r\n }\r\n sort(keys, values, left, j, compare);\r\n sort(keys, values, j + 1, right, compare);\r\n}\n\nexport default Tree;\n//# sourceMappingURL=splay.esm.js.map\n","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nexport function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nexport function vec(n) {\n return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import SplayTree from 'splaytree';\nimport { orient2d } from 'robust-predicates';\n\n/**\n * A bounding box has the format:\n *\n * { ll: { x: xmin, y: ymin }, ur: { x: xmax, y: ymax } }\n *\n */\n\nconst isInBbox = (bbox, point) => {\n return bbox.ll.x <= point.x && point.x <= bbox.ur.x && bbox.ll.y <= point.y && point.y <= bbox.ur.y;\n};\n\n/* Returns either null, or a bbox (aka an ordered pair of points)\n * If there is only one point of overlap, a bbox with identical points\n * will be returned */\nconst getBboxOverlap = (b1, b2) => {\n // check if the bboxes overlap at all\n if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null;\n\n // find the middle two X values\n const lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;\n const upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x;\n\n // find the middle two Y values\n const lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;\n const upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y;\n\n // put those middle values together to get the overlap\n return {\n ll: {\n x: lowerX,\n y: lowerY\n },\n ur: {\n x: upperX,\n y: upperY\n }\n };\n};\n\n/* Javascript doesn't do integer math. Everything is\n * floating point with percision Number.EPSILON.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\n\nlet epsilon = Number.EPSILON;\n\n// IE Polyfill\nif (epsilon === undefined) epsilon = Math.pow(2, -52);\nconst EPSILON_SQ = epsilon * epsilon;\n\n/* FLP comparator */\nconst cmp = (a, b) => {\n // check if they're both 0\n if (-epsilon < a && a < epsilon) {\n if (-epsilon < b && b < epsilon) {\n return 0;\n }\n }\n\n // check if they're flp equal\n const ab = a - b;\n if (ab * ab < EPSILON_SQ * a * b) {\n return 0;\n }\n\n // normal comparison\n return a < b ? -1 : 1;\n};\n\n/**\n * This class rounds incoming values sufficiently so that\n * floating points problems are, for the most part, avoided.\n *\n * Incoming points are have their x & y values tested against\n * all previously seen x & y values. If either is 'too close'\n * to a previously seen value, it's value is 'snapped' to the\n * previously seen value.\n *\n * All points should be rounded by this class before being\n * stored in any data structures in the rest of this algorithm.\n */\n\nclass PtRounder {\n constructor() {\n this.reset();\n }\n reset() {\n this.xRounder = new CoordRounder();\n this.yRounder = new CoordRounder();\n }\n round(x, y) {\n return {\n x: this.xRounder.round(x),\n y: this.yRounder.round(y)\n };\n }\n}\nclass CoordRounder {\n constructor() {\n this.tree = new SplayTree();\n // preseed with 0 so we don't end up with values < Number.EPSILON\n this.round(0);\n }\n\n // Note: this can rounds input values backwards or forwards.\n // You might ask, why not restrict this to just rounding\n // forwards? Wouldn't that allow left endpoints to always\n // remain left endpoints during splitting (never change to\n // right). No - it wouldn't, because we snap intersections\n // to endpoints (to establish independence from the segment\n // angle for t-intersections).\n round(coord) {\n const node = this.tree.add(coord);\n const prevNode = this.tree.prev(node);\n if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {\n this.tree.remove(coord);\n return prevNode.key;\n }\n const nextNode = this.tree.next(node);\n if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {\n this.tree.remove(coord);\n return nextNode.key;\n }\n return coord;\n }\n}\n\n// singleton available by import\nconst rounder = new PtRounder();\n\n/* Cross Product of two vectors with first point at origin */\nconst crossProduct = (a, b) => a.x * b.y - a.y * b.x;\n\n/* Dot Product of two vectors with first point at origin */\nconst dotProduct = (a, b) => a.x * b.x + a.y * b.y;\n\n/* Comparator for two vectors with same starting point */\nconst compareVectorAngles = (basePt, endPt1, endPt2) => {\n const res = orient2d(basePt.x, basePt.y, endPt1.x, endPt1.y, endPt2.x, endPt2.y);\n if (res > 0) return -1;\n if (res < 0) return 1;\n return 0;\n};\nconst length = v => Math.sqrt(dotProduct(v, v));\n\n/* Get the sine of the angle from pShared -> pAngle to pShaed -> pBase */\nconst sineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n const vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return crossProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n};\n\n/* Get the cosine of the angle from pShared -> pAngle to pShaed -> pBase */\nconst cosineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n const vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return dotProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n};\n\n/* Get the x coordinate where the given line (defined by a point and vector)\n * crosses the horizontal line with the given y coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nconst horizontalIntersection = (pt, v, y) => {\n if (v.y === 0) return null;\n return {\n x: pt.x + v.x / v.y * (y - pt.y),\n y: y\n };\n};\n\n/* Get the y coordinate where the given line (defined by a point and vector)\n * crosses the vertical line with the given x coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nconst verticalIntersection = (pt, v, x) => {\n if (v.x === 0) return null;\n return {\n x: x,\n y: pt.y + v.y / v.x * (x - pt.x)\n };\n};\n\n/* Get the intersection of two lines, each defined by a base point and a vector.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nconst intersection$1 = (pt1, v1, pt2, v2) => {\n // take some shortcuts for vertical and horizontal lines\n // this also ensures we don't calculate an intersection and then discover\n // it's actually outside the bounding box of the line\n if (v1.x === 0) return verticalIntersection(pt2, v2, pt1.x);\n if (v2.x === 0) return verticalIntersection(pt1, v1, pt2.x);\n if (v1.y === 0) return horizontalIntersection(pt2, v2, pt1.y);\n if (v2.y === 0) return horizontalIntersection(pt1, v1, pt2.y);\n\n // General case for non-overlapping segments.\n // This algorithm is based on Schneider and Eberly.\n // http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - pg 244\n\n const kross = crossProduct(v1, v2);\n if (kross == 0) return null;\n const ve = {\n x: pt2.x - pt1.x,\n y: pt2.y - pt1.y\n };\n const d1 = crossProduct(ve, v1) / kross;\n const d2 = crossProduct(ve, v2) / kross;\n\n // take the average of the two calculations to minimize rounding error\n const x1 = pt1.x + d2 * v1.x,\n x2 = pt2.x + d1 * v2.x;\n const y1 = pt1.y + d2 * v1.y,\n y2 = pt2.y + d1 * v2.y;\n const x = (x1 + x2) / 2;\n const y = (y1 + y2) / 2;\n return {\n x: x,\n y: y\n };\n};\n\nclass SweepEvent {\n // for ordering sweep events in the sweep event queue\n static compare(a, b) {\n // favor event with a point that the sweep line hits first\n const ptCmp = SweepEvent.comparePoints(a.point, b.point);\n if (ptCmp !== 0) return ptCmp;\n\n // the points are the same, so link them if needed\n if (a.point !== b.point) a.link(b);\n\n // favor right events over left\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1;\n\n // we have two matching left or right endpoints\n // ordering of this case is the same as for their segments\n return Segment.compare(a.segment, b.segment);\n }\n\n // for ordering points in sweep line order\n static comparePoints(aPt, bPt) {\n if (aPt.x < bPt.x) return -1;\n if (aPt.x > bPt.x) return 1;\n if (aPt.y < bPt.y) return -1;\n if (aPt.y > bPt.y) return 1;\n return 0;\n }\n\n // Warning: 'point' input will be modified and re-used (for performance)\n constructor(point, isLeft) {\n if (point.events === undefined) point.events = [this];else point.events.push(this);\n this.point = point;\n this.isLeft = isLeft;\n // this.segment, this.otherSE set by factory\n }\n link(other) {\n if (other.point === this.point) {\n throw new Error(\"Tried to link already linked events\");\n }\n const otherEvents = other.point.events;\n for (let i = 0, iMax = otherEvents.length; i < iMax; i++) {\n const evt = otherEvents[i];\n this.point.events.push(evt);\n evt.point = this.point;\n }\n this.checkForConsuming();\n }\n\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n checkForConsuming() {\n // FIXME: The loops in this method run O(n^2) => no good.\n // Maintain little ordered sweep event trees?\n // Can we maintaining an ordering that avoids the need\n // for the re-sorting with getLeftmostComparator in geom-out?\n\n // Compare each pair of events to see if other events also match\n const numEvents = this.point.events.length;\n for (let i = 0; i < numEvents; i++) {\n const evt1 = this.point.events[i];\n if (evt1.segment.consumedBy !== undefined) continue;\n for (let j = i + 1; j < numEvents; j++) {\n const evt2 = this.point.events[j];\n if (evt2.consumedBy !== undefined) continue;\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;\n evt1.segment.consume(evt2.segment);\n }\n }\n }\n getAvailableLinkedEvents() {\n // point.events is always of length 2 or greater\n const events = [];\n for (let i = 0, iMax = this.point.events.length; i < iMax; i++) {\n const evt = this.point.events[i];\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt);\n }\n }\n return events;\n }\n\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n getLeftmostComparator(baseEvent) {\n const cache = new Map();\n const fillCache = linkedEvent => {\n const nextEvent = linkedEvent.otherSE;\n cache.set(linkedEvent, {\n sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point)\n });\n };\n return (a, b) => {\n if (!cache.has(a)) fillCache(a);\n if (!cache.has(b)) fillCache(b);\n const {\n sine: asine,\n cosine: acosine\n } = cache.get(a);\n const {\n sine: bsine,\n cosine: bcosine\n } = cache.get(b);\n\n // both on or above x-axis\n if (asine >= 0 && bsine >= 0) {\n if (acosine < bcosine) return 1;\n if (acosine > bcosine) return -1;\n return 0;\n }\n\n // both below x-axis\n if (asine < 0 && bsine < 0) {\n if (acosine < bcosine) return -1;\n if (acosine > bcosine) return 1;\n return 0;\n }\n\n // one above x-axis, one below\n if (bsine < asine) return -1;\n if (bsine > asine) return 1;\n return 0;\n };\n }\n}\n\n// Give segments unique ID's to get consistent sorting of\n// segments and sweep events when all else is identical\nlet segmentId = 0;\nclass Segment {\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n static compare(a, b) {\n const alx = a.leftSE.point.x;\n const blx = b.leftSE.point.x;\n const arx = a.rightSE.point.x;\n const brx = b.rightSE.point.x;\n\n // check if they're even in the same vertical plane\n if (brx < alx) return 1;\n if (arx < blx) return -1;\n const aly = a.leftSE.point.y;\n const bly = b.leftSE.point.y;\n const ary = a.rightSE.point.y;\n const bry = b.rightSE.point.y;\n\n // is left endpoint of segment B the right-more?\n if (alx < blx) {\n // are the two segments in the same horizontal plane?\n if (bly < aly && bly < ary) return 1;\n if (bly > aly && bly > ary) return -1;\n\n // is the B left endpoint colinear to segment A?\n const aCmpBLeft = a.comparePoint(b.leftSE.point);\n if (aCmpBLeft < 0) return 1;\n if (aCmpBLeft > 0) return -1;\n\n // is the A right endpoint colinear to segment B ?\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return -1;\n }\n\n // is left endpoint of segment A the right-more?\n if (alx > blx) {\n if (aly < bly && aly < bry) return -1;\n if (aly > bly && aly > bry) return 1;\n\n // is the A left endpoint colinear to segment B?\n const bCmpALeft = b.comparePoint(a.leftSE.point);\n if (bCmpALeft !== 0) return bCmpALeft;\n\n // is the B right endpoint colinear to segment A?\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return 1;\n }\n\n // if we get here, the two left endpoints are in the same\n // vertical plane, ie alx === blx\n\n // consider the lower left-endpoint to come first\n if (aly < bly) return -1;\n if (aly > bly) return 1;\n\n // left endpoints are identical\n // check for colinearity by using the left-more right endpoint\n\n // is the A right endpoint more left-more?\n if (arx < brx) {\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n }\n\n // is the B right endpoint more left-more?\n if (arx > brx) {\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n }\n if (arx !== brx) {\n // are these two [almost] vertical segments with opposite orientation?\n // if so, the one with the lower right endpoint comes first\n const ay = ary - aly;\n const ax = arx - alx;\n const by = bry - bly;\n const bx = brx - blx;\n if (ay > ax && by < bx) return 1;\n if (ay < ax && by > bx) return -1;\n }\n\n // we have colinear segments with matching orientation\n // consider the one with more left-more right endpoint to be first\n if (arx > brx) return 1;\n if (arx < brx) return -1;\n\n // if we get here, two two right endpoints are in the same\n // vertical plane, ie arx === brx\n\n // consider the lower right-endpoint to come first\n if (ary < bry) return -1;\n if (ary > bry) return 1;\n\n // right endpoints identical as well, so the segments are idential\n // fall back on creation order as consistent tie-breaker\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n\n // identical segment, ie a === b\n return 0;\n }\n\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n constructor(leftSE, rightSE, rings, windings) {\n this.id = ++segmentId;\n this.leftSE = leftSE;\n leftSE.segment = this;\n leftSE.otherSE = rightSE;\n this.rightSE = rightSE;\n rightSE.segment = this;\n rightSE.otherSE = leftSE;\n this.rings = rings;\n this.windings = windings;\n // left unset for performance, set later in algorithm\n // this.ringOut, this.consumedBy, this.prev\n }\n static fromRing(pt1, pt2, ring) {\n let leftPt, rightPt, winding;\n\n // ordering the two points according to sweep line ordering\n const cmpPts = SweepEvent.comparePoints(pt1, pt2);\n if (cmpPts < 0) {\n leftPt = pt1;\n rightPt = pt2;\n winding = 1;\n } else if (cmpPts > 0) {\n leftPt = pt2;\n rightPt = pt1;\n winding = -1;\n } else throw new Error(`Tried to create degenerate segment at [${pt1.x}, ${pt1.y}]`);\n const leftSE = new SweepEvent(leftPt, true);\n const rightSE = new SweepEvent(rightPt, false);\n return new Segment(leftSE, rightSE, [ring], [winding]);\n }\n\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n replaceRightSE(newRightSE) {\n this.rightSE = newRightSE;\n this.rightSE.segment = this;\n this.rightSE.otherSE = this.leftSE;\n this.leftSE.otherSE = this.rightSE;\n }\n bbox() {\n const y1 = this.leftSE.point.y;\n const y2 = this.rightSE.point.y;\n return {\n ll: {\n x: this.leftSE.point.x,\n y: y1 < y2 ? y1 : y2\n },\n ur: {\n x: this.rightSE.point.x,\n y: y1 > y2 ? y1 : y2\n }\n };\n }\n\n /* A vector from the left point to the right */\n vector() {\n return {\n x: this.rightSE.point.x - this.leftSE.point.x,\n y: this.rightSE.point.y - this.leftSE.point.y\n };\n }\n isAnEndpoint(pt) {\n return pt.x === this.leftSE.point.x && pt.y === this.leftSE.point.y || pt.x === this.rightSE.point.x && pt.y === this.rightSE.point.y;\n }\n\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n comparePoint(point) {\n if (this.isAnEndpoint(point)) return 0;\n const lPt = this.leftSE.point;\n const rPt = this.rightSE.point;\n const v = this.vector();\n\n // Exactly vertical segments.\n if (lPt.x === rPt.x) {\n if (point.x === lPt.x) return 0;\n return point.x < lPt.x ? 1 : -1;\n }\n\n // Nearly vertical segments with an intersection.\n // Check to see where a point on the line with matching Y coordinate is.\n const yDist = (point.y - lPt.y) / v.y;\n const xFromYDist = lPt.x + yDist * v.x;\n if (point.x === xFromYDist) return 0;\n\n // General case.\n // Check to see where a point on the line with matching X coordinate is.\n const xDist = (point.x - lPt.x) / v.x;\n const yFromXDist = lPt.y + xDist * v.y;\n if (point.y === yFromXDist) return 0;\n return point.y < yFromXDist ? -1 : 1;\n }\n\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n getIntersection(other) {\n // If bboxes don't overlap, there can't be any intersections\n const tBbox = this.bbox();\n const oBbox = other.bbox();\n const bboxOverlap = getBboxOverlap(tBbox, oBbox);\n if (bboxOverlap === null) return null;\n\n // We first check to see if the endpoints can be considered intersections.\n // This will 'snap' intersections to endpoints if possible, and will\n // handle cases of colinearity.\n\n const tlp = this.leftSE.point;\n const trp = this.rightSE.point;\n const olp = other.leftSE.point;\n const orp = other.rightSE.point;\n\n // does each endpoint touch the other segment?\n // note that we restrict the 'touching' definition to only allow segments\n // to touch endpoints that lie forward from where we are in the sweep line pass\n const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;\n const touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;\n const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;\n const touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0;\n\n // do left endpoints match?\n if (touchesThisLSE && touchesOtherLSE) {\n // these two cases are for colinear segments with matching left\n // endpoints, and one segment being longer than the other\n if (touchesThisRSE && !touchesOtherRSE) return trp;\n if (!touchesThisRSE && touchesOtherRSE) return orp;\n // either the two segments match exactly (two trival intersections)\n // or just on their left endpoint (one trivial intersection\n return null;\n }\n\n // does this left endpoint matches (other doesn't)\n if (touchesThisLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesOtherRSE) {\n if (tlp.x === orp.x && tlp.y === orp.y) return null;\n }\n // t-intersection on left endpoint\n return tlp;\n }\n\n // does other left endpoint matches (this doesn't)\n if (touchesOtherLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesThisRSE) {\n if (trp.x === olp.x && trp.y === olp.y) return null;\n }\n // t-intersection on left endpoint\n return olp;\n }\n\n // trivial intersection on right endpoints\n if (touchesThisRSE && touchesOtherRSE) return null;\n\n // t-intersections on just one right endpoint\n if (touchesThisRSE) return trp;\n if (touchesOtherRSE) return orp;\n\n // None of our endpoints intersect. Look for a general intersection between\n // infinite lines laid over the segments\n const pt = intersection$1(tlp, this.vector(), olp, other.vector());\n\n // are the segments parrallel? Note that if they were colinear with overlap,\n // they would have an endpoint intersection and that case was already handled above\n if (pt === null) return null;\n\n // is the intersection found between the lines not on the segments?\n if (!isInBbox(bboxOverlap, pt)) return null;\n\n // round the the computed point if needed\n return rounder.round(pt.x, pt.y);\n }\n\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n split(point) {\n const newEvents = [];\n const alreadyLinked = point.events !== undefined;\n const newLeftSE = new SweepEvent(point, true);\n const newRightSE = new SweepEvent(point, false);\n const oldRightSE = this.rightSE;\n this.replaceRightSE(newRightSE);\n newEvents.push(newRightSE);\n newEvents.push(newLeftSE);\n const newSeg = new Segment(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice());\n\n // when splitting a nearly vertical downward-facing segment,\n // sometimes one of the resulting new segments is vertical, in which\n // case its left and right events may need to be swapped\n if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {\n newSeg.swapEvents();\n }\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents();\n }\n\n // in the point we just used to create new sweep events with was already\n // linked to other events, we need to check if either of the affected\n // segments should be consumed\n if (alreadyLinked) {\n newLeftSE.checkForConsuming();\n newRightSE.checkForConsuming();\n }\n return newEvents;\n }\n\n /* Swap which event is left and right */\n swapEvents() {\n const tmpEvt = this.rightSE;\n this.rightSE = this.leftSE;\n this.leftSE = tmpEvt;\n this.leftSE.isLeft = true;\n this.rightSE.isLeft = false;\n for (let i = 0, iMax = this.windings.length; i < iMax; i++) {\n this.windings[i] *= -1;\n }\n }\n\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n consume(other) {\n let consumer = this;\n let consumee = other;\n while (consumer.consumedBy) consumer = consumer.consumedBy;\n while (consumee.consumedBy) consumee = consumee.consumedBy;\n const cmp = Segment.compare(consumer, consumee);\n if (cmp === 0) return; // already consumed\n // the winner of the consumption is the earlier segment\n // according to sweep line ordering\n if (cmp > 0) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n\n // make sure a segment doesn't consume it's prev\n if (consumer.prev === consumee) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n for (let i = 0, iMax = consumee.rings.length; i < iMax; i++) {\n const ring = consumee.rings[i];\n const winding = consumee.windings[i];\n const index = consumer.rings.indexOf(ring);\n if (index === -1) {\n consumer.rings.push(ring);\n consumer.windings.push(winding);\n } else consumer.windings[index] += winding;\n }\n consumee.rings = null;\n consumee.windings = null;\n consumee.consumedBy = consumer;\n\n // mark sweep events consumed as to maintain ordering in sweep event queue\n consumee.leftSE.consumedBy = consumer.leftSE;\n consumee.rightSE.consumedBy = consumer.rightSE;\n }\n\n /* The first segment previous segment chain that is in the result */\n prevInResult() {\n if (this._prevInResult !== undefined) return this._prevInResult;\n if (!this.prev) this._prevInResult = null;else if (this.prev.isInResult()) this._prevInResult = this.prev;else this._prevInResult = this.prev.prevInResult();\n return this._prevInResult;\n }\n beforeState() {\n if (this._beforeState !== undefined) return this._beforeState;\n if (!this.prev) this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: []\n };else {\n const seg = this.prev.consumedBy || this.prev;\n this._beforeState = seg.afterState();\n }\n return this._beforeState;\n }\n afterState() {\n if (this._afterState !== undefined) return this._afterState;\n const beforeState = this.beforeState();\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: []\n };\n const ringsAfter = this._afterState.rings;\n const windingsAfter = this._afterState.windings;\n const mpsAfter = this._afterState.multiPolys;\n\n // calculate ringsAfter, windingsAfter\n for (let i = 0, iMax = this.rings.length; i < iMax; i++) {\n const ring = this.rings[i];\n const winding = this.windings[i];\n const index = ringsAfter.indexOf(ring);\n if (index === -1) {\n ringsAfter.push(ring);\n windingsAfter.push(winding);\n } else windingsAfter[index] += winding;\n }\n\n // calcualte polysAfter\n const polysAfter = [];\n const polysExclude = [];\n for (let i = 0, iMax = ringsAfter.length; i < iMax; i++) {\n if (windingsAfter[i] === 0) continue; // non-zero rule\n const ring = ringsAfter[i];\n const poly = ring.poly;\n if (polysExclude.indexOf(poly) !== -1) continue;\n if (ring.isExterior) polysAfter.push(poly);else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);\n const index = polysAfter.indexOf(ring.poly);\n if (index !== -1) polysAfter.splice(index, 1);\n }\n }\n\n // calculate multiPolysAfter\n for (let i = 0, iMax = polysAfter.length; i < iMax; i++) {\n const mp = polysAfter[i].multiPoly;\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);\n }\n return this._afterState;\n }\n\n /* Is this segment part of the final result? */\n isInResult() {\n // if we've been consumed, we're not in the result\n if (this.consumedBy) return false;\n if (this._isInResult !== undefined) return this._isInResult;\n const mpsBefore = this.beforeState().multiPolys;\n const mpsAfter = this.afterState().multiPolys;\n switch (operation.type) {\n case \"union\":\n {\n // UNION - included iff:\n // * On one side of us there is 0 poly interiors AND\n // * On the other side there is 1 or more.\n const noBefores = mpsBefore.length === 0;\n const noAfters = mpsAfter.length === 0;\n this._isInResult = noBefores !== noAfters;\n break;\n }\n case \"intersection\":\n {\n // INTERSECTION - included iff:\n // * on one side of us all multipolys are rep. with poly interiors AND\n // * on the other side of us, not all multipolys are repsented\n // with poly interiors\n let least;\n let most;\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length;\n most = mpsAfter.length;\n } else {\n least = mpsAfter.length;\n most = mpsBefore.length;\n }\n this._isInResult = most === operation.numMultiPolys && least < most;\n break;\n }\n case \"xor\":\n {\n // XOR - included iff:\n // * the difference between the number of multipolys represented\n // with poly interiors on our two sides is an odd number\n const diff = Math.abs(mpsBefore.length - mpsAfter.length);\n this._isInResult = diff % 2 === 1;\n break;\n }\n case \"difference\":\n {\n // DIFFERENCE included iff:\n // * on exactly one side, we have just the subject\n const isJustSubject = mps => mps.length === 1 && mps[0].isSubject;\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);\n break;\n }\n default:\n throw new Error(`Unrecognized operation type found ${operation.type}`);\n }\n return this._isInResult;\n }\n}\n\nclass RingIn {\n constructor(geomRing, poly, isExterior) {\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.poly = poly;\n this.isExterior = isExterior;\n this.segments = [];\n if (typeof geomRing[0][0] !== \"number\" || typeof geomRing[0][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n const firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);\n this.bbox = {\n ll: {\n x: firstPoint.x,\n y: firstPoint.y\n },\n ur: {\n x: firstPoint.x,\n y: firstPoint.y\n }\n };\n let prevPoint = firstPoint;\n for (let i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (typeof geomRing[i][0] !== \"number\" || typeof geomRing[i][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n let point = rounder.round(geomRing[i][0], geomRing[i][1]);\n // skip repeated points\n if (point.x === prevPoint.x && point.y === prevPoint.y) continue;\n this.segments.push(Segment.fromRing(prevPoint, point, this));\n if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;\n if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;\n if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;\n if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;\n prevPoint = point;\n }\n // add segment from last to first if last is not the same as first\n if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));\n }\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.segments.length; i < iMax; i++) {\n const segment = this.segments[i];\n sweepEvents.push(segment.leftSE);\n sweepEvents.push(segment.rightSE);\n }\n return sweepEvents;\n }\n}\nclass PolyIn {\n constructor(geomPoly, multiPoly) {\n if (!Array.isArray(geomPoly)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.exteriorRing = new RingIn(geomPoly[0], this, true);\n // copy by value\n this.bbox = {\n ll: {\n x: this.exteriorRing.bbox.ll.x,\n y: this.exteriorRing.bbox.ll.y\n },\n ur: {\n x: this.exteriorRing.bbox.ur.x,\n y: this.exteriorRing.bbox.ur.y\n }\n };\n this.interiorRings = [];\n for (let i = 1, iMax = geomPoly.length; i < iMax; i++) {\n const ring = new RingIn(geomPoly[i], this, false);\n if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;\n if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;\n if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;\n if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;\n this.interiorRings.push(ring);\n }\n this.multiPoly = multiPoly;\n }\n getSweepEvents() {\n const sweepEvents = this.exteriorRing.getSweepEvents();\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringSweepEvents = this.interiorRings[i].getSweepEvents();\n for (let j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n}\nclass MultiPolyIn {\n constructor(geom, isSubject) {\n if (!Array.isArray(geom)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n try {\n // if the input looks like a polygon, convert it to a multipolygon\n if (typeof geom[0][0][0] === \"number\") geom = [geom];\n } catch (ex) {\n // The input is either malformed or has empty arrays.\n // In either case, it will be handled later on.\n }\n this.polys = [];\n this.bbox = {\n ll: {\n x: Number.POSITIVE_INFINITY,\n y: Number.POSITIVE_INFINITY\n },\n ur: {\n x: Number.NEGATIVE_INFINITY,\n y: Number.NEGATIVE_INFINITY\n }\n };\n for (let i = 0, iMax = geom.length; i < iMax; i++) {\n const poly = new PolyIn(geom[i], this);\n if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;\n if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;\n if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;\n if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;\n this.polys.push(poly);\n }\n this.isSubject = isSubject;\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polySweepEvents = this.polys[i].getSweepEvents();\n for (let j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n}\n\nclass RingOut {\n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n static factory(allSegments) {\n const ringsOut = [];\n for (let i = 0, iMax = allSegments.length; i < iMax; i++) {\n const segment = allSegments[i];\n if (!segment.isInResult() || segment.ringOut) continue;\n let prevEvent = null;\n let event = segment.leftSE;\n let nextEvent = segment.rightSE;\n const events = [event];\n const startingPoint = event.point;\n const intersectionLEs = [];\n\n /* Walk the chain of linked events to form a closed ring */\n while (true) {\n prevEvent = event;\n event = nextEvent;\n events.push(event);\n\n /* Is the ring complete? */\n if (event.point === startingPoint) break;\n while (true) {\n const availableLEs = event.getAvailableLinkedEvents();\n\n /* Did we hit a dead end? This shouldn't happen.\n * Indicates some earlier part of the algorithm malfunctioned. */\n if (availableLEs.length === 0) {\n const firstPt = events[0].point;\n const lastPt = events[events.length - 1].point;\n throw new Error(`Unable to complete output ring starting at [${firstPt.x},` + ` ${firstPt.y}]. Last matching segment found ends at` + ` [${lastPt.x}, ${lastPt.y}].`);\n }\n\n /* Only one way to go, so cotinue on the path */\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE;\n break;\n }\n\n /* We must have an intersection. Check for a completed loop */\n let indexLE = null;\n for (let j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j;\n break;\n }\n }\n /* Found a completed loop. Cut that off and make a ring */\n if (indexLE !== null) {\n const intersectionLE = intersectionLEs.splice(indexLE)[0];\n const ringEvents = events.splice(intersectionLE.index);\n ringEvents.unshift(ringEvents[0].otherSE);\n ringsOut.push(new RingOut(ringEvents.reverse()));\n continue;\n }\n /* register the intersection */\n intersectionLEs.push({\n index: events.length,\n point: event.point\n });\n /* Choose the left-most option to continue the walk */\n const comparator = event.getLeftmostComparator(prevEvent);\n nextEvent = availableLEs.sort(comparator)[0].otherSE;\n break;\n }\n }\n ringsOut.push(new RingOut(events));\n }\n return ringsOut;\n }\n constructor(events) {\n this.events = events;\n for (let i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this;\n }\n this.poly = null;\n }\n getGeom() {\n // Remove superfluous points (ie extra points along a straight line),\n let prevPt = this.events[0].point;\n const points = [prevPt];\n for (let i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n const pt = this.events[i].point;\n const nextPt = this.events[i + 1].point;\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) continue;\n points.push(pt);\n prevPt = pt;\n }\n\n // ring was all (within rounding error of angle calc) colinear points\n if (points.length === 1) return null;\n\n // check if the starting point is necessary\n const pt = points[0];\n const nextPt = points[1];\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) points.shift();\n points.push(points[0]);\n const step = this.isExteriorRing() ? 1 : -1;\n const iStart = this.isExteriorRing() ? 0 : points.length - 1;\n const iEnd = this.isExteriorRing() ? points.length : -1;\n const orderedPoints = [];\n for (let i = iStart; i != iEnd; i += step) orderedPoints.push([points[i].x, points[i].y]);\n return orderedPoints;\n }\n isExteriorRing() {\n if (this._isExteriorRing === undefined) {\n const enclosing = this.enclosingRing();\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;\n }\n return this._isExteriorRing;\n }\n enclosingRing() {\n if (this._enclosingRing === undefined) {\n this._enclosingRing = this._calcEnclosingRing();\n }\n return this._enclosingRing;\n }\n\n /* Returns the ring that encloses this one, if any */\n _calcEnclosingRing() {\n // start with the ealier sweep line event so that the prevSeg\n // chain doesn't lead us inside of a loop of ours\n let leftMostEvt = this.events[0];\n for (let i = 1, iMax = this.events.length; i < iMax; i++) {\n const evt = this.events[i];\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;\n }\n let prevSeg = leftMostEvt.segment.prevInResult();\n let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n while (true) {\n // no segment found, thus no ring can enclose us\n if (!prevSeg) return null;\n\n // no segments below prev segment found, thus the ring of the prev\n // segment must loop back around and enclose us\n if (!prevPrevSeg) return prevSeg.ringOut;\n\n // if the two segments are of different rings, the ring of the prev\n // segment must either loop around us or the ring of the prev prev\n // seg, which would make us and the ring of the prev peers\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut;\n } else return prevSeg.ringOut.enclosingRing();\n }\n\n // two segments are from the same ring, so this was a penisula\n // of that ring. iterate downward, keep searching\n prevSeg = prevPrevSeg.prevInResult();\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n }\n }\n}\nclass PolyOut {\n constructor(exteriorRing) {\n this.exteriorRing = exteriorRing;\n exteriorRing.poly = this;\n this.interiorRings = [];\n }\n addInterior(ring) {\n this.interiorRings.push(ring);\n ring.poly = this;\n }\n getGeom() {\n const geom = [this.exteriorRing.getGeom()];\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (geom[0] === null) return null;\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringGeom = this.interiorRings[i].getGeom();\n // interior ring was all (within rounding error of angle calc) colinear points\n if (ringGeom === null) continue;\n geom.push(ringGeom);\n }\n return geom;\n }\n}\nclass MultiPolyOut {\n constructor(rings) {\n this.rings = rings;\n this.polys = this._composePolys(rings);\n }\n getGeom() {\n const geom = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polyGeom = this.polys[i].getGeom();\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (polyGeom === null) continue;\n geom.push(polyGeom);\n }\n return geom;\n }\n _composePolys(rings) {\n const polys = [];\n for (let i = 0, iMax = rings.length; i < iMax; i++) {\n const ring = rings[i];\n if (ring.poly) continue;\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring));else {\n const enclosingRing = ring.enclosingRing();\n if (!enclosingRing.poly) polys.push(new PolyOut(enclosingRing));\n enclosingRing.poly.addInterior(ring);\n }\n }\n return polys;\n }\n}\n\n/**\n * NOTE: We must be careful not to change any segments while\n * they are in the SplayTree. AFAIK, there's no way to tell\n * the tree to rebalance itself - thus before splitting\n * a segment that's in the tree, we remove it from the tree,\n * do the split, then re-insert it. (Even though splitting a\n * segment *shouldn't* change its correct position in the\n * sweep line tree, the reality is because of rounding errors,\n * it sometimes does.)\n */\n\nclass SweepLine {\n constructor(queue) {\n let comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Segment.compare;\n this.queue = queue;\n this.tree = new SplayTree(comparator);\n this.segments = [];\n }\n process(event) {\n const segment = event.segment;\n const newEvents = [];\n\n // if we've already been consumed by another segment,\n // clean up our body parts and get out\n if (event.consumedBy) {\n if (event.isLeft) this.queue.remove(event.otherSE);else this.tree.remove(segment);\n return newEvents;\n }\n const node = event.isLeft ? this.tree.add(segment) : this.tree.find(segment);\n if (!node) throw new Error(`Unable to find segment #${segment.id} ` + `[${segment.leftSE.point.x}, ${segment.leftSE.point.y}] -> ` + `[${segment.rightSE.point.x}, ${segment.rightSE.point.y}] ` + \"in SweepLine tree.\");\n let prevNode = node;\n let nextNode = node;\n let prevSeg = undefined;\n let nextSeg = undefined;\n\n // skip consumed segments still in tree\n while (prevSeg === undefined) {\n prevNode = this.tree.prev(prevNode);\n if (prevNode === null) prevSeg = null;else if (prevNode.key.consumedBy === undefined) prevSeg = prevNode.key;\n }\n\n // skip consumed segments still in tree\n while (nextSeg === undefined) {\n nextNode = this.tree.next(nextNode);\n if (nextNode === null) nextSeg = null;else if (nextNode.key.consumedBy === undefined) nextSeg = nextNode.key;\n }\n if (event.isLeft) {\n // Check for intersections against the previous segment in the sweep line\n let prevMySplitter = null;\n if (prevSeg) {\n const prevInter = prevSeg.getIntersection(segment);\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;\n if (!prevSeg.isAnEndpoint(prevInter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n\n // Check for intersections against the next segment in the sweep line\n let nextMySplitter = null;\n if (nextSeg) {\n const nextInter = nextSeg.getIntersection(segment);\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;\n if (!nextSeg.isAnEndpoint(nextInter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n\n // For simplicity, even if we find more than one intersection we only\n // spilt on the 'earliest' (sweep-line style) of the intersections.\n // The other intersection will be handled in a future process().\n if (prevMySplitter !== null || nextMySplitter !== null) {\n let mySplitter = null;\n if (prevMySplitter === null) mySplitter = nextMySplitter;else if (nextMySplitter === null) mySplitter = prevMySplitter;else {\n const cmpSplitters = SweepEvent.comparePoints(prevMySplitter, nextMySplitter);\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;\n }\n\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n this.queue.remove(segment.rightSE);\n newEvents.push(segment.rightSE);\n const newEventsFromSplit = segment.split(mySplitter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (newEvents.length > 0) {\n // We found some intersections, so re-do the current event to\n // make sure sweep line ordering is totally consistent for later\n // use with the segment 'prev' pointers\n this.tree.remove(segment);\n newEvents.push(event);\n } else {\n // done with left event\n this.segments.push(segment);\n segment.prev = prevSeg;\n }\n } else {\n // event.isRight\n\n // since we're about to be removed from the sweep line, check for\n // intersections between our previous and next segments\n if (prevSeg && nextSeg) {\n const inter = prevSeg.getIntersection(nextSeg);\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (!nextSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n this.tree.remove(segment);\n }\n return newEvents;\n }\n\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n _splitSafely(seg, pt) {\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n // removeNode() doesn't work, so have re-find the seg\n // https://github.com/w8r/splay-tree/pull/5\n this.tree.remove(seg);\n const rightSE = seg.rightSE;\n this.queue.remove(rightSE);\n const newEvents = seg.split(pt);\n newEvents.push(rightSE);\n // splitting can trigger consumption\n if (seg.consumedBy === undefined) this.tree.add(seg);\n return newEvents;\n }\n}\n\n// Limits on iterative processes to prevent infinite loops - usually caused by floating-point math round-off errors.\nconst POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== \"undefined\" && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1000000;\nconst POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== \"undefined\" && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1000000;\nclass Operation {\n run(type, geom, moreGeoms) {\n operation.type = type;\n rounder.reset();\n\n /* Convert inputs to MultiPoly objects */\n const multipolys = [new MultiPolyIn(geom, true)];\n for (let i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new MultiPolyIn(moreGeoms[i], false));\n }\n operation.numMultiPolys = multipolys.length;\n\n /* BBox optimization for difference operation\n * If the bbox of a multipolygon that's part of the clipping doesn't\n * intersect the bbox of the subject at all, we can just drop that\n * multiploygon. */\n if (operation.type === \"difference\") {\n // in place removal\n const subject = multipolys[0];\n let i = 1;\n while (i < multipolys.length) {\n if (getBboxOverlap(multipolys[i].bbox, subject.bbox) !== null) i++;else multipolys.splice(i, 1);\n }\n }\n\n /* BBox optimization for intersection operation\n * If we can find any pair of multipolygons whose bbox does not overlap,\n * then the result will be empty. */\n if (operation.type === \"intersection\") {\n // TODO: this is O(n^2) in number of polygons. By sorting the bboxes,\n // it could be optimized to O(n * ln(n))\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const mpA = multipolys[i];\n for (let j = i + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return [];\n }\n }\n }\n\n /* Put segment endpoints in a priority queue */\n const queue = new SplayTree(SweepEvent.compare);\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const sweepEvents = multipolys[i].getSweepEvents();\n for (let j = 0, jMax = sweepEvents.length; j < jMax; j++) {\n queue.insert(sweepEvents[j]);\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when putting segment endpoints in a priority queue \" + \"(queue size too big).\");\n }\n }\n }\n\n /* Pass the sweep line over those endpoints */\n const sweepLine = new SweepLine(queue);\n let prevQueueSize = queue.size;\n let node = queue.pop();\n while (node) {\n const evt = node.key;\n if (queue.size === prevQueueSize) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n const seg = evt.segment;\n throw new Error(`Unable to pop() ${evt.isLeft ? \"left\" : \"right\"} SweepEvent ` + `[${evt.point.x}, ${evt.point.y}] from segment #${seg.id} ` + `[${seg.leftSE.point.x}, ${seg.leftSE.point.y}] -> ` + `[${seg.rightSE.point.x}, ${seg.rightSE.point.y}] from queue.`);\n }\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when passing sweep line over endpoints \" + \"(queue size too big).\");\n }\n if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when passing sweep line over endpoints \" + \"(too many sweep line segments).\");\n }\n const newEvents = sweepLine.process(evt);\n for (let i = 0, iMax = newEvents.length; i < iMax; i++) {\n const evt = newEvents[i];\n if (evt.consumedBy === undefined) queue.insert(evt);\n }\n prevQueueSize = queue.size;\n node = queue.pop();\n }\n\n // free some memory we don't need anymore\n rounder.reset();\n\n /* Collect and compile segments we're keeping into a multipolygon */\n const ringsOut = RingOut.factory(sweepLine.segments);\n const result = new MultiPolyOut(ringsOut);\n return result.getGeom();\n }\n}\n\n// singleton available by import\nconst operation = new Operation();\n\nconst union = function (geom) {\n for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n moreGeoms[_key - 1] = arguments[_key];\n }\n return operation.run(\"union\", geom, moreGeoms);\n};\nconst intersection = function (geom) {\n for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n moreGeoms[_key2 - 1] = arguments[_key2];\n }\n return operation.run(\"intersection\", geom, moreGeoms);\n};\nconst xor = function (geom) {\n for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n moreGeoms[_key3 - 1] = arguments[_key3];\n }\n return operation.run(\"xor\", geom, moreGeoms);\n};\nconst difference = function (subjectGeom) {\n for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n clippingGeoms[_key4 - 1] = arguments[_key4];\n }\n return operation.run(\"difference\", subjectGeom, clippingGeoms);\n};\nvar index = {\n union: union,\n intersection: intersection,\n xor: xor,\n difference: difference\n};\n\nexport { index as default };\n","// index.ts\nimport polygonClipping from \"polygon-clipping\";\nimport { polygon, multiPolygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nfunction difference(features) {\n const geoms = [];\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates);\n });\n if (geoms.length < 2) {\n throw new Error(\"Must have at least two features\");\n }\n const properties = features.features[0].properties || {};\n const differenced = polygonClipping.difference(geoms[0], ...geoms.slice(1));\n if (differenced.length === 0)\n return null;\n if (differenced.length === 1)\n return polygon(differenced[0], properties);\n return multiPolygon(differenced, properties);\n}\nvar turf_difference_default = difference;\nexport {\n turf_difference_default as default,\n difference\n};\n//# sourceMappingURL=index.js.map","import buffer from \"@turf/buffer\";\nimport difference from \"@turf/difference\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport type {\n Feature,\n FeatureCollection,\n MultiPolygon,\n Polygon,\n Position,\n} from \"geojson\";\n\n// see https://maplibre.org/maplibre-gl-js-docs/example/line-across-180th-meridian/\nfunction fixRing(ring: Position[]) {\n let prev: Position | undefined = undefined;\n\n for (const c of ring) {\n if (prev && c[0] - prev[0] >= 180) {\n c[0] -= 360;\n } else if (prev && c[0] - prev[0] < -180) {\n c[0] += 360;\n }\n\n prev = c;\n }\n}\n\nexport function setMask(\n picked: Feature<Polygon | MultiPolygon>,\n setData: (data: FeatureCollection<Polygon | MultiPolygon>) => void,\n) {\n const diff = difference(\n featureCollection([\n polygon([\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ]),\n picked,\n ]),\n );\n\n if (!diff) {\n return;\n }\n\n diff.properties = { isMask: \"y\" };\n\n const fixed = buffer(picked, 0);\n\n if (!fixed) {\n return;\n }\n\n if (fixed.geometry.type === \"Polygon\") {\n for (const ring of fixed.geometry.coordinates) {\n fixRing(ring);\n }\n } else {\n for (const poly of fixed.geometry.coordinates) {\n for (const ring of poly) {\n fixRing(ring);\n }\n }\n }\n\n setData(featureCollection([fixed, diff]));\n}\n","import type { FeatureCollection, MultiPolygon, Polygon } from \"geojson\";\nimport { Feature, type MapBrowserEvent } from \"ol\";\nimport type { FeatureLike } from \"ol/Feature\";\nimport type Map from \"ol/Map\";\nimport type { AnimationOptions, FitOptions } from \"ol/View\";\nimport {\n type Geometry as OlGeometry,\n GeometryCollection as OlGeometryCollection,\n LineString as OlLineString,\n MultiLineString as OlMultiLineString,\n MultiPolygon as OlMultiPolygon,\n Polygon as OlPolygon,\n Point,\n} from \"ol/geom\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport {\n fromLonLat,\n getUserProjection,\n toLonLat,\n transformExtent,\n} from \"ol/proj\";\nimport VectorSource from \"ol/source/Vector\";\nimport Fill from \"ol/style/Fill\";\nimport Icon from \"ol/style/Icon\";\nimport Stroke from \"ol/style/Stroke\";\nimport Style, { type StyleLike } from \"ol/style/Style\";\nimport Text from \"ol/style/Text\";\nimport type { FlatStyleLike } from \"ol/style/flat\";\nimport { setMask } from \"./mask\";\nimport type {\n BBox,\n Feature as FeatureType,\n MapController,\n MapEvent,\n Position,\n} from \"./types\";\n\nconst EPSG_4326 = \"EPSG:4326\";\n\nfunction defaultStyle(feature: FeatureLike) {\n const properties = feature.getProperties();\n\n const { isMask } = properties;\n\n const type = feature.getGeometry()?.getType();\n\n const weight = isMask\n ? 0\n : type === \"LineString\" || type === \"MultiLineString\"\n ? 3\n : 2;\n\n return new Style({\n stroke: isMask\n ? undefined\n : new Stroke({\n color: \"#3170fe\",\n lineDash: [weight, weight],\n width: weight,\n lineCap: \"butt\",\n }),\n fill: isMask\n ? new Fill({\n color: \"#00000020\",\n })\n : undefined,\n image: new Icon({\n src: `/icons/marker_${\n properties.isReverse\n ? \"reverse\"\n : properties.isSelected\n ? \"selected\"\n : \"unselected\"\n }.svg`,\n anchor: [0.5, 1],\n }),\n zIndex: properties.isSelected ? 2 : properties.isReverse ? 0 : 1,\n text:\n properties.isSelected && properties.tooltip\n ? new Text({\n backgroundFill: new Fill({ color: \"white\" }),\n text: properties.tooltip,\n offsetY: -40,\n backgroundStroke: new Stroke({\n color: \"white\",\n lineJoin: \"round\",\n width: 3,\n }),\n padding: [2, 0, 0, 2],\n })\n : undefined,\n });\n}\n\nexport function createOpenLayersMapController(\n map: Map,\n flyToOptions: AnimationOptions = {},\n flyToBounds: FitOptions = {},\n fullGeometryStyle: StyleLike | FlatStyleLike = defaultStyle,\n) {\n let prevSelected = -1;\n\n let prevHovered: string | undefined;\n\n let eventHandler: ((e: MapEvent) => void) | undefined;\n\n let reverseMarker: Feature | undefined;\n\n let indicatingReverse = false;\n\n const vectorLayer = new VectorLayer({\n updateWhileAnimating: true,\n });\n\n map.addLayer(vectorLayer);\n\n const source = new VectorSource({});\n\n vectorLayer.setSource(source);\n\n vectorLayer.setStyle(fullGeometryStyle);\n\n map.on(\"click\", (e) => {\n map.forEachFeatureAtPixel(e.pixel, (feature) => {\n const id = feature.getId() as string;\n\n if (!id) {\n return;\n }\n\n e.stopPropagation();\n\n eventHandler?.({ type: \"markerClick\", id });\n\n return feature;\n });\n });\n\n map.on(\"pointermove\", (e) => {\n const featureId = map.forEachFeatureAtPixel(e.pixel, (feature) => {\n return feature.getId() as string | undefined;\n });\n\n if (prevHovered === featureId) {\n return;\n }\n\n if (prevHovered) {\n eventHandler?.({\n type: \"markerMouseLeave\",\n id: prevHovered,\n });\n }\n\n if (featureId) {\n eventHandler?.({\n type: \"markerMouseEnter\",\n id: featureId,\n });\n }\n\n map.getTargetElement().style.cursor = featureId\n ? \"pointer\"\n : indicatingReverse\n ? \"crosshair\"\n : \"\";\n\n prevHovered = featureId;\n });\n\n function getProjection() {\n return getUserProjection() ?? map.getView().getProjection();\n }\n\n function fromWgs84(geometry: OlGeometry) {\n return geometry.transform(EPSG_4326, getProjection());\n }\n\n const handleMapClick = (e: MapBrowserEvent<PointerEvent>) => {\n eventHandler?.({\n type: \"mapClick\",\n coordinates: toLonLat(e.coordinate, getProjection()) as [number, number],\n });\n };\n\n return {\n setEventHandler(handler: undefined | ((e: MapEvent) => void)): void {\n if (handler) {\n eventHandler = handler;\n map.on(\"click\", handleMapClick);\n } else {\n eventHandler = undefined;\n map.un(\"click\", handleMapClick);\n }\n },\n\n flyTo(center: Position, zoom: number) {\n map.getView().animate({\n center: fromLonLat(center, getProjection()),\n zoom,\n duration: 2000,\n ...flyToOptions,\n });\n },\n\n fitBounds(bbox: BBox, padding: number, maxZoom: number): void {\n map.getView().fit(transformExtent(bbox, EPSG_4326, getProjection()), {\n padding: [padding, padding, padding, padding],\n maxZoom,\n duration: 2000,\n ...flyToBounds,\n });\n },\n\n indicateReverse(reverse: boolean): void {\n indicatingReverse = reverse;\n\n map.getTargetElement().style.cursor = reverse ? \"crosshair\" : \"\";\n },\n\n setReverseMarker(coordinates?: Position) {\n if (reverseMarker) {\n if (!coordinates) {\n source.removeFeature(reverseMarker);\n\n reverseMarker.dispose();\n\n reverseMarker = undefined;\n } else {\n (reverseMarker.getGeometry() as Point).setCoordinates(\n fromLonLat(coordinates, getProjection()),\n );\n }\n } else if (coordinates) {\n reverseMarker = new Feature(\n new Point(fromLonLat(coordinates, getProjection())),\n );\n\n reverseMarker.setProperties({ isReverse: true });\n\n source.addFeature(reverseMarker);\n }\n },\n\n setMarkers(\n markedFeatures: FeatureType[] | undefined,\n picked: FeatureType | undefined,\n ): void {\n function setData(data?: FeatureCollection<Polygon | MultiPolygon>) {\n if (!data) {\n return;\n }\n\n for (const f of data.features) {\n const geom =\n f.geometry.type === \"Polygon\"\n ? new OlPolygon(f.geometry.coordinates)\n : f.geometry.type === \"MultiPolygon\"\n ? new OlMultiPolygon(f.geometry.coordinates)\n : null;\n\n if (!geom) {\n continue;\n }\n\n source.addFeature(\n new Feature({\n isMask: !!f.properties?.isMask,\n geometry: fromWgs84(geom),\n }),\n );\n }\n }\n\n source.clear();\n\n if (reverseMarker) {\n source.addFeature(reverseMarker);\n }\n\n setData();\n\n if (picked) {\n let handled = false;\n\n if (picked.geometry.type === \"GeometryCollection\") {\n const geoms = picked.geometry.geometries\n .map((geometry) =>\n geometry.type === \"Polygon\"\n ? new OlPolygon(geometry.coordinates)\n : geometry.type === \"MultiPolygon\"\n ? new OlMultiPolygon(geometry.coordinates)\n : null,\n )\n .filter(<T>(a: T | null): a is T => !!a);\n\n if (geoms.length > 0) {\n source.addFeature(\n new Feature(fromWgs84(new OlGeometryCollection(geoms))),\n );\n\n handled = true;\n } else {\n for (const geometry of picked.geometry.geometries) {\n if (geometry.type === \"LineString\") {\n source.addFeature(\n new Feature(\n fromWgs84(new OlLineString(geometry.coordinates)),\n ),\n );\n\n handled = true;\n } else if (geometry.type === \"MultiLineString\") {\n source.addFeature(\n new Feature(\n fromWgs84(new OlMultiLineString(geometry.coordinates)),\n ),\n );\n }\n\n handled = true;\n }\n }\n }\n\n if (handled) {\n // nothing\n } else if (picked.geometry.type === \"Polygon\") {\n setMask(picked as FeatureType<Polygon>, setData);\n } else if (picked.geometry.type === \"MultiPolygon\") {\n setMask(picked as FeatureType<MultiPolygon>, setData);\n } else if (picked.geometry.type === \"LineString\") {\n source.addFeature(\n new Feature(\n fromWgs84(new OlLineString(picked.geometry.coordinates)),\n ),\n );\n\n return; // no pin for (multi)linestrings\n } else if (picked.geometry.type === \"MultiLineString\") {\n source.addFeature(\n new Feature(\n fromWgs84(new OlMultiLineString(picked.geometry.coordinates)),\n ),\n );\n\n return; // no pin for (multi)linestrings\n }\n\n source.addFeature(new Feature(fromWgs84(new Point(picked.center))));\n }\n\n for (const feature of markedFeatures ?? []) {\n if (feature === picked) {\n continue;\n }\n\n const marker = new Feature(\n new Point(fromLonLat(feature.center, getProjection())),\n );\n\n marker.setId(feature.id);\n\n marker.setProperties({\n fuzzy: !!feature.matching_text,\n tooltip:\n feature.place_type[0] === \"reverse\"\n ? feature.place_name\n : feature.place_name.replace(/,.*/, \"\"),\n });\n\n source.addFeature(marker);\n }\n },\n\n setSelectedMarker(index: number): void {\n const features = source.getFeatures();\n\n const offset = features[0]?.getProperties().isReverse ? 1 : 0;\n\n if (prevSelected > -1) {\n features[prevSelected + offset]?.setProperties({\n isSelected: false,\n });\n }\n\n if (index > -1) {\n features[index + offset]?.setProperties({\n isSelected: true,\n });\n }\n\n prevSelected = index;\n },\n\n getCenterAndZoom() {\n const view = map.getView();\n\n const center = view.getCenter();\n\n const zoom = view.getZoom();\n\n if (!center || zoom === undefined) {\n return undefined;\n }\n\n return [zoom, ...(toLonLat(center, getProjection()) as Position)];\n },\n } satisfies MapController;\n}\n"],"names":["earthRadius","factors","feature","geom","properties","options","feat","point","coordinates","isNumber","polygon","ring","j","featureCollection","features","fc","multiPolygon","radiansToLength","radians","units","factor","lengthToRadians","distance","num","coordEach","geojson","callback","excludeWrapCoord","k","l","geometry","stopG","coords","geometryMaybeCollection","wrapShrink","coordIndex","isGeometryCollection","type","isFeatureCollection","isFeature","stop","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","featureEach","i","geomEach","g","featureProperties","featureBBox","featureId","bbox","result","coord","center","ext","x","y","t","e","module","this","n","s","r","a","o","u","h","c","f","v","d","_","p","m","I","E","N","T","S","L","C","R","w","O","b","M","A","P","D","F","G","q","Y","z","X","B","U","V","H","Z","W","K","J","Q","$","tt","et","nt","it","rt","st","at","ot","ut","lt","ht","ct","ft","vt","gt","yt","dt","_t","pt","mt","kt","xt","It","Et","Nt","Tt","St","Lt","Ct","Rt","wt","Ot","bt","Mt","At","Pt","Dt","Ft","Gt","qt","Yt","zt","Xt","Bt","Ut","Vt","Ht","Zt","jt","Wt","Kt","Jt","Qt","$t","te","ee","ne","ie","re","se","ae","oe","ue","le","he","ce","fe","ve","ge","ye","de","_e","pe","ke","xe","Ie","Ee","Ne","Te","Se","Le","Ce","Re","we","Oe","be","Me","Ae","Pe","De","Fe","Ge","qe","Ye","ze","Xe","Be","Ue","Ve","He","Ze","je","We","Ke","Je","Qe","$e","tn","en","nn","rn","sn","an","on","un","ln","hn","cn","fn","vn","gn","yn","dn","_n","pn","In","mn","kn","xn","En","Nn","Tn","Sn","Ln","Cn","Rn","wn","On","bn","Mn","An","Pn","Dn","Fn","Gn","qn","Yn","zn","Xn","Bn","Un","Vn","Hn","Zn","jn","Wn","Kn","Jn","Qn","$n","si","ti","ei","ni","ii","ri","ai","oi","ui","li","hi","ci","fi","vi","gi","yi","di","_i","pi","mi","adder","Adder","add","temp","bv","av","epsilon","halfPi","quarterPi","tau","degrees","abs","atan","atan2","cos","sin","sqrt","acos","asin","noop","streamGeometry","stream","streamGeometryType","streamObjectType","object","streamLine","streamPolygon","geometries","closed","coordinate","geoStream","spherical","cartesian","lambda","phi","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","radius","delta","direction","t0","t1","cosRadius","sinRadius","step","circleRadius","clipBuffer","lines","line","clipLine","x0","y0","x1","y1","ax","ay","bx","by","dx","dy","pointEqual","Intersection","points","other","entry","clipPolygon","segments","compareIntersection","startInside","interpolate","subject","clip","segment","p0","p1","link","start","current","isSubject","array","ascending","bisector","compare","ascendingComparator","lo","mid","merge$1","arrays","merged","clipMax","clipMin","clipExtent","visible","from","to","a1","corner","comparePoint","ca","cb","activeStream","bufferStream","x__","y__","v__","x_","y_","v_","first","clean","clipStream","lineStart","lineEnd","polygonStart","polygonEnd","polygonInside","winding","a0","b0","b1","cleanInside","merge","linePoint","sum","polygonContains","normal","angle","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","sign","absDelta","antimeridian","arc","intersection","phiArc","identity","boundsStream","boundsPoint","bounds","pointVisible","rotate","sink","rotatedStart","ringBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","pointLine","ringSegments","validSegment","clipAntimeridian","clipAntimeridianLine","clipAntimeridianInterpolate","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","clipCircle","cr","smallRadius","notHemisphere","c0","v0","v00","point2","code","intersect","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","polar","meridian","q1","transformer","methods","TransformStream","key","fitExtent","projection","extent","fitSize","size","maxDepth","cosMinDistance","resample","project","delta2","resampleNone","resampleLineTo","depth","d2","phi2","lambda2","x2","y2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","transformRadians","projectionMutator","projectAt","projectRotate","theta","preclip","postclip","projectResample","projectTransform","cache","cacheStream","invert","reset","recenter","azimuthalRaw","scale","cx","cy","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","geoAzimuthalEquidistant","equirectangularRaw","BufferOp","GeoJSONReader","GeoJSONWriter","jsts","buffer","steps","results","buffered","bufferFeature","feature2","multiBuffered","geometry2","buffered2","defineProjection","projected","projectCoords","reader","writer","coordsIsNaN","unprojectCoords","proj","turf_buffer_default","__generator","thisArg","body","verb","op","Node","data","DEFAULT_COMPARE","splay","comparator","cmp","insert","node","split","left","right","printRow","root","prefix","isTail","out","printNode","indent","Tree","visitor","ctx","done","low","high","keys","_a","values","index","successor","predecessor","toList","presort","sort","loadRecursive","mergedList","mergeLists","createList","sortedListToBST","newKey","newData","end","middle","head","list","l1","l2","p2","pivot","tmp","splitter","resulterrbound","elen","flen","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","estimate","vec","ccwerrboundA","ccwerrboundB","ccwerrboundC","C1","C2","orient2dadapt","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","_0","s1","s0","u3","acx","bcx","acy","bcy","det","errbound","C1len","C2len","Dlen","orient2d","detleft","detright","isInBbox","getBboxOverlap","b2","lowerX","upperX","lowerY","upperY","EPSILON_SQ","ab","PtRounder","CoordRounder","SplayTree","prevNode","nextNode","rounder","crossProduct","dotProduct","compareVectorAngles","basePt","endPt1","endPt2","res","length","sineOfAngle","pShared","pBase","pAngle","vBase","vAngle","cosineOfAngle","horizontalIntersection","verticalIntersection","intersection$1","pt1","v1","pt2","v2","kross","d1","SweepEvent","ptCmp","Segment","aPt","bPt","isLeft","otherEvents","iMax","evt","numEvents","evt1","evt2","events","baseEvent","fillCache","linkedEvent","nextEvent","asine","acosine","bsine","bcosine","segmentId","alx","blx","arx","brx","aly","bly","ary","bry","aCmpBLeft","bCmpARight","bCmpALeft","aCmpBRight","leftSE","rightSE","rings","windings","leftPt","rightPt","cmpPts","newRightSE","lPt","rPt","yDist","xFromYDist","xDist","yFromXDist","tBbox","oBbox","bboxOverlap","tlp","trp","olp","orp","touchesOtherLSE","touchesThisLSE","touchesOtherRSE","touchesThisRSE","newEvents","alreadyLinked","newLeftSE","oldRightSE","newSeg","tmpEvt","consumer","consumee","seg","beforeState","ringsAfter","windingsAfter","mpsAfter","polysAfter","polysExclude","poly","mp","mpsBefore","operation","noBefores","noAfters","least","most","diff","isJustSubject","mps","RingIn","geomRing","isExterior","firstPoint","prevPoint","sweepEvents","PolyIn","geomPoly","multiPoly","ringSweepEvents","jMax","MultiPolyIn","polySweepEvents","RingOut","allSegments","ringsOut","prevEvent","event","startingPoint","intersectionLEs","availableLEs","firstPt","lastPt","indexLE","intersectionLE","ringEvents","prevPt","nextPt","iStart","iEnd","orderedPoints","enclosing","leftMostEvt","prevSeg","prevPrevSeg","PolyOut","exteriorRing","ringGeom","MultiPolyOut","polyGeom","polys","enclosingRing","SweepLine","queue","nextSeg","prevMySplitter","prevInter","newEventsFromSplit","nextMySplitter","nextInter","mySplitter","inter","POLYGON_CLIPPING_MAX_QUEUE_SIZE","POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS","Operation","moreGeoms","multipolys","mpA","sweepLine","prevQueueSize","union","_len","_key","_len2","_key2","xor","_len3","_key3","difference","subjectGeom","_len4","clippingGeoms","_key4","geoms","differenced","polygonClipping","turf_difference_default","fixRing","prev","setMask","picked","setData","fixed","EPSG_4326","defaultStyle","isMask","weight","Style","Stroke","Fill","Icon","Text","createOpenLayersMapController","map","flyToOptions","flyToBounds","fullGeometryStyle","prevSelected","prevHovered","eventHandler","reverseMarker","indicatingReverse","vectorLayer","VectorLayer","source","VectorSource","id","getProjection","getUserProjection","fromWgs84","handleMapClick","toLonLat","handler","zoom","fromLonLat","padding","maxZoom","transformExtent","reverse","Feature","Point","markedFeatures","OlPolygon","OlMultiPolygon","handled","OlGeometryCollection","OlLineString","OlMultiLineString","marker","offset","_b","_c","view"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46]}
|
|
1
|
+
{"version":3,"file":"openlayers-controller.js","sources":["../node_modules/@turf/helpers/dist/esm/index.js","../node_modules/@turf/meta/dist/esm/index.js","../node_modules/@turf/bbox/dist/esm/index.js","../node_modules/splaytree/dist/splay.esm.js","../node_modules/robust-predicates/esm/util.js","../node_modules/robust-predicates/esm/orient2d.js","../node_modules/polygon-clipping/dist/polygon-clipping.esm.js","../node_modules/@turf/difference/dist/esm/index.js","../node_modules/@turf/flatten/dist/esm/index.js","../node_modules/@turf/union/dist/esm/index.js","../src/geoUtils.ts","../src/mask.ts","../src/openlayers-controller.ts"],"sourcesContent":["// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: 360 / (2 * Math.PI),\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1e3,\n kilometres: earthRadius / 1e3,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1e3,\n millimetres: earthRadius * 1e3,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n acres: 247105e-9,\n centimeters: 1e4,\n centimetres: 1e4,\n feet: 10.763910417,\n hectares: 1e-4,\n inches: 1550.003100006,\n kilometers: 1e-6,\n kilometres: 1e-6,\n meters: 1,\n metres: 1,\n miles: 386e-9,\n nauticalmiles: 29155334959812285e-23,\n millimeters: 1e6,\n millimetres: 1e6,\n yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n const feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\nfunction point(coordinates, properties, options = {}) {\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n const geom = {\n type: \"Point\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return point(coords, properties);\n }),\n options\n );\n}\nfunction polygon(coordinates, properties, options = {}) {\n for (const ring of coordinates) {\n if (ring.length < 4) {\n throw new Error(\n \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n );\n }\n if (ring[ring.length - 1].length !== ring[0].length) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n for (let j = 0; j < ring[ring.length - 1].length; j++) {\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n const geom = {\n type: \"Polygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return polygon(coords, properties);\n }),\n options\n );\n}\nfunction lineString(coordinates, properties, options = {}) {\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n const geom = {\n type: \"LineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return lineString(coords, properties);\n }),\n options\n );\n}\nfunction featureCollection(features, options = {}) {\n const fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiLineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPoint\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPolygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n const geom = {\n type: \"GeometryCollection\",\n geometries\n };\n return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n const multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n let angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\nfunction azimuthToBearing(angle) {\n angle = angle % 360;\n if (angle > 0)\n return angle > 180 ? angle - 360 : angle;\n return angle < -180 ? angle + 360 : angle;\n}\nfunction radiansToDegrees(radians) {\n const degrees = radians % (2 * Math.PI);\n return degrees * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n const radians = degrees % 360;\n return radians * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n const startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n const finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach((num) => {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\nfunction validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\nexport {\n areaFactors,\n azimuthToBearing,\n bearingToAzimuth,\n convertArea,\n convertLength,\n degreesToRadians,\n earthRadius,\n factors,\n feature,\n featureCollection,\n geometry,\n geometryCollection,\n isNumber,\n isObject,\n lengthToDegrees,\n lengthToRadians,\n lineString,\n lineStrings,\n multiLineString,\n multiPoint,\n multiPolygon,\n point,\n points,\n polygon,\n polygons,\n radiansToDegrees,\n radiansToLength,\n round,\n validateBBox,\n validateId\n};\n//# sourceMappingURL=index.js.map","// index.js\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n if (geojson === null)\n return;\n var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n if (geometry === null)\n continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\")\n multiFeatureIndex++;\n }\n if (geomType === \"LineString\")\n multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\")\n multiFeatureIndex++;\n if (geomType === \"Polygon\")\n geometryIndex++;\n }\n if (geomType === \"Polygon\")\n multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false)\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n if (coordIndex === 0 && initialValue === void 0)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false)\n break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function(currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false)\n break;\n }\n }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function(currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else\n previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function(coord) {\n coords.push(coord);\n });\n return coords;\n}\nfunction geomEach(geojson, callback) {\n var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : void 0;\n featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : void 0;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n if (geometry === null) {\n if (callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n featureIndex++;\n }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (callback(\n feature(geometry, properties, { bbox, id }),\n featureIndex,\n 0\n ) === false)\n return false;\n return;\n }\n var geomType;\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate\n };\n if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false)\n return false;\n }\n });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function(currentFeature, featureIndex, multiFeatureIndex) {\n if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n if (!feature2.geometry)\n return;\n var type = feature2.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\")\n return;\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (coordEach(\n feature2,\n function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n if (previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature2.properties\n );\n if (callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false)\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false)\n return false;\n });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n if (started === false && initialValue === void 0)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\nfunction lineEach(geojson, callback) {\n if (!geojson)\n throw new Error(\"geojson is required\");\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n if (feature2.geometry === null)\n return;\n var type = feature2.geometry.type;\n var coords = feature2.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n if (callback(\n lineString(coords[geometryIndex], feature2.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n }\n break;\n }\n });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\nfunction findSegment(geojson, options) {\n options = options || {};\n if (!isObject(options))\n throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null)\n return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0)\n segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0)\n geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n options = options || {};\n if (!isObject(options))\n throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null)\n return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0)\n coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0)\n geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nexport {\n coordAll,\n coordEach,\n coordReduce,\n featureEach,\n featureReduce,\n findPoint,\n findSegment,\n flattenEach,\n flattenReduce,\n geomEach,\n geomReduce,\n lineEach,\n lineReduce,\n propEach,\n propReduce,\n segmentEach,\n segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach } from \"@turf/meta\";\nfunction bbox(geojson, options = {}) {\n if (geojson.bbox != null && true !== options.recompute) {\n return geojson.bbox;\n }\n const result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, (coord) => {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nvar turf_bbox_default = bbox;\nexport {\n bbox,\n turf_bbox_default as default\n};\n//# sourceMappingURL=index.js.map","/**\n * splaytree v3.1.2\n * Fast Splay tree for Node and browser\n *\n * @author Alexander Milevski <info@w8r.name>\n * @license MIT\n * @preserve\n */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nvar Node = /** @class */ (function () {\r\n function Node(key, data) {\r\n this.next = null;\r\n this.key = key;\r\n this.data = data;\r\n this.left = null;\r\n this.right = null;\r\n }\r\n return Node;\r\n}());\n\n/* follows \"An implementation of top-down splaying\"\r\n * by D. Sleator <sleator@cs.cmu.edu> March 1992\r\n */\r\nfunction DEFAULT_COMPARE(a, b) {\r\n return a > b ? 1 : a < b ? -1 : 0;\r\n}\r\n/**\r\n * Simple top down splay, not requiring i to be in the tree t.\r\n */\r\nfunction splay(i, t, comparator) {\r\n var N = new Node(null, null);\r\n var l = N;\r\n var r = N;\r\n while (true) {\r\n var cmp = comparator(i, t.key);\r\n //if (i < t.key) {\r\n if (cmp < 0) {\r\n if (t.left === null)\r\n break;\r\n //if (i < t.left.key) {\r\n if (comparator(i, t.left.key) < 0) {\r\n var y = t.left; /* rotate right */\r\n t.left = y.right;\r\n y.right = t;\r\n t = y;\r\n if (t.left === null)\r\n break;\r\n }\r\n r.left = t; /* link right */\r\n r = t;\r\n t = t.left;\r\n //} else if (i > t.key) {\r\n }\r\n else if (cmp > 0) {\r\n if (t.right === null)\r\n break;\r\n //if (i > t.right.key) {\r\n if (comparator(i, t.right.key) > 0) {\r\n var y = t.right; /* rotate left */\r\n t.right = y.left;\r\n y.left = t;\r\n t = y;\r\n if (t.right === null)\r\n break;\r\n }\r\n l.right = t; /* link left */\r\n l = t;\r\n t = t.right;\r\n }\r\n else\r\n break;\r\n }\r\n /* assemble */\r\n l.right = t.left;\r\n r.left = t.right;\r\n t.left = N.right;\r\n t.right = N.left;\r\n return t;\r\n}\r\nfunction insert(i, data, t, comparator) {\r\n var node = new Node(i, data);\r\n if (t === null) {\r\n node.left = node.right = null;\r\n return node;\r\n }\r\n t = splay(i, t, comparator);\r\n var cmp = comparator(i, t.key);\r\n if (cmp < 0) {\r\n node.left = t.left;\r\n node.right = t;\r\n t.left = null;\r\n }\r\n else if (cmp >= 0) {\r\n node.right = t.right;\r\n node.left = t;\r\n t.right = null;\r\n }\r\n return node;\r\n}\r\nfunction split(key, v, comparator) {\r\n var left = null;\r\n var right = null;\r\n if (v) {\r\n v = splay(key, v, comparator);\r\n var cmp = comparator(v.key, key);\r\n if (cmp === 0) {\r\n left = v.left;\r\n right = v.right;\r\n }\r\n else if (cmp < 0) {\r\n right = v.right;\r\n v.right = null;\r\n left = v;\r\n }\r\n else {\r\n left = v.left;\r\n v.left = null;\r\n right = v;\r\n }\r\n }\r\n return { left: left, right: right };\r\n}\r\nfunction merge(left, right, comparator) {\r\n if (right === null)\r\n return left;\r\n if (left === null)\r\n return right;\r\n right = splay(left.key, right, comparator);\r\n right.left = left;\r\n return right;\r\n}\r\n/**\r\n * Prints level of the tree\r\n */\r\nfunction printRow(root, prefix, isTail, out, printNode) {\r\n if (root) {\r\n out(\"\" + prefix + (isTail ? '└── ' : '├── ') + printNode(root) + \"\\n\");\r\n var indent = prefix + (isTail ? ' ' : '│ ');\r\n if (root.left)\r\n printRow(root.left, indent, false, out, printNode);\r\n if (root.right)\r\n printRow(root.right, indent, true, out, printNode);\r\n }\r\n}\r\nvar Tree = /** @class */ (function () {\r\n function Tree(comparator) {\r\n if (comparator === void 0) { comparator = DEFAULT_COMPARE; }\r\n this._root = null;\r\n this._size = 0;\r\n this._comparator = comparator;\r\n }\r\n /**\r\n * Inserts a key, allows duplicates\r\n */\r\n Tree.prototype.insert = function (key, data) {\r\n this._size++;\r\n return this._root = insert(key, data, this._root, this._comparator);\r\n };\r\n /**\r\n * Adds a key, if it is not present in the tree\r\n */\r\n Tree.prototype.add = function (key, data) {\r\n var node = new Node(key, data);\r\n if (this._root === null) {\r\n node.left = node.right = null;\r\n this._size++;\r\n this._root = node;\r\n }\r\n var comparator = this._comparator;\r\n var t = splay(key, this._root, comparator);\r\n var cmp = comparator(key, t.key);\r\n if (cmp === 0)\r\n this._root = t;\r\n else {\r\n if (cmp < 0) {\r\n node.left = t.left;\r\n node.right = t;\r\n t.left = null;\r\n }\r\n else if (cmp > 0) {\r\n node.right = t.right;\r\n node.left = t;\r\n t.right = null;\r\n }\r\n this._size++;\r\n this._root = node;\r\n }\r\n return this._root;\r\n };\r\n /**\r\n * @param {Key} key\r\n * @return {Node|null}\r\n */\r\n Tree.prototype.remove = function (key) {\r\n this._root = this._remove(key, this._root, this._comparator);\r\n };\r\n /**\r\n * Deletes i from the tree if it's there\r\n */\r\n Tree.prototype._remove = function (i, t, comparator) {\r\n var x;\r\n if (t === null)\r\n return null;\r\n t = splay(i, t, comparator);\r\n var cmp = comparator(i, t.key);\r\n if (cmp === 0) { /* found it */\r\n if (t.left === null) {\r\n x = t.right;\r\n }\r\n else {\r\n x = splay(i, t.left, comparator);\r\n x.right = t.right;\r\n }\r\n this._size--;\r\n return x;\r\n }\r\n return t; /* It wasn't there */\r\n };\r\n /**\r\n * Removes and returns the node with smallest key\r\n */\r\n Tree.prototype.pop = function () {\r\n var node = this._root;\r\n if (node) {\r\n while (node.left)\r\n node = node.left;\r\n this._root = splay(node.key, this._root, this._comparator);\r\n this._root = this._remove(node.key, this._root, this._comparator);\r\n return { key: node.key, data: node.data };\r\n }\r\n return null;\r\n };\r\n /**\r\n * Find without splaying\r\n */\r\n Tree.prototype.findStatic = function (key) {\r\n var current = this._root;\r\n var compare = this._comparator;\r\n while (current) {\r\n var cmp = compare(key, current.key);\r\n if (cmp === 0)\r\n return current;\r\n else if (cmp < 0)\r\n current = current.left;\r\n else\r\n current = current.right;\r\n }\r\n return null;\r\n };\r\n Tree.prototype.find = function (key) {\r\n if (this._root) {\r\n this._root = splay(key, this._root, this._comparator);\r\n if (this._comparator(key, this._root.key) !== 0)\r\n return null;\r\n }\r\n return this._root;\r\n };\r\n Tree.prototype.contains = function (key) {\r\n var current = this._root;\r\n var compare = this._comparator;\r\n while (current) {\r\n var cmp = compare(key, current.key);\r\n if (cmp === 0)\r\n return true;\r\n else if (cmp < 0)\r\n current = current.left;\r\n else\r\n current = current.right;\r\n }\r\n return false;\r\n };\r\n Tree.prototype.forEach = function (visitor, ctx) {\r\n var current = this._root;\r\n var Q = []; /* Initialize stack s */\r\n var done = false;\r\n while (!done) {\r\n if (current !== null) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length !== 0) {\r\n current = Q.pop();\r\n visitor.call(ctx, current);\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Walk key range from `low` to `high`. Stops if `fn` returns a value.\r\n */\r\n Tree.prototype.range = function (low, high, fn, ctx) {\r\n var Q = [];\r\n var compare = this._comparator;\r\n var node = this._root;\r\n var cmp;\r\n while (Q.length !== 0 || node) {\r\n if (node) {\r\n Q.push(node);\r\n node = node.left;\r\n }\r\n else {\r\n node = Q.pop();\r\n cmp = compare(node.key, high);\r\n if (cmp > 0) {\r\n break;\r\n }\r\n else if (compare(node.key, low) >= 0) {\r\n if (fn.call(ctx, node))\r\n return this; // stop if smth is returned\r\n }\r\n node = node.right;\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Returns array of keys\r\n */\r\n Tree.prototype.keys = function () {\r\n var keys = [];\r\n this.forEach(function (_a) {\r\n var key = _a.key;\r\n return keys.push(key);\r\n });\r\n return keys;\r\n };\r\n /**\r\n * Returns array of all the data in the nodes\r\n */\r\n Tree.prototype.values = function () {\r\n var values = [];\r\n this.forEach(function (_a) {\r\n var data = _a.data;\r\n return values.push(data);\r\n });\r\n return values;\r\n };\r\n Tree.prototype.min = function () {\r\n if (this._root)\r\n return this.minNode(this._root).key;\r\n return null;\r\n };\r\n Tree.prototype.max = function () {\r\n if (this._root)\r\n return this.maxNode(this._root).key;\r\n return null;\r\n };\r\n Tree.prototype.minNode = function (t) {\r\n if (t === void 0) { t = this._root; }\r\n if (t)\r\n while (t.left)\r\n t = t.left;\r\n return t;\r\n };\r\n Tree.prototype.maxNode = function (t) {\r\n if (t === void 0) { t = this._root; }\r\n if (t)\r\n while (t.right)\r\n t = t.right;\r\n return t;\r\n };\r\n /**\r\n * Returns node at given index\r\n */\r\n Tree.prototype.at = function (index) {\r\n var current = this._root;\r\n var done = false;\r\n var i = 0;\r\n var Q = [];\r\n while (!done) {\r\n if (current) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length > 0) {\r\n current = Q.pop();\r\n if (i === index)\r\n return current;\r\n i++;\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n return null;\r\n };\r\n Tree.prototype.next = function (d) {\r\n var root = this._root;\r\n var successor = null;\r\n if (d.right) {\r\n successor = d.right;\r\n while (successor.left)\r\n successor = successor.left;\r\n return successor;\r\n }\r\n var comparator = this._comparator;\r\n while (root) {\r\n var cmp = comparator(d.key, root.key);\r\n if (cmp === 0)\r\n break;\r\n else if (cmp < 0) {\r\n successor = root;\r\n root = root.left;\r\n }\r\n else\r\n root = root.right;\r\n }\r\n return successor;\r\n };\r\n Tree.prototype.prev = function (d) {\r\n var root = this._root;\r\n var predecessor = null;\r\n if (d.left !== null) {\r\n predecessor = d.left;\r\n while (predecessor.right)\r\n predecessor = predecessor.right;\r\n return predecessor;\r\n }\r\n var comparator = this._comparator;\r\n while (root) {\r\n var cmp = comparator(d.key, root.key);\r\n if (cmp === 0)\r\n break;\r\n else if (cmp < 0)\r\n root = root.left;\r\n else {\r\n predecessor = root;\r\n root = root.right;\r\n }\r\n }\r\n return predecessor;\r\n };\r\n Tree.prototype.clear = function () {\r\n this._root = null;\r\n this._size = 0;\r\n return this;\r\n };\r\n Tree.prototype.toList = function () {\r\n return toList(this._root);\r\n };\r\n /**\r\n * Bulk-load items. Both array have to be same size\r\n */\r\n Tree.prototype.load = function (keys, values, presort) {\r\n if (values === void 0) { values = []; }\r\n if (presort === void 0) { presort = false; }\r\n var size = keys.length;\r\n var comparator = this._comparator;\r\n // sort if needed\r\n if (presort)\r\n sort(keys, values, 0, size - 1, comparator);\r\n if (this._root === null) { // empty tree\r\n this._root = loadRecursive(keys, values, 0, size);\r\n this._size = size;\r\n }\r\n else { // that re-builds the whole tree from two in-order traversals\r\n var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);\r\n size = this._size + size;\r\n this._root = sortedListToBST({ head: mergedList }, 0, size);\r\n }\r\n return this;\r\n };\r\n Tree.prototype.isEmpty = function () { return this._root === null; };\r\n Object.defineProperty(Tree.prototype, \"size\", {\r\n get: function () { return this._size; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Tree.prototype, \"root\", {\r\n get: function () { return this._root; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Tree.prototype.toString = function (printNode) {\r\n if (printNode === void 0) { printNode = function (n) { return String(n.key); }; }\r\n var out = [];\r\n printRow(this._root, '', true, function (v) { return out.push(v); }, printNode);\r\n return out.join('');\r\n };\r\n Tree.prototype.update = function (key, newKey, newData) {\r\n var comparator = this._comparator;\r\n var _a = split(key, this._root, comparator), left = _a.left, right = _a.right;\r\n if (comparator(key, newKey) < 0) {\r\n right = insert(newKey, newData, right, comparator);\r\n }\r\n else {\r\n left = insert(newKey, newData, left, comparator);\r\n }\r\n this._root = merge(left, right, comparator);\r\n };\r\n Tree.prototype.split = function (key) {\r\n return split(key, this._root, this._comparator);\r\n };\r\n Tree.prototype[Symbol.iterator] = function () {\r\n var current, Q, done;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n current = this._root;\r\n Q = [];\r\n done = false;\r\n _a.label = 1;\r\n case 1:\r\n if (!!done) return [3 /*break*/, 6];\r\n if (!(current !== null)) return [3 /*break*/, 2];\r\n Q.push(current);\r\n current = current.left;\r\n return [3 /*break*/, 5];\r\n case 2:\r\n if (!(Q.length !== 0)) return [3 /*break*/, 4];\r\n current = Q.pop();\r\n return [4 /*yield*/, current];\r\n case 3:\r\n _a.sent();\r\n current = current.right;\r\n return [3 /*break*/, 5];\r\n case 4:\r\n done = true;\r\n _a.label = 5;\r\n case 5: return [3 /*break*/, 1];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n };\r\n return Tree;\r\n}());\r\nfunction loadRecursive(keys, values, start, end) {\r\n var size = end - start;\r\n if (size > 0) {\r\n var middle = start + Math.floor(size / 2);\r\n var key = keys[middle];\r\n var data = values[middle];\r\n var node = new Node(key, data);\r\n node.left = loadRecursive(keys, values, start, middle);\r\n node.right = loadRecursive(keys, values, middle + 1, end);\r\n return node;\r\n }\r\n return null;\r\n}\r\nfunction createList(keys, values) {\r\n var head = new Node(null, null);\r\n var p = head;\r\n for (var i = 0; i < keys.length; i++) {\r\n p = p.next = new Node(keys[i], values[i]);\r\n }\r\n p.next = null;\r\n return head.next;\r\n}\r\nfunction toList(root) {\r\n var current = root;\r\n var Q = [];\r\n var done = false;\r\n var head = new Node(null, null);\r\n var p = head;\r\n while (!done) {\r\n if (current) {\r\n Q.push(current);\r\n current = current.left;\r\n }\r\n else {\r\n if (Q.length > 0) {\r\n current = p = p.next = Q.pop();\r\n current = current.right;\r\n }\r\n else\r\n done = true;\r\n }\r\n }\r\n p.next = null; // that'll work even if the tree was empty\r\n return head.next;\r\n}\r\nfunction sortedListToBST(list, start, end) {\r\n var size = end - start;\r\n if (size > 0) {\r\n var middle = start + Math.floor(size / 2);\r\n var left = sortedListToBST(list, start, middle);\r\n var root = list.head;\r\n root.left = left;\r\n list.head = list.head.next;\r\n root.right = sortedListToBST(list, middle + 1, end);\r\n return root;\r\n }\r\n return null;\r\n}\r\nfunction mergeLists(l1, l2, compare) {\r\n var head = new Node(null, null); // dummy\r\n var p = head;\r\n var p1 = l1;\r\n var p2 = l2;\r\n while (p1 !== null && p2 !== null) {\r\n if (compare(p1.key, p2.key) < 0) {\r\n p.next = p1;\r\n p1 = p1.next;\r\n }\r\n else {\r\n p.next = p2;\r\n p2 = p2.next;\r\n }\r\n p = p.next;\r\n }\r\n if (p1 !== null) {\r\n p.next = p1;\r\n }\r\n else if (p2 !== null) {\r\n p.next = p2;\r\n }\r\n return head.next;\r\n}\r\nfunction sort(keys, values, left, right, compare) {\r\n if (left >= right)\r\n return;\r\n var pivot = keys[(left + right) >> 1];\r\n var i = left - 1;\r\n var j = right + 1;\r\n while (true) {\r\n do\r\n i++;\r\n while (compare(keys[i], pivot) < 0);\r\n do\r\n j--;\r\n while (compare(keys[j], pivot) > 0);\r\n if (i >= j)\r\n break;\r\n var tmp = keys[i];\r\n keys[i] = keys[j];\r\n keys[j] = tmp;\r\n tmp = values[i];\r\n values[i] = values[j];\r\n values[j] = tmp;\r\n }\r\n sort(keys, values, left, j, compare);\r\n sort(keys, values, j + 1, right, compare);\r\n}\n\nexport default Tree;\n//# sourceMappingURL=splay.esm.js.map\n","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nexport function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nexport function vec(n) {\n return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import SplayTree from 'splaytree';\nimport { orient2d } from 'robust-predicates';\n\n/**\n * A bounding box has the format:\n *\n * { ll: { x: xmin, y: ymin }, ur: { x: xmax, y: ymax } }\n *\n */\n\nconst isInBbox = (bbox, point) => {\n return bbox.ll.x <= point.x && point.x <= bbox.ur.x && bbox.ll.y <= point.y && point.y <= bbox.ur.y;\n};\n\n/* Returns either null, or a bbox (aka an ordered pair of points)\n * If there is only one point of overlap, a bbox with identical points\n * will be returned */\nconst getBboxOverlap = (b1, b2) => {\n // check if the bboxes overlap at all\n if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null;\n\n // find the middle two X values\n const lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;\n const upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x;\n\n // find the middle two Y values\n const lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;\n const upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y;\n\n // put those middle values together to get the overlap\n return {\n ll: {\n x: lowerX,\n y: lowerY\n },\n ur: {\n x: upperX,\n y: upperY\n }\n };\n};\n\n/* Javascript doesn't do integer math. Everything is\n * floating point with percision Number.EPSILON.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\n\nlet epsilon = Number.EPSILON;\n\n// IE Polyfill\nif (epsilon === undefined) epsilon = Math.pow(2, -52);\nconst EPSILON_SQ = epsilon * epsilon;\n\n/* FLP comparator */\nconst cmp = (a, b) => {\n // check if they're both 0\n if (-epsilon < a && a < epsilon) {\n if (-epsilon < b && b < epsilon) {\n return 0;\n }\n }\n\n // check if they're flp equal\n const ab = a - b;\n if (ab * ab < EPSILON_SQ * a * b) {\n return 0;\n }\n\n // normal comparison\n return a < b ? -1 : 1;\n};\n\n/**\n * This class rounds incoming values sufficiently so that\n * floating points problems are, for the most part, avoided.\n *\n * Incoming points are have their x & y values tested against\n * all previously seen x & y values. If either is 'too close'\n * to a previously seen value, it's value is 'snapped' to the\n * previously seen value.\n *\n * All points should be rounded by this class before being\n * stored in any data structures in the rest of this algorithm.\n */\n\nclass PtRounder {\n constructor() {\n this.reset();\n }\n reset() {\n this.xRounder = new CoordRounder();\n this.yRounder = new CoordRounder();\n }\n round(x, y) {\n return {\n x: this.xRounder.round(x),\n y: this.yRounder.round(y)\n };\n }\n}\nclass CoordRounder {\n constructor() {\n this.tree = new SplayTree();\n // preseed with 0 so we don't end up with values < Number.EPSILON\n this.round(0);\n }\n\n // Note: this can rounds input values backwards or forwards.\n // You might ask, why not restrict this to just rounding\n // forwards? Wouldn't that allow left endpoints to always\n // remain left endpoints during splitting (never change to\n // right). No - it wouldn't, because we snap intersections\n // to endpoints (to establish independence from the segment\n // angle for t-intersections).\n round(coord) {\n const node = this.tree.add(coord);\n const prevNode = this.tree.prev(node);\n if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {\n this.tree.remove(coord);\n return prevNode.key;\n }\n const nextNode = this.tree.next(node);\n if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {\n this.tree.remove(coord);\n return nextNode.key;\n }\n return coord;\n }\n}\n\n// singleton available by import\nconst rounder = new PtRounder();\n\n/* Cross Product of two vectors with first point at origin */\nconst crossProduct = (a, b) => a.x * b.y - a.y * b.x;\n\n/* Dot Product of two vectors with first point at origin */\nconst dotProduct = (a, b) => a.x * b.x + a.y * b.y;\n\n/* Comparator for two vectors with same starting point */\nconst compareVectorAngles = (basePt, endPt1, endPt2) => {\n const res = orient2d(basePt.x, basePt.y, endPt1.x, endPt1.y, endPt2.x, endPt2.y);\n if (res > 0) return -1;\n if (res < 0) return 1;\n return 0;\n};\nconst length = v => Math.sqrt(dotProduct(v, v));\n\n/* Get the sine of the angle from pShared -> pAngle to pShaed -> pBase */\nconst sineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n const vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return crossProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n};\n\n/* Get the cosine of the angle from pShared -> pAngle to pShaed -> pBase */\nconst cosineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = {\n x: pBase.x - pShared.x,\n y: pBase.y - pShared.y\n };\n const vAngle = {\n x: pAngle.x - pShared.x,\n y: pAngle.y - pShared.y\n };\n return dotProduct(vAngle, vBase) / length(vAngle) / length(vBase);\n};\n\n/* Get the x coordinate where the given line (defined by a point and vector)\n * crosses the horizontal line with the given y coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nconst horizontalIntersection = (pt, v, y) => {\n if (v.y === 0) return null;\n return {\n x: pt.x + v.x / v.y * (y - pt.y),\n y: y\n };\n};\n\n/* Get the y coordinate where the given line (defined by a point and vector)\n * crosses the vertical line with the given x coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nconst verticalIntersection = (pt, v, x) => {\n if (v.x === 0) return null;\n return {\n x: x,\n y: pt.y + v.y / v.x * (x - pt.x)\n };\n};\n\n/* Get the intersection of two lines, each defined by a base point and a vector.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nconst intersection$1 = (pt1, v1, pt2, v2) => {\n // take some shortcuts for vertical and horizontal lines\n // this also ensures we don't calculate an intersection and then discover\n // it's actually outside the bounding box of the line\n if (v1.x === 0) return verticalIntersection(pt2, v2, pt1.x);\n if (v2.x === 0) return verticalIntersection(pt1, v1, pt2.x);\n if (v1.y === 0) return horizontalIntersection(pt2, v2, pt1.y);\n if (v2.y === 0) return horizontalIntersection(pt1, v1, pt2.y);\n\n // General case for non-overlapping segments.\n // This algorithm is based on Schneider and Eberly.\n // http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - pg 244\n\n const kross = crossProduct(v1, v2);\n if (kross == 0) return null;\n const ve = {\n x: pt2.x - pt1.x,\n y: pt2.y - pt1.y\n };\n const d1 = crossProduct(ve, v1) / kross;\n const d2 = crossProduct(ve, v2) / kross;\n\n // take the average of the two calculations to minimize rounding error\n const x1 = pt1.x + d2 * v1.x,\n x2 = pt2.x + d1 * v2.x;\n const y1 = pt1.y + d2 * v1.y,\n y2 = pt2.y + d1 * v2.y;\n const x = (x1 + x2) / 2;\n const y = (y1 + y2) / 2;\n return {\n x: x,\n y: y\n };\n};\n\nclass SweepEvent {\n // for ordering sweep events in the sweep event queue\n static compare(a, b) {\n // favor event with a point that the sweep line hits first\n const ptCmp = SweepEvent.comparePoints(a.point, b.point);\n if (ptCmp !== 0) return ptCmp;\n\n // the points are the same, so link them if needed\n if (a.point !== b.point) a.link(b);\n\n // favor right events over left\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1;\n\n // we have two matching left or right endpoints\n // ordering of this case is the same as for their segments\n return Segment.compare(a.segment, b.segment);\n }\n\n // for ordering points in sweep line order\n static comparePoints(aPt, bPt) {\n if (aPt.x < bPt.x) return -1;\n if (aPt.x > bPt.x) return 1;\n if (aPt.y < bPt.y) return -1;\n if (aPt.y > bPt.y) return 1;\n return 0;\n }\n\n // Warning: 'point' input will be modified and re-used (for performance)\n constructor(point, isLeft) {\n if (point.events === undefined) point.events = [this];else point.events.push(this);\n this.point = point;\n this.isLeft = isLeft;\n // this.segment, this.otherSE set by factory\n }\n link(other) {\n if (other.point === this.point) {\n throw new Error(\"Tried to link already linked events\");\n }\n const otherEvents = other.point.events;\n for (let i = 0, iMax = otherEvents.length; i < iMax; i++) {\n const evt = otherEvents[i];\n this.point.events.push(evt);\n evt.point = this.point;\n }\n this.checkForConsuming();\n }\n\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n checkForConsuming() {\n // FIXME: The loops in this method run O(n^2) => no good.\n // Maintain little ordered sweep event trees?\n // Can we maintaining an ordering that avoids the need\n // for the re-sorting with getLeftmostComparator in geom-out?\n\n // Compare each pair of events to see if other events also match\n const numEvents = this.point.events.length;\n for (let i = 0; i < numEvents; i++) {\n const evt1 = this.point.events[i];\n if (evt1.segment.consumedBy !== undefined) continue;\n for (let j = i + 1; j < numEvents; j++) {\n const evt2 = this.point.events[j];\n if (evt2.consumedBy !== undefined) continue;\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;\n evt1.segment.consume(evt2.segment);\n }\n }\n }\n getAvailableLinkedEvents() {\n // point.events is always of length 2 or greater\n const events = [];\n for (let i = 0, iMax = this.point.events.length; i < iMax; i++) {\n const evt = this.point.events[i];\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt);\n }\n }\n return events;\n }\n\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n getLeftmostComparator(baseEvent) {\n const cache = new Map();\n const fillCache = linkedEvent => {\n const nextEvent = linkedEvent.otherSE;\n cache.set(linkedEvent, {\n sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point)\n });\n };\n return (a, b) => {\n if (!cache.has(a)) fillCache(a);\n if (!cache.has(b)) fillCache(b);\n const {\n sine: asine,\n cosine: acosine\n } = cache.get(a);\n const {\n sine: bsine,\n cosine: bcosine\n } = cache.get(b);\n\n // both on or above x-axis\n if (asine >= 0 && bsine >= 0) {\n if (acosine < bcosine) return 1;\n if (acosine > bcosine) return -1;\n return 0;\n }\n\n // both below x-axis\n if (asine < 0 && bsine < 0) {\n if (acosine < bcosine) return -1;\n if (acosine > bcosine) return 1;\n return 0;\n }\n\n // one above x-axis, one below\n if (bsine < asine) return -1;\n if (bsine > asine) return 1;\n return 0;\n };\n }\n}\n\n// Give segments unique ID's to get consistent sorting of\n// segments and sweep events when all else is identical\nlet segmentId = 0;\nclass Segment {\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n static compare(a, b) {\n const alx = a.leftSE.point.x;\n const blx = b.leftSE.point.x;\n const arx = a.rightSE.point.x;\n const brx = b.rightSE.point.x;\n\n // check if they're even in the same vertical plane\n if (brx < alx) return 1;\n if (arx < blx) return -1;\n const aly = a.leftSE.point.y;\n const bly = b.leftSE.point.y;\n const ary = a.rightSE.point.y;\n const bry = b.rightSE.point.y;\n\n // is left endpoint of segment B the right-more?\n if (alx < blx) {\n // are the two segments in the same horizontal plane?\n if (bly < aly && bly < ary) return 1;\n if (bly > aly && bly > ary) return -1;\n\n // is the B left endpoint colinear to segment A?\n const aCmpBLeft = a.comparePoint(b.leftSE.point);\n if (aCmpBLeft < 0) return 1;\n if (aCmpBLeft > 0) return -1;\n\n // is the A right endpoint colinear to segment B ?\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return -1;\n }\n\n // is left endpoint of segment A the right-more?\n if (alx > blx) {\n if (aly < bly && aly < bry) return -1;\n if (aly > bly && aly > bry) return 1;\n\n // is the A left endpoint colinear to segment B?\n const bCmpALeft = b.comparePoint(a.leftSE.point);\n if (bCmpALeft !== 0) return bCmpALeft;\n\n // is the B right endpoint colinear to segment A?\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return 1;\n }\n\n // if we get here, the two left endpoints are in the same\n // vertical plane, ie alx === blx\n\n // consider the lower left-endpoint to come first\n if (aly < bly) return -1;\n if (aly > bly) return 1;\n\n // left endpoints are identical\n // check for colinearity by using the left-more right endpoint\n\n // is the A right endpoint more left-more?\n if (arx < brx) {\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n }\n\n // is the B right endpoint more left-more?\n if (arx > brx) {\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n }\n if (arx !== brx) {\n // are these two [almost] vertical segments with opposite orientation?\n // if so, the one with the lower right endpoint comes first\n const ay = ary - aly;\n const ax = arx - alx;\n const by = bry - bly;\n const bx = brx - blx;\n if (ay > ax && by < bx) return 1;\n if (ay < ax && by > bx) return -1;\n }\n\n // we have colinear segments with matching orientation\n // consider the one with more left-more right endpoint to be first\n if (arx > brx) return 1;\n if (arx < brx) return -1;\n\n // if we get here, two two right endpoints are in the same\n // vertical plane, ie arx === brx\n\n // consider the lower right-endpoint to come first\n if (ary < bry) return -1;\n if (ary > bry) return 1;\n\n // right endpoints identical as well, so the segments are idential\n // fall back on creation order as consistent tie-breaker\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n\n // identical segment, ie a === b\n return 0;\n }\n\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n constructor(leftSE, rightSE, rings, windings) {\n this.id = ++segmentId;\n this.leftSE = leftSE;\n leftSE.segment = this;\n leftSE.otherSE = rightSE;\n this.rightSE = rightSE;\n rightSE.segment = this;\n rightSE.otherSE = leftSE;\n this.rings = rings;\n this.windings = windings;\n // left unset for performance, set later in algorithm\n // this.ringOut, this.consumedBy, this.prev\n }\n static fromRing(pt1, pt2, ring) {\n let leftPt, rightPt, winding;\n\n // ordering the two points according to sweep line ordering\n const cmpPts = SweepEvent.comparePoints(pt1, pt2);\n if (cmpPts < 0) {\n leftPt = pt1;\n rightPt = pt2;\n winding = 1;\n } else if (cmpPts > 0) {\n leftPt = pt2;\n rightPt = pt1;\n winding = -1;\n } else throw new Error(`Tried to create degenerate segment at [${pt1.x}, ${pt1.y}]`);\n const leftSE = new SweepEvent(leftPt, true);\n const rightSE = new SweepEvent(rightPt, false);\n return new Segment(leftSE, rightSE, [ring], [winding]);\n }\n\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n replaceRightSE(newRightSE) {\n this.rightSE = newRightSE;\n this.rightSE.segment = this;\n this.rightSE.otherSE = this.leftSE;\n this.leftSE.otherSE = this.rightSE;\n }\n bbox() {\n const y1 = this.leftSE.point.y;\n const y2 = this.rightSE.point.y;\n return {\n ll: {\n x: this.leftSE.point.x,\n y: y1 < y2 ? y1 : y2\n },\n ur: {\n x: this.rightSE.point.x,\n y: y1 > y2 ? y1 : y2\n }\n };\n }\n\n /* A vector from the left point to the right */\n vector() {\n return {\n x: this.rightSE.point.x - this.leftSE.point.x,\n y: this.rightSE.point.y - this.leftSE.point.y\n };\n }\n isAnEndpoint(pt) {\n return pt.x === this.leftSE.point.x && pt.y === this.leftSE.point.y || pt.x === this.rightSE.point.x && pt.y === this.rightSE.point.y;\n }\n\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n comparePoint(point) {\n if (this.isAnEndpoint(point)) return 0;\n const lPt = this.leftSE.point;\n const rPt = this.rightSE.point;\n const v = this.vector();\n\n // Exactly vertical segments.\n if (lPt.x === rPt.x) {\n if (point.x === lPt.x) return 0;\n return point.x < lPt.x ? 1 : -1;\n }\n\n // Nearly vertical segments with an intersection.\n // Check to see where a point on the line with matching Y coordinate is.\n const yDist = (point.y - lPt.y) / v.y;\n const xFromYDist = lPt.x + yDist * v.x;\n if (point.x === xFromYDist) return 0;\n\n // General case.\n // Check to see where a point on the line with matching X coordinate is.\n const xDist = (point.x - lPt.x) / v.x;\n const yFromXDist = lPt.y + xDist * v.y;\n if (point.y === yFromXDist) return 0;\n return point.y < yFromXDist ? -1 : 1;\n }\n\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n getIntersection(other) {\n // If bboxes don't overlap, there can't be any intersections\n const tBbox = this.bbox();\n const oBbox = other.bbox();\n const bboxOverlap = getBboxOverlap(tBbox, oBbox);\n if (bboxOverlap === null) return null;\n\n // We first check to see if the endpoints can be considered intersections.\n // This will 'snap' intersections to endpoints if possible, and will\n // handle cases of colinearity.\n\n const tlp = this.leftSE.point;\n const trp = this.rightSE.point;\n const olp = other.leftSE.point;\n const orp = other.rightSE.point;\n\n // does each endpoint touch the other segment?\n // note that we restrict the 'touching' definition to only allow segments\n // to touch endpoints that lie forward from where we are in the sweep line pass\n const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;\n const touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;\n const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;\n const touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0;\n\n // do left endpoints match?\n if (touchesThisLSE && touchesOtherLSE) {\n // these two cases are for colinear segments with matching left\n // endpoints, and one segment being longer than the other\n if (touchesThisRSE && !touchesOtherRSE) return trp;\n if (!touchesThisRSE && touchesOtherRSE) return orp;\n // either the two segments match exactly (two trival intersections)\n // or just on their left endpoint (one trivial intersection\n return null;\n }\n\n // does this left endpoint matches (other doesn't)\n if (touchesThisLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesOtherRSE) {\n if (tlp.x === orp.x && tlp.y === orp.y) return null;\n }\n // t-intersection on left endpoint\n return tlp;\n }\n\n // does other left endpoint matches (this doesn't)\n if (touchesOtherLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesThisRSE) {\n if (trp.x === olp.x && trp.y === olp.y) return null;\n }\n // t-intersection on left endpoint\n return olp;\n }\n\n // trivial intersection on right endpoints\n if (touchesThisRSE && touchesOtherRSE) return null;\n\n // t-intersections on just one right endpoint\n if (touchesThisRSE) return trp;\n if (touchesOtherRSE) return orp;\n\n // None of our endpoints intersect. Look for a general intersection between\n // infinite lines laid over the segments\n const pt = intersection$1(tlp, this.vector(), olp, other.vector());\n\n // are the segments parrallel? Note that if they were colinear with overlap,\n // they would have an endpoint intersection and that case was already handled above\n if (pt === null) return null;\n\n // is the intersection found between the lines not on the segments?\n if (!isInBbox(bboxOverlap, pt)) return null;\n\n // round the the computed point if needed\n return rounder.round(pt.x, pt.y);\n }\n\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n split(point) {\n const newEvents = [];\n const alreadyLinked = point.events !== undefined;\n const newLeftSE = new SweepEvent(point, true);\n const newRightSE = new SweepEvent(point, false);\n const oldRightSE = this.rightSE;\n this.replaceRightSE(newRightSE);\n newEvents.push(newRightSE);\n newEvents.push(newLeftSE);\n const newSeg = new Segment(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice());\n\n // when splitting a nearly vertical downward-facing segment,\n // sometimes one of the resulting new segments is vertical, in which\n // case its left and right events may need to be swapped\n if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {\n newSeg.swapEvents();\n }\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents();\n }\n\n // in the point we just used to create new sweep events with was already\n // linked to other events, we need to check if either of the affected\n // segments should be consumed\n if (alreadyLinked) {\n newLeftSE.checkForConsuming();\n newRightSE.checkForConsuming();\n }\n return newEvents;\n }\n\n /* Swap which event is left and right */\n swapEvents() {\n const tmpEvt = this.rightSE;\n this.rightSE = this.leftSE;\n this.leftSE = tmpEvt;\n this.leftSE.isLeft = true;\n this.rightSE.isLeft = false;\n for (let i = 0, iMax = this.windings.length; i < iMax; i++) {\n this.windings[i] *= -1;\n }\n }\n\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n consume(other) {\n let consumer = this;\n let consumee = other;\n while (consumer.consumedBy) consumer = consumer.consumedBy;\n while (consumee.consumedBy) consumee = consumee.consumedBy;\n const cmp = Segment.compare(consumer, consumee);\n if (cmp === 0) return; // already consumed\n // the winner of the consumption is the earlier segment\n // according to sweep line ordering\n if (cmp > 0) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n\n // make sure a segment doesn't consume it's prev\n if (consumer.prev === consumee) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n for (let i = 0, iMax = consumee.rings.length; i < iMax; i++) {\n const ring = consumee.rings[i];\n const winding = consumee.windings[i];\n const index = consumer.rings.indexOf(ring);\n if (index === -1) {\n consumer.rings.push(ring);\n consumer.windings.push(winding);\n } else consumer.windings[index] += winding;\n }\n consumee.rings = null;\n consumee.windings = null;\n consumee.consumedBy = consumer;\n\n // mark sweep events consumed as to maintain ordering in sweep event queue\n consumee.leftSE.consumedBy = consumer.leftSE;\n consumee.rightSE.consumedBy = consumer.rightSE;\n }\n\n /* The first segment previous segment chain that is in the result */\n prevInResult() {\n if (this._prevInResult !== undefined) return this._prevInResult;\n if (!this.prev) this._prevInResult = null;else if (this.prev.isInResult()) this._prevInResult = this.prev;else this._prevInResult = this.prev.prevInResult();\n return this._prevInResult;\n }\n beforeState() {\n if (this._beforeState !== undefined) return this._beforeState;\n if (!this.prev) this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: []\n };else {\n const seg = this.prev.consumedBy || this.prev;\n this._beforeState = seg.afterState();\n }\n return this._beforeState;\n }\n afterState() {\n if (this._afterState !== undefined) return this._afterState;\n const beforeState = this.beforeState();\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: []\n };\n const ringsAfter = this._afterState.rings;\n const windingsAfter = this._afterState.windings;\n const mpsAfter = this._afterState.multiPolys;\n\n // calculate ringsAfter, windingsAfter\n for (let i = 0, iMax = this.rings.length; i < iMax; i++) {\n const ring = this.rings[i];\n const winding = this.windings[i];\n const index = ringsAfter.indexOf(ring);\n if (index === -1) {\n ringsAfter.push(ring);\n windingsAfter.push(winding);\n } else windingsAfter[index] += winding;\n }\n\n // calcualte polysAfter\n const polysAfter = [];\n const polysExclude = [];\n for (let i = 0, iMax = ringsAfter.length; i < iMax; i++) {\n if (windingsAfter[i] === 0) continue; // non-zero rule\n const ring = ringsAfter[i];\n const poly = ring.poly;\n if (polysExclude.indexOf(poly) !== -1) continue;\n if (ring.isExterior) polysAfter.push(poly);else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);\n const index = polysAfter.indexOf(ring.poly);\n if (index !== -1) polysAfter.splice(index, 1);\n }\n }\n\n // calculate multiPolysAfter\n for (let i = 0, iMax = polysAfter.length; i < iMax; i++) {\n const mp = polysAfter[i].multiPoly;\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);\n }\n return this._afterState;\n }\n\n /* Is this segment part of the final result? */\n isInResult() {\n // if we've been consumed, we're not in the result\n if (this.consumedBy) return false;\n if (this._isInResult !== undefined) return this._isInResult;\n const mpsBefore = this.beforeState().multiPolys;\n const mpsAfter = this.afterState().multiPolys;\n switch (operation.type) {\n case \"union\":\n {\n // UNION - included iff:\n // * On one side of us there is 0 poly interiors AND\n // * On the other side there is 1 or more.\n const noBefores = mpsBefore.length === 0;\n const noAfters = mpsAfter.length === 0;\n this._isInResult = noBefores !== noAfters;\n break;\n }\n case \"intersection\":\n {\n // INTERSECTION - included iff:\n // * on one side of us all multipolys are rep. with poly interiors AND\n // * on the other side of us, not all multipolys are repsented\n // with poly interiors\n let least;\n let most;\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length;\n most = mpsAfter.length;\n } else {\n least = mpsAfter.length;\n most = mpsBefore.length;\n }\n this._isInResult = most === operation.numMultiPolys && least < most;\n break;\n }\n case \"xor\":\n {\n // XOR - included iff:\n // * the difference between the number of multipolys represented\n // with poly interiors on our two sides is an odd number\n const diff = Math.abs(mpsBefore.length - mpsAfter.length);\n this._isInResult = diff % 2 === 1;\n break;\n }\n case \"difference\":\n {\n // DIFFERENCE included iff:\n // * on exactly one side, we have just the subject\n const isJustSubject = mps => mps.length === 1 && mps[0].isSubject;\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);\n break;\n }\n default:\n throw new Error(`Unrecognized operation type found ${operation.type}`);\n }\n return this._isInResult;\n }\n}\n\nclass RingIn {\n constructor(geomRing, poly, isExterior) {\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.poly = poly;\n this.isExterior = isExterior;\n this.segments = [];\n if (typeof geomRing[0][0] !== \"number\" || typeof geomRing[0][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n const firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);\n this.bbox = {\n ll: {\n x: firstPoint.x,\n y: firstPoint.y\n },\n ur: {\n x: firstPoint.x,\n y: firstPoint.y\n }\n };\n let prevPoint = firstPoint;\n for (let i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (typeof geomRing[i][0] !== \"number\" || typeof geomRing[i][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n let point = rounder.round(geomRing[i][0], geomRing[i][1]);\n // skip repeated points\n if (point.x === prevPoint.x && point.y === prevPoint.y) continue;\n this.segments.push(Segment.fromRing(prevPoint, point, this));\n if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;\n if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;\n if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;\n if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;\n prevPoint = point;\n }\n // add segment from last to first if last is not the same as first\n if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));\n }\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.segments.length; i < iMax; i++) {\n const segment = this.segments[i];\n sweepEvents.push(segment.leftSE);\n sweepEvents.push(segment.rightSE);\n }\n return sweepEvents;\n }\n}\nclass PolyIn {\n constructor(geomPoly, multiPoly) {\n if (!Array.isArray(geomPoly)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.exteriorRing = new RingIn(geomPoly[0], this, true);\n // copy by value\n this.bbox = {\n ll: {\n x: this.exteriorRing.bbox.ll.x,\n y: this.exteriorRing.bbox.ll.y\n },\n ur: {\n x: this.exteriorRing.bbox.ur.x,\n y: this.exteriorRing.bbox.ur.y\n }\n };\n this.interiorRings = [];\n for (let i = 1, iMax = geomPoly.length; i < iMax; i++) {\n const ring = new RingIn(geomPoly[i], this, false);\n if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;\n if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;\n if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;\n if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;\n this.interiorRings.push(ring);\n }\n this.multiPoly = multiPoly;\n }\n getSweepEvents() {\n const sweepEvents = this.exteriorRing.getSweepEvents();\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringSweepEvents = this.interiorRings[i].getSweepEvents();\n for (let j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n}\nclass MultiPolyIn {\n constructor(geom, isSubject) {\n if (!Array.isArray(geom)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n try {\n // if the input looks like a polygon, convert it to a multipolygon\n if (typeof geom[0][0][0] === \"number\") geom = [geom];\n } catch (ex) {\n // The input is either malformed or has empty arrays.\n // In either case, it will be handled later on.\n }\n this.polys = [];\n this.bbox = {\n ll: {\n x: Number.POSITIVE_INFINITY,\n y: Number.POSITIVE_INFINITY\n },\n ur: {\n x: Number.NEGATIVE_INFINITY,\n y: Number.NEGATIVE_INFINITY\n }\n };\n for (let i = 0, iMax = geom.length; i < iMax; i++) {\n const poly = new PolyIn(geom[i], this);\n if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;\n if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;\n if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;\n if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;\n this.polys.push(poly);\n }\n this.isSubject = isSubject;\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polySweepEvents = this.polys[i].getSweepEvents();\n for (let j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n}\n\nclass RingOut {\n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n static factory(allSegments) {\n const ringsOut = [];\n for (let i = 0, iMax = allSegments.length; i < iMax; i++) {\n const segment = allSegments[i];\n if (!segment.isInResult() || segment.ringOut) continue;\n let prevEvent = null;\n let event = segment.leftSE;\n let nextEvent = segment.rightSE;\n const events = [event];\n const startingPoint = event.point;\n const intersectionLEs = [];\n\n /* Walk the chain of linked events to form a closed ring */\n while (true) {\n prevEvent = event;\n event = nextEvent;\n events.push(event);\n\n /* Is the ring complete? */\n if (event.point === startingPoint) break;\n while (true) {\n const availableLEs = event.getAvailableLinkedEvents();\n\n /* Did we hit a dead end? This shouldn't happen.\n * Indicates some earlier part of the algorithm malfunctioned. */\n if (availableLEs.length === 0) {\n const firstPt = events[0].point;\n const lastPt = events[events.length - 1].point;\n throw new Error(`Unable to complete output ring starting at [${firstPt.x},` + ` ${firstPt.y}]. Last matching segment found ends at` + ` [${lastPt.x}, ${lastPt.y}].`);\n }\n\n /* Only one way to go, so cotinue on the path */\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE;\n break;\n }\n\n /* We must have an intersection. Check for a completed loop */\n let indexLE = null;\n for (let j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j;\n break;\n }\n }\n /* Found a completed loop. Cut that off and make a ring */\n if (indexLE !== null) {\n const intersectionLE = intersectionLEs.splice(indexLE)[0];\n const ringEvents = events.splice(intersectionLE.index);\n ringEvents.unshift(ringEvents[0].otherSE);\n ringsOut.push(new RingOut(ringEvents.reverse()));\n continue;\n }\n /* register the intersection */\n intersectionLEs.push({\n index: events.length,\n point: event.point\n });\n /* Choose the left-most option to continue the walk */\n const comparator = event.getLeftmostComparator(prevEvent);\n nextEvent = availableLEs.sort(comparator)[0].otherSE;\n break;\n }\n }\n ringsOut.push(new RingOut(events));\n }\n return ringsOut;\n }\n constructor(events) {\n this.events = events;\n for (let i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this;\n }\n this.poly = null;\n }\n getGeom() {\n // Remove superfluous points (ie extra points along a straight line),\n let prevPt = this.events[0].point;\n const points = [prevPt];\n for (let i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n const pt = this.events[i].point;\n const nextPt = this.events[i + 1].point;\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) continue;\n points.push(pt);\n prevPt = pt;\n }\n\n // ring was all (within rounding error of angle calc) colinear points\n if (points.length === 1) return null;\n\n // check if the starting point is necessary\n const pt = points[0];\n const nextPt = points[1];\n if (compareVectorAngles(pt, prevPt, nextPt) === 0) points.shift();\n points.push(points[0]);\n const step = this.isExteriorRing() ? 1 : -1;\n const iStart = this.isExteriorRing() ? 0 : points.length - 1;\n const iEnd = this.isExteriorRing() ? points.length : -1;\n const orderedPoints = [];\n for (let i = iStart; i != iEnd; i += step) orderedPoints.push([points[i].x, points[i].y]);\n return orderedPoints;\n }\n isExteriorRing() {\n if (this._isExteriorRing === undefined) {\n const enclosing = this.enclosingRing();\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;\n }\n return this._isExteriorRing;\n }\n enclosingRing() {\n if (this._enclosingRing === undefined) {\n this._enclosingRing = this._calcEnclosingRing();\n }\n return this._enclosingRing;\n }\n\n /* Returns the ring that encloses this one, if any */\n _calcEnclosingRing() {\n // start with the ealier sweep line event so that the prevSeg\n // chain doesn't lead us inside of a loop of ours\n let leftMostEvt = this.events[0];\n for (let i = 1, iMax = this.events.length; i < iMax; i++) {\n const evt = this.events[i];\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;\n }\n let prevSeg = leftMostEvt.segment.prevInResult();\n let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n while (true) {\n // no segment found, thus no ring can enclose us\n if (!prevSeg) return null;\n\n // no segments below prev segment found, thus the ring of the prev\n // segment must loop back around and enclose us\n if (!prevPrevSeg) return prevSeg.ringOut;\n\n // if the two segments are of different rings, the ring of the prev\n // segment must either loop around us or the ring of the prev prev\n // seg, which would make us and the ring of the prev peers\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut;\n } else return prevSeg.ringOut.enclosingRing();\n }\n\n // two segments are from the same ring, so this was a penisula\n // of that ring. iterate downward, keep searching\n prevSeg = prevPrevSeg.prevInResult();\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n }\n }\n}\nclass PolyOut {\n constructor(exteriorRing) {\n this.exteriorRing = exteriorRing;\n exteriorRing.poly = this;\n this.interiorRings = [];\n }\n addInterior(ring) {\n this.interiorRings.push(ring);\n ring.poly = this;\n }\n getGeom() {\n const geom = [this.exteriorRing.getGeom()];\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (geom[0] === null) return null;\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringGeom = this.interiorRings[i].getGeom();\n // interior ring was all (within rounding error of angle calc) colinear points\n if (ringGeom === null) continue;\n geom.push(ringGeom);\n }\n return geom;\n }\n}\nclass MultiPolyOut {\n constructor(rings) {\n this.rings = rings;\n this.polys = this._composePolys(rings);\n }\n getGeom() {\n const geom = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polyGeom = this.polys[i].getGeom();\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (polyGeom === null) continue;\n geom.push(polyGeom);\n }\n return geom;\n }\n _composePolys(rings) {\n const polys = [];\n for (let i = 0, iMax = rings.length; i < iMax; i++) {\n const ring = rings[i];\n if (ring.poly) continue;\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring));else {\n const enclosingRing = ring.enclosingRing();\n if (!enclosingRing.poly) polys.push(new PolyOut(enclosingRing));\n enclosingRing.poly.addInterior(ring);\n }\n }\n return polys;\n }\n}\n\n/**\n * NOTE: We must be careful not to change any segments while\n * they are in the SplayTree. AFAIK, there's no way to tell\n * the tree to rebalance itself - thus before splitting\n * a segment that's in the tree, we remove it from the tree,\n * do the split, then re-insert it. (Even though splitting a\n * segment *shouldn't* change its correct position in the\n * sweep line tree, the reality is because of rounding errors,\n * it sometimes does.)\n */\n\nclass SweepLine {\n constructor(queue) {\n let comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Segment.compare;\n this.queue = queue;\n this.tree = new SplayTree(comparator);\n this.segments = [];\n }\n process(event) {\n const segment = event.segment;\n const newEvents = [];\n\n // if we've already been consumed by another segment,\n // clean up our body parts and get out\n if (event.consumedBy) {\n if (event.isLeft) this.queue.remove(event.otherSE);else this.tree.remove(segment);\n return newEvents;\n }\n const node = event.isLeft ? this.tree.add(segment) : this.tree.find(segment);\n if (!node) throw new Error(`Unable to find segment #${segment.id} ` + `[${segment.leftSE.point.x}, ${segment.leftSE.point.y}] -> ` + `[${segment.rightSE.point.x}, ${segment.rightSE.point.y}] ` + \"in SweepLine tree.\");\n let prevNode = node;\n let nextNode = node;\n let prevSeg = undefined;\n let nextSeg = undefined;\n\n // skip consumed segments still in tree\n while (prevSeg === undefined) {\n prevNode = this.tree.prev(prevNode);\n if (prevNode === null) prevSeg = null;else if (prevNode.key.consumedBy === undefined) prevSeg = prevNode.key;\n }\n\n // skip consumed segments still in tree\n while (nextSeg === undefined) {\n nextNode = this.tree.next(nextNode);\n if (nextNode === null) nextSeg = null;else if (nextNode.key.consumedBy === undefined) nextSeg = nextNode.key;\n }\n if (event.isLeft) {\n // Check for intersections against the previous segment in the sweep line\n let prevMySplitter = null;\n if (prevSeg) {\n const prevInter = prevSeg.getIntersection(segment);\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;\n if (!prevSeg.isAnEndpoint(prevInter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n\n // Check for intersections against the next segment in the sweep line\n let nextMySplitter = null;\n if (nextSeg) {\n const nextInter = nextSeg.getIntersection(segment);\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;\n if (!nextSeg.isAnEndpoint(nextInter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n\n // For simplicity, even if we find more than one intersection we only\n // spilt on the 'earliest' (sweep-line style) of the intersections.\n // The other intersection will be handled in a future process().\n if (prevMySplitter !== null || nextMySplitter !== null) {\n let mySplitter = null;\n if (prevMySplitter === null) mySplitter = nextMySplitter;else if (nextMySplitter === null) mySplitter = prevMySplitter;else {\n const cmpSplitters = SweepEvent.comparePoints(prevMySplitter, nextMySplitter);\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;\n }\n\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n this.queue.remove(segment.rightSE);\n newEvents.push(segment.rightSE);\n const newEventsFromSplit = segment.split(mySplitter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (newEvents.length > 0) {\n // We found some intersections, so re-do the current event to\n // make sure sweep line ordering is totally consistent for later\n // use with the segment 'prev' pointers\n this.tree.remove(segment);\n newEvents.push(event);\n } else {\n // done with left event\n this.segments.push(segment);\n segment.prev = prevSeg;\n }\n } else {\n // event.isRight\n\n // since we're about to be removed from the sweep line, check for\n // intersections between our previous and next segments\n if (prevSeg && nextSeg) {\n const inter = prevSeg.getIntersection(nextSeg);\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (!nextSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n this.tree.remove(segment);\n }\n return newEvents;\n }\n\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n _splitSafely(seg, pt) {\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n // removeNode() doesn't work, so have re-find the seg\n // https://github.com/w8r/splay-tree/pull/5\n this.tree.remove(seg);\n const rightSE = seg.rightSE;\n this.queue.remove(rightSE);\n const newEvents = seg.split(pt);\n newEvents.push(rightSE);\n // splitting can trigger consumption\n if (seg.consumedBy === undefined) this.tree.add(seg);\n return newEvents;\n }\n}\n\n// Limits on iterative processes to prevent infinite loops - usually caused by floating-point math round-off errors.\nconst POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== \"undefined\" && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1000000;\nconst POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== \"undefined\" && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1000000;\nclass Operation {\n run(type, geom, moreGeoms) {\n operation.type = type;\n rounder.reset();\n\n /* Convert inputs to MultiPoly objects */\n const multipolys = [new MultiPolyIn(geom, true)];\n for (let i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new MultiPolyIn(moreGeoms[i], false));\n }\n operation.numMultiPolys = multipolys.length;\n\n /* BBox optimization for difference operation\n * If the bbox of a multipolygon that's part of the clipping doesn't\n * intersect the bbox of the subject at all, we can just drop that\n * multiploygon. */\n if (operation.type === \"difference\") {\n // in place removal\n const subject = multipolys[0];\n let i = 1;\n while (i < multipolys.length) {\n if (getBboxOverlap(multipolys[i].bbox, subject.bbox) !== null) i++;else multipolys.splice(i, 1);\n }\n }\n\n /* BBox optimization for intersection operation\n * If we can find any pair of multipolygons whose bbox does not overlap,\n * then the result will be empty. */\n if (operation.type === \"intersection\") {\n // TODO: this is O(n^2) in number of polygons. By sorting the bboxes,\n // it could be optimized to O(n * ln(n))\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const mpA = multipolys[i];\n for (let j = i + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return [];\n }\n }\n }\n\n /* Put segment endpoints in a priority queue */\n const queue = new SplayTree(SweepEvent.compare);\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const sweepEvents = multipolys[i].getSweepEvents();\n for (let j = 0, jMax = sweepEvents.length; j < jMax; j++) {\n queue.insert(sweepEvents[j]);\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when putting segment endpoints in a priority queue \" + \"(queue size too big).\");\n }\n }\n }\n\n /* Pass the sweep line over those endpoints */\n const sweepLine = new SweepLine(queue);\n let prevQueueSize = queue.size;\n let node = queue.pop();\n while (node) {\n const evt = node.key;\n if (queue.size === prevQueueSize) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n const seg = evt.segment;\n throw new Error(`Unable to pop() ${evt.isLeft ? \"left\" : \"right\"} SweepEvent ` + `[${evt.point.x}, ${evt.point.y}] from segment #${seg.id} ` + `[${seg.leftSE.point.x}, ${seg.leftSE.point.y}] -> ` + `[${seg.rightSE.point.x}, ${seg.rightSE.point.y}] from queue.`);\n }\n if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when passing sweep line over endpoints \" + \"(queue size too big).\");\n }\n if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {\n // prevents an infinite loop, an otherwise common manifestation of bugs\n throw new Error(\"Infinite loop when passing sweep line over endpoints \" + \"(too many sweep line segments).\");\n }\n const newEvents = sweepLine.process(evt);\n for (let i = 0, iMax = newEvents.length; i < iMax; i++) {\n const evt = newEvents[i];\n if (evt.consumedBy === undefined) queue.insert(evt);\n }\n prevQueueSize = queue.size;\n node = queue.pop();\n }\n\n // free some memory we don't need anymore\n rounder.reset();\n\n /* Collect and compile segments we're keeping into a multipolygon */\n const ringsOut = RingOut.factory(sweepLine.segments);\n const result = new MultiPolyOut(ringsOut);\n return result.getGeom();\n }\n}\n\n// singleton available by import\nconst operation = new Operation();\n\nconst union = function (geom) {\n for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n moreGeoms[_key - 1] = arguments[_key];\n }\n return operation.run(\"union\", geom, moreGeoms);\n};\nconst intersection = function (geom) {\n for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n moreGeoms[_key2 - 1] = arguments[_key2];\n }\n return operation.run(\"intersection\", geom, moreGeoms);\n};\nconst xor = function (geom) {\n for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n moreGeoms[_key3 - 1] = arguments[_key3];\n }\n return operation.run(\"xor\", geom, moreGeoms);\n};\nconst difference = function (subjectGeom) {\n for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n clippingGeoms[_key4 - 1] = arguments[_key4];\n }\n return operation.run(\"difference\", subjectGeom, clippingGeoms);\n};\nvar index = {\n union: union,\n intersection: intersection,\n xor: xor,\n difference: difference\n};\n\nexport { index as default };\n","// index.ts\nimport polygonClipping from \"polygon-clipping\";\nimport { polygon, multiPolygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nfunction difference(features) {\n const geoms = [];\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates);\n });\n if (geoms.length < 2) {\n throw new Error(\"Must have at least two features\");\n }\n const properties = features.features[0].properties || {};\n const differenced = polygonClipping.difference(geoms[0], ...geoms.slice(1));\n if (differenced.length === 0)\n return null;\n if (differenced.length === 1)\n return polygon(differenced[0], properties);\n return multiPolygon(differenced, properties);\n}\nvar turf_difference_default = difference;\nexport {\n turf_difference_default as default,\n difference\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { flattenEach } from \"@turf/meta\";\nimport { featureCollection } from \"@turf/helpers\";\nfunction flatten(geojson) {\n if (!geojson)\n throw new Error(\"geojson is required\");\n var results = [];\n flattenEach(geojson, function(feature) {\n results.push(feature);\n });\n return featureCollection(results);\n}\nvar turf_flatten_default = flatten;\nexport {\n turf_flatten_default as default,\n flatten\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport polygonClipping from \"polygon-clipping\";\nimport { multiPolygon, polygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nfunction union(features, options = {}) {\n const geoms = [];\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates);\n });\n if (geoms.length < 2) {\n throw new Error(\"Must have at least 2 geometries\");\n }\n const unioned = polygonClipping.union(geoms[0], ...geoms.slice(1));\n if (unioned.length === 0)\n return null;\n if (unioned.length === 1)\n return polygon(unioned[0], options.properties);\n else\n return multiPolygon(unioned, options.properties);\n}\nvar turf_union_default = union;\nexport {\n turf_union_default as default,\n union\n};\n//# sourceMappingURL=index.js.map","import type { BBox } from \"./types\";\n\n// taken from Leaflet\nexport function wrapNum(\n x: number,\n range: [number, number],\n includeMax: boolean,\n) {\n const max = range[1],\n min = range[0],\n d = max - min;\n\n return x === max && includeMax ? x : ((((x - min) % d) + d) % d) + min;\n}\n\nexport function unwrapBbox(bbox0: BBox): BBox {\n const bbox = [...bbox0] satisfies BBox;\n\n if (bbox[2] < bbox[0]) {\n if (\n Math.abs((bbox[0] + bbox[2] + 360) / 2) >\n Math.abs((bbox[0] - 360 + bbox[2]) / 2)\n ) {\n bbox[0] -= 360;\n } else {\n bbox[2] += 360;\n }\n }\n\n return bbox;\n}\n","import bbox from \"@turf/bbox\";\nimport difference from \"@turf/difference\";\nimport flatten from \"@turf/flatten\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type {\n Feature,\n FeatureCollection,\n MultiPolygon,\n Polygon,\n} from \"geojson\";\nimport { unwrapBbox } from \"./geoUtils\";\nimport type { BBox } from \"./types\";\n\nexport function setMask(\n picked: Feature<Polygon | MultiPolygon>,\n setData: (data?: FeatureCollection<Polygon | MultiPolygon>) => void,\n): void {\n const diff = difference(\n featureCollection([\n polygon([\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ]),\n picked,\n ]),\n );\n\n if (!diff) {\n return;\n }\n\n diff.properties = { isMask: true };\n\n const bb = unwrapBbox(bbox(picked) as BBox);\n\n // bigger features (continents, oceans) have bigger tolerance\n // because of the used source data simplification\n const tolerance = (bb[2] - bb[0]) / 360 / 1_000;\n\n const leaksLeft = bb[0] < -180;\n const leaksRight = bb[2] > 180;\n\n const flattened = flatten(picked);\n\n if (flattened.features.length > 1 && (leaksLeft || leaksRight)) {\n for (const poly of flattened.features) {\n const bb = unwrapBbox(bbox(poly) as BBox);\n\n if (leaksRight && bb[0] < -180 + tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] += 360 - tolerance;\n }\n }\n }\n\n if (leaksLeft && bb[2] > 180 - tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] -= 360 - tolerance;\n }\n }\n }\n }\n }\n\n setData(\n featureCollection([\n flattened.features.length < 2 ? picked : (union(flattened) ?? picked),\n diff,\n ]),\n );\n}\n","import type { FeatureCollection, MultiPolygon, Polygon } from \"geojson\";\nimport { Feature as OlFeature, type MapBrowserEvent } from \"ol\";\nimport type { FeatureLike } from \"ol/Feature\";\nimport type Map from \"ol/Map\";\nimport type { AnimationOptions, FitOptions } from \"ol/View\";\nimport {\n GeometryCollection as OlGeometryCollection,\n LineString as OlLineString,\n MultiLineString as OlMultiLineString,\n MultiPolygon as OlMultiPolygon,\n Point as OlPoint,\n Polygon as OlPolygon,\n type Geometry as OlGeometry,\n} from \"ol/geom\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport {\n fromLonLat,\n getUserProjection,\n toLonLat,\n transformExtent,\n} from \"ol/proj\";\nimport VectorSource from \"ol/source/Vector\";\nimport Fill from \"ol/style/Fill\";\nimport Icon from \"ol/style/Icon\";\nimport Stroke from \"ol/style/Stroke\";\nimport Style, { type StyleLike } from \"ol/style/Style\";\nimport Text from \"ol/style/Text\";\nimport type { FlatStyleLike } from \"ol/style/flat\";\nimport { setMask } from \"./mask\";\nimport type {\n BBox,\n Feature as FeatureType,\n MapController,\n MapEvent,\n Position,\n} from \"./types\";\n\nconst EPSG_4326 = \"EPSG:4326\";\n\nfunction defaultStyle(feature: FeatureLike) {\n const properties = feature.getProperties();\n\n const { isMask } = properties;\n\n const type = feature.getGeometry()?.getType();\n\n const weight = isMask\n ? 0\n : type === \"LineString\" || type === \"MultiLineString\"\n ? 3\n : 2;\n\n return new Style({\n stroke: isMask\n ? undefined\n : new Stroke({\n color: \"#3170fe\",\n lineDash: [weight, weight],\n width: weight,\n lineCap: \"butt\",\n }),\n fill: isMask\n ? new Fill({\n color: \"#00000020\",\n })\n : undefined,\n image: new Icon({\n src: `/icons/marker_${\n properties.isReverse\n ? \"reverse\"\n : properties.isSelected\n ? \"selected\"\n : \"unselected\"\n }.svg`,\n anchor: [0.5, 1],\n }),\n zIndex: properties.isSelected ? 2 : properties.isReverse ? 0 : 1,\n text:\n properties.isSelected && properties.tooltip\n ? new Text({\n backgroundFill: new Fill({ color: \"white\" }),\n text: properties.tooltip,\n offsetY: -40,\n backgroundStroke: new Stroke({\n color: \"white\",\n lineJoin: \"round\",\n width: 3,\n }),\n padding: [2, 0, 0, 2],\n })\n : undefined,\n });\n}\n\nexport function createOpenLayersMapController(\n map: Map,\n flyToOptions: AnimationOptions = {},\n flyToBounds: FitOptions = {},\n fullGeometryStyle: StyleLike | FlatStyleLike = defaultStyle,\n) {\n let prevSelected = -1;\n\n let prevHovered: string | undefined;\n\n let eventHandler: ((e: MapEvent) => void) | undefined;\n\n let reverseMarker: OlFeature | undefined;\n\n let indicatingReverse = false;\n\n const vectorLayer = new VectorLayer({\n updateWhileAnimating: true,\n });\n\n map.addLayer(vectorLayer);\n\n const source = new VectorSource({});\n\n vectorLayer.setSource(source);\n\n vectorLayer.setStyle(fullGeometryStyle);\n\n map.on(\"click\", (e) => {\n map.forEachFeatureAtPixel(e.pixel, (feature) => {\n const id = feature.getId() as string;\n\n if (!id) {\n return;\n }\n\n e.stopPropagation();\n\n eventHandler?.({ type: \"markerClick\", id });\n\n return feature;\n });\n });\n\n map.on(\"pointermove\", (e) => {\n const featureId = map.forEachFeatureAtPixel(e.pixel, (feature) => {\n return feature.getId() as string | undefined;\n });\n\n if (prevHovered === featureId) {\n return;\n }\n\n if (prevHovered) {\n eventHandler?.({\n type: \"markerMouseLeave\",\n id: prevHovered,\n });\n }\n\n if (featureId) {\n eventHandler?.({\n type: \"markerMouseEnter\",\n id: featureId,\n });\n }\n\n map.getTargetElement().style.cursor = featureId\n ? \"pointer\"\n : indicatingReverse\n ? \"crosshair\"\n : \"\";\n\n prevHovered = featureId;\n });\n\n function getProjection() {\n return getUserProjection() ?? map.getView().getProjection();\n }\n\n function fromWgs84(geometry: OlGeometry) {\n return geometry.transform(EPSG_4326, getProjection());\n }\n\n const handleMapClick = (e: MapBrowserEvent<PointerEvent>) => {\n eventHandler?.({\n type: \"mapClick\",\n coordinates: toLonLat(e.coordinate, getProjection()) as [number, number],\n });\n };\n\n return {\n setEventHandler(handler: undefined | ((e: MapEvent) => void)): void {\n if (handler) {\n eventHandler = handler;\n map.on(\"click\", handleMapClick);\n } else {\n eventHandler = undefined;\n map.un(\"click\", handleMapClick);\n }\n },\n\n flyTo(center: Position, zoom: number) {\n map.getView().animate({\n center: fromLonLat(center, getProjection()),\n ...(zoom ? { zoom } : {}),\n duration: 2000,\n ...flyToOptions,\n });\n },\n\n fitBounds(bbox: BBox, padding: number, maxZoom: number): void {\n map.getView().fit(transformExtent(bbox, EPSG_4326, getProjection()), {\n padding: [padding, padding, padding, padding],\n ...(maxZoom ? { maxZoom } : {}),\n duration: 2000,\n ...flyToBounds,\n });\n },\n\n indicateReverse(reverse: boolean): void {\n indicatingReverse = reverse;\n\n map.getTargetElement().style.cursor = reverse ? \"crosshair\" : \"\";\n },\n\n setReverseMarker(coordinates?: Position) {\n if (reverseMarker) {\n if (!coordinates) {\n source.removeFeature(reverseMarker);\n\n reverseMarker.dispose();\n\n reverseMarker = undefined;\n } else {\n (reverseMarker.getGeometry() as OlPoint).setCoordinates(\n fromLonLat(coordinates, getProjection()),\n );\n }\n } else if (coordinates) {\n reverseMarker = new OlFeature(\n new OlPoint(fromLonLat(coordinates, getProjection())),\n );\n\n reverseMarker.setProperties({ isReverse: true });\n\n source.addFeature(reverseMarker);\n }\n },\n\n setMarkers(\n markedFeatures: FeatureType[] | undefined,\n picked: FeatureType | undefined,\n ): void {\n function setData(data?: FeatureCollection<Polygon | MultiPolygon>) {\n if (!data) {\n return;\n }\n\n for (const f of data.features) {\n const geom =\n f.geometry.type === \"Polygon\"\n ? new OlPolygon(f.geometry.coordinates)\n : f.geometry.type === \"MultiPolygon\"\n ? new OlMultiPolygon(f.geometry.coordinates)\n : null;\n\n if (!geom) {\n continue;\n }\n\n source.addFeature(\n new OlFeature({\n isMask: !!f.properties?.isMask,\n geometry: fromWgs84(geom),\n }),\n );\n }\n }\n\n source.clear();\n\n if (reverseMarker) {\n source.addFeature(reverseMarker);\n }\n\n if (picked) {\n let handled = false;\n\n if (picked.geometry.type === \"GeometryCollection\") {\n const geoms = picked.geometry.geometries\n .map((geometry) =>\n geometry.type === \"Polygon\"\n ? new OlPolygon(geometry.coordinates)\n : geometry.type === \"MultiPolygon\"\n ? new OlMultiPolygon(geometry.coordinates)\n : null,\n )\n .filter(<T>(a: T | null): a is T => !!a);\n\n if (geoms.length > 0) {\n source.addFeature(\n new OlFeature(fromWgs84(new OlGeometryCollection(geoms))),\n );\n\n handled = true;\n } else {\n for (const geometry of picked.geometry.geometries) {\n if (geometry.type === \"LineString\") {\n source.addFeature(\n new OlFeature(\n fromWgs84(new OlLineString(geometry.coordinates)),\n ),\n );\n\n handled = true;\n } else if (geometry.type === \"MultiLineString\") {\n source.addFeature(\n new OlFeature(\n fromWgs84(new OlMultiLineString(geometry.coordinates)),\n ),\n );\n }\n\n handled = true;\n }\n }\n }\n\n if (handled) {\n // nothing\n } else if (picked.geometry.type === \"Polygon\") {\n setMask(picked as FeatureType<Polygon>, setData);\n } else if (picked.geometry.type === \"MultiPolygon\") {\n setMask(picked as FeatureType<MultiPolygon>, setData);\n } else if (picked.geometry.type === \"LineString\") {\n source.addFeature(\n new OlFeature(\n fromWgs84(new OlLineString(picked.geometry.coordinates)),\n ),\n );\n\n return; // no pin for (multi)linestrings\n } else if (picked.geometry.type === \"MultiLineString\") {\n source.addFeature(\n new OlFeature(\n fromWgs84(new OlMultiLineString(picked.geometry.coordinates)),\n ),\n );\n\n return; // no pin for (multi)linestrings\n }\n\n source.addFeature(new OlFeature(fromWgs84(new OlPoint(picked.center))));\n }\n\n for (const feature of markedFeatures ?? []) {\n if (feature === picked) {\n continue;\n }\n\n const marker = new OlFeature(\n new OlPoint(fromLonLat(feature.center, getProjection())),\n );\n\n marker.setId(feature.id);\n\n marker.setProperties({\n fuzzy: !!feature.matching_text,\n tooltip:\n feature.place_type[0] === \"reverse\"\n ? feature.place_name\n : feature.place_name.replace(/,.*/, \"\"),\n });\n\n source.addFeature(marker);\n }\n },\n\n setSelectedMarker(index: number): void {\n const features = source.getFeatures();\n\n const offset = features[0]?.getProperties().isReverse ? 1 : 0;\n\n if (prevSelected > -1) {\n features[prevSelected + offset]?.setProperties({\n isSelected: false,\n });\n }\n\n if (index > -1) {\n features[index + offset]?.setProperties({\n isSelected: true,\n });\n }\n\n prevSelected = index;\n },\n\n getCenterAndZoom() {\n const view = map.getView();\n\n const center = view.getCenter();\n\n const zoom = view.getZoom();\n\n if (!center || zoom === undefined) {\n return undefined;\n }\n\n return [zoom, ...(toLonLat(center, getProjection()) as Position)];\n },\n } satisfies MapController;\n}\n"],"names":["feature","geom","properties","options","feat","polygon","coordinates","ring","j","featureCollection","features","fc","multiPolygon","coordEach","geojson","callback","excludeWrapCoord","k","l","geometry","stopG","coords","geometryMaybeCollection","wrapShrink","coordIndex","isGeometryCollection","type","isFeatureCollection","isFeature","stop","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","geomEach","i","g","featureProperties","featureBBox","featureId","flattenEach","bbox","id","coordinate","result","coord","turf_bbox_default","__generator","thisArg","body","_","t","f","y","verb","n","v","step","op","e","Node","key","data","DEFAULT_COMPARE","a","b","splay","comparator","N","r","cmp","insert","node","split","left","right","merge","printRow","root","prefix","isTail","out","printNode","indent","Tree","x","current","compare","visitor","ctx","Q","done","low","high","fn","keys","_a","values","index","d","successor","predecessor","toList","presort","size","sort","loadRecursive","mergedList","mergeLists","createList","sortedListToBST","newKey","newData","start","end","middle","head","p","list","l1","l2","p1","p2","pivot","tmp","epsilon","splitter","resulterrbound","sum","elen","flen","h","Qnew","hh","bvirt","enow","fnow","eindex","findex","hindex","estimate","vec","ccwerrboundA","ccwerrboundB","ccwerrboundC","B","C1","C2","D","u","orient2dadapt","ax","ay","bx","by","cx","cy","detsum","acxtail","acytail","bcxtail","bcytail","c","ahi","alo","bhi","blo","_i","_j","_0","s1","s0","t1","t0","u3","acx","bcx","acy","bcy","det","errbound","C1len","C2len","Dlen","orient2d","detleft","detright","isInBbox","point","getBboxOverlap","b1","b2","lowerX","upperX","lowerY","upperY","EPSILON_SQ","ab","PtRounder","CoordRounder","SplayTree","prevNode","nextNode","rounder","crossProduct","dotProduct","compareVectorAngles","basePt","endPt1","endPt2","res","length","sineOfAngle","pShared","pBase","pAngle","vBase","vAngle","cosineOfAngle","horizontalIntersection","pt","verticalIntersection","intersection$1","pt1","v1","pt2","v2","kross","ve","d1","d2","x1","x2","y1","y2","SweepEvent","ptCmp","Segment","aPt","bPt","isLeft","other","otherEvents","iMax","evt","numEvents","evt1","evt2","events","baseEvent","cache","fillCache","linkedEvent","nextEvent","asine","acosine","bsine","bcosine","segmentId","alx","blx","arx","brx","aly","bly","ary","bry","aCmpBLeft","bCmpARight","bCmpALeft","aCmpBRight","leftSE","rightSE","rings","windings","leftPt","rightPt","winding","cmpPts","newRightSE","lPt","rPt","yDist","xFromYDist","xDist","yFromXDist","tBbox","oBbox","bboxOverlap","tlp","trp","olp","orp","touchesOtherLSE","touchesThisLSE","touchesOtherRSE","touchesThisRSE","newEvents","alreadyLinked","newLeftSE","oldRightSE","newSeg","tmpEvt","consumer","consumee","seg","beforeState","ringsAfter","windingsAfter","mpsAfter","polysAfter","polysExclude","poly","mp","mpsBefore","operation","noBefores","noAfters","least","most","diff","isJustSubject","mps","RingIn","geomRing","isExterior","firstPoint","prevPoint","sweepEvents","segment","PolyIn","geomPoly","multiPoly","ringSweepEvents","jMax","MultiPolyIn","isSubject","polySweepEvents","RingOut","allSegments","ringsOut","prevEvent","event","startingPoint","intersectionLEs","availableLEs","firstPt","lastPt","indexLE","intersectionLE","ringEvents","prevPt","points","nextPt","iStart","iEnd","orderedPoints","enclosing","leftMostEvt","prevSeg","prevPrevSeg","PolyOut","exteriorRing","ringGeom","MultiPolyOut","polyGeom","polys","enclosingRing","SweepLine","queue","nextSeg","prevMySplitter","prevInter","newEventsFromSplit","nextMySplitter","nextInter","mySplitter","inter","POLYGON_CLIPPING_MAX_QUEUE_SIZE","POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS","Operation","moreGeoms","multipolys","subject","mpA","sweepLine","prevQueueSize","union","_len","_key","intersection","_len2","_key2","xor","_len3","_key3","difference","subjectGeom","_len4","clippingGeoms","_key4","geoms","differenced","polygonClipping","turf_difference_default","flatten","results","turf_flatten_default","unioned","turf_union_default","unwrapBbox","bbox0","setMask","picked","setData","bb","tolerance","leaksLeft","leaksRight","flattened","position","EPSG_4326","defaultStyle","isMask","weight","Style","Stroke","Fill","Icon","Text","createOpenLayersMapController","map","flyToOptions","flyToBounds","fullGeometryStyle","prevSelected","prevHovered","eventHandler","reverseMarker","indicatingReverse","vectorLayer","VectorLayer","source","VectorSource","getProjection","getUserProjection","fromWgs84","handleMapClick","toLonLat","handler","center","zoom","fromLonLat","padding","maxZoom","transformExtent","reverse","OlFeature","OlPoint","markedFeatures","OlPolygon","OlMultiPolygon","handled","OlGeometryCollection","OlLineString","OlMultiLineString","marker","offset","_b","_c","view"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
|