UNPKG

@seasketch/geoprocessing

Version:

Geoprocessing and reporting framework for SeaSketch 2.0

36 lines 1.7 kB
import { featuresSchema, } from "../../../src/types/index.js"; import { isExternalVectorDatasource, isInternalVectorDatasource, } from "../../../src/index.js"; import { featureCollection, truncate } from "@turf/turf"; import { readDatasourceFgbById } from "../datasources/index.js"; import { getDatasourceFeatures } from "../../../src/dataproviders/index.js"; /** * Given geography and its datasource, returns geography features with additional filter options */ export async function getGeographyFeatures(geography, /** Geography datasource */ datasource, dstPath) { if (isInternalVectorDatasource(datasource)) { // Read local datasource let featureColl = truncate(readDatasourceFgbById(geography.datasourceId, dstPath), { mutate: true }); if (geography.propertyFilter) { featureColl = featureCollection(featureColl.features.filter((curFeat) => { if (!curFeat.properties) return false; return geography.propertyFilter?.values.includes(curFeat.properties[geography.propertyFilter.property]); })); } return featureColl; } else if (isExternalVectorDatasource(datasource)) { // Fetch external datasource const feats = await getDatasourceFeatures(datasource, datasource.url, { bbox: geography.bboxFilter, propertyFilter: geography.propertyFilter, }); // Make sure only contains polygon or multipolygon in array const validFeats = featuresSchema.parse(feats); return truncate(featureCollection(validFeats), { mutate: true }); } return featureCollection([]); } //# sourceMappingURL=helpers.js.map