UNPKG

geotoolbox

Version:

geotoolbox is GIS javascript library. It is based on d3geo, topojson and geos-wasm.

48 lines (42 loc) 1.75 kB
import initGeosJs from "geos-wasm"; import { geojsonToGeosGeom, geosGeomToGeojson } from "geos-wasm/helpers"; /** * @function largestemptycircle * @summary Constructs the "largest empty circle" (LEC) for a set of obstacle geometries and within a polygonal boundary, with accuracy to to a specified distance tolerance. The obstacles may be any collection of points, lines and polygons. * @description Based on `geos.GEOSLargestEmptyCircle()`. * @param {object} data - A GeoJSON FeatureCollection. * @param {object} options - Optional parameters. * @param {GeoJSON} [options.boundary = null] - The area to contain the LEC center (may be null or empty) * @param {number} [options.tolerance = undefined] - Stop the algorithm when the search area is smaller than this toleranc * @param {boolean} [options.mutate = false] - Use `true` to update the input data. With false, you create a new object, but the input object remains the same. * @example * geotoolbox.largestemptycircle() */ // DO NOT WORK ! export async function largestemptycircle( obstacles, { boundary, tolerance, mutate = false } = {} ) { let x; if (!mutate) { console.log("!mutate"); x = JSON.parse(JSON.stringify(obstacles)); } else { x = obstacles; console.log("mutate"); } const geos = await initGeosJs(); const geosobstacles = geojsonToGeosGeom(obstacles, geos); const geoboundary = geojsonToGeosGeom(boundary, geos); const output = geos.GEOSLargestEmptyCircle( geosobstacles, geoboundary, tolerance ); let result = geosGeomToGeojson(output, geos); geos.GEOSFree(geosobstacles); geos.GEOSFree(geoboundary); geos.GEOSFree(output); x.features = [{ type: "Feature", properties: {}, geometry: result }]; return x; }