From 74a98135417d75dc260661b825c3700e48b624b4 Mon Sep 17 00:00:00 2001 From: Tim Welch Date: Fri, 6 Dec 2024 10:05:41 -0800 Subject: [PATCH] 7x docs and stability improvements (#365) * doc updates * more updates * add prepublish step, document use of workers, how to match tests, publishing workflow * break out accuracy limitations doc * deprecate fgbFetchAll for loadFgb, add toolbox doc, drop deprecated overlapRaster * Break out tutorials and more * update preprocessing and geoprocessing docs * genPreprocessor: add minSize and enforceMinSize options, more doc additions * update reportclient doc * add projectclient doc, fix links, other updates * add vite babel plugins for storybook, migrate away from toNullSketch in gp function to childProperties, add toSketchPropertiesArray helper * remove null sketch from template smoke test output * add toChildProperties helper, major cleanup 6.1 tutorial * update 7x tutorials, couple backports to 6.1, add devcontainer guide * drop global datasources from basic-project template. add codespaces advanced guide * update smoke test output * refactor genRandomFeature script to support sketches too, drop genRandomSketch * update genRandomFeature, add third part data doc, break out link data tutorial, start newproject revamp * further newproject, add precalc, third party and data guides * rework system setup sections, fix broken links * update windows section * front page and tutorial updates * windows clarity * newproject start refine * drop global datasources other than boundaries, including from simpleFunction * Deprecate polygonPreprocessorSmokeTest, create polygonSmokeTest function that allows examples to be loaded by caller, whether they want to pass in features or sketches * newproject updates * genRandomFeature: fix outdir to vary whether sketch or feature type output * drop bbox and planning init questions and basic properties remove template-ocean-eez from testing * drop template question from init, update tutorial method for getting bbox of datasource * rename genRandomFeature script to genRandomPolygon * remove old genRandom scripts on upgrade * strip down simpleFunction and blankFunction, add to newproject * tune simpleFunction and blankFunction, requireProperties not required as Handler option * Fix genRandomPolygon name bug, storybook no open browser, remove default metric group from base-project, add create report section to newproject tutorial, refine Precalc and Testing * migrate to loadFgb internally * drop deprecated loadCogWindow and bboxToPixelEdge * include dataproviders as top-level export * switch newProject to sampleProject, and add start of sampleProject, drop down base README, highlight concepts * update newproject, sampleproject, regen api docs with dataproviders changes * fix broken links, refine sampleproject layout * dataImport: conditional ask additional properties question * tune dataImport * tutorial bump gp version, sort init language alphabetical * unregister blankFunction in blank project default config, add SimpleReport section. * breaking: deprecate genClipLoader, remove genPreprocessor and clipToPolygonFeatures, replace with clipToPolygonFeatures, genClipToPolygonFeatures, clipToPolygonDatasources and genClipToPolygonDatasources * code comments * nit * update example data link * add validatePolygon preprocessor, with ensureValidPolygon helper, typedoc update * clean up polygonSmokeTest doc * sampleproject updates * move preprocessor test features to base, remove test output, so that we don't hit cloudfront VectorDataSource for every smoke test run, which can error and be brittle * add clipToOceanEez to basic project, add unit tests for preprocessors with mocks, add numberFormat helper, decrease default memory on preprocessors * preprocessing docs. other doc updates on rebuild * drop use of dataproviders module, switch remaining fgbFetchAll to loadFgb, clean up preprocessing doc * update newproject * switch back to separate dataproviders module to isolate node-fetch use, causing VectorDataSource metadata fetch issue. * rollback flatgeobuf to 3.33.0 for now * migrate last dataprovider use * upgrade flatgeobuf, remove unused webstreams polyfill, drop node-fetch polyfill * add vitest-fetch-mock dep to base project * add back dataproviders module to top-level export and migrate use * Fix SimpleCard error and exports, add roundDecimalFormat helper function, debug false default for smoke tests * Fix i18nAsync bug using base english strings instead of letting component render its own, drop report client export from SimpleCard, allow ts-ignore for mock issue * update base english terms * update sampleproject, rebuild api docs * simplify sketchOrCollection variable in SimpleCard and add translation to partials * update newproject * bump next version * newproject nit * simplify SimpleCard, cleanup BlankCard, update translation * bump gp * move upgrade doc to basic tutorials, add gp-workspace upgrade instructions to setup tutorial * remove .story-cache folders from dist build, update template-ocean-eez smoke test output * move upgrade doc to basic tutorials, add gp-workspace upgrade instructions to setup tutorial * remove .story-cache folders from dist build, update template-ocean-eez smoke test output * move blank functions over to templace-ocean-eez, out of temlate-blank-project * add back simplefunction smoke test output * update story-cache to copy from eez template * template functions cleanup * switch vectorFunction to use higher level getFeatures instead of loadFgb, in order to make use of datasource filters * genReportStories - replace spaces in sketch name with underscore * better link concepts * improve transform of sketch name to valid variable name * add sketch prefix to report story variable name * fix sketch variable name in genReportStories * Add Card to createReport component name plus other output polish, drop extra prepublish step, it's already run on publish * Add user attributes to generated sample sketches, nit createReport output * add user attributes to genRandomPolygons * update genRandomPolygon notes, add simple-card-view image * genRandomPolygon: start ids at 1 * Add simple report modifications * add getFgbPath method to projectClientBase, update createFunction output, add to sampleproject * Fix getFgbPath * Add getFeaturesForSketchBboxes helper, clarify MetricGroup type property, doc rebuild, version bump and enhancements * fix export * Make MetricGroup type property optional, rebuild docs * doc updates * update getFeaturesForBboxes with split feature, add splitBBoxAntimeridian and cleanBBox helpers, rename split.js to antimeridian.js. Needs more tests. Remove antimeridian tests from getFeatures * antimeridian code example * doc updates * writeResultOutput, switch to ensureDirSync, flatgeobuf test cleanup * createFunction - default to async, createClient - look in ocean eez template dir for assets * undeprecate clip function, createClient - fix story paths, sampleProject - finish coral reef report, lots of code comment updates * export intersectInChunks, intersectInChunksArea, intersectSum. Move them over to clip toolbox, build up docs * bump gp in docs * update toolbox * shape up toolbox doc, shift subdividing into data import doc * shuffle couple functions, toolbox doc * projectClient - add getClassDatasource helper function, drop requirement to define type in metricGroup schema, refine benthic report * getFeaturesForSketchBBoxes - create options argument * benthic report * createReport: switch vector function to use getFeaturesForSketchBBoxes and getClassDatasource, fix compName to have Card in all * projectClient: add getClassKey helper * bump doc gp version * bug - don't use datasource classKey in vectorFunction * vectorFunction fix bug in last update, rasterFunction migrate to getClassDatasource * MetricGroup schema - ensure at least one class item present * create:report clarify raster stat options, start octocoral report * metricGroupSchema: require datasourceId and classKey at metric group level or data class level, improve create:report raster metric descriptions. * rename getClassDatasouce to getMetricGroupDatasource, rename getClassKey to getMetricGroupClassKey, switch them to use options parameter, refactor underlying metricGroup helpers to return class level or top level objectives but not both * remove default objective * sampleproject update * improve precalc logging, use loadCog directly, * Consolidate report pages into TabReport, drop ViabilityPage * update sampleProject * doc rebuild * projectClientBase - fix getMetricGroupDatasource and getMetricGroupClass key error when classId not defined * merge advanced concepts into concepts page, update CLI doc, update architecture, other comment nits * update sampleProject, simplify getting started docs * update sampleproject, add preprocessing images, bump to 7x-docs.128 * broken link fixes * polish sample tutorial * sampleproject polish * refactor newproject, remove reportclient doc * rebuild docs --- .vscode/launch.json | 16 +- README.md | 8 +- eslint.config.mjs | 1 + package-lock.json | 38 +- package.json | 9 +- packages/base-project/.prettierignore | 2 +- .../.storybook/genReportStories.ts | 9 +- packages/base-project/.vscode/schemas.json | 86 +- packages/base-project/README.md | 4 +- packages/base-project/package.json | 3 +- .../base-project/project/datasources.json | 85 +- packages/base-project/project/metrics.json | 16 +- packages/base-project/project/objectives.json | 11 +- .../base-project/scripts/genRandomFeature.ts | 60 - .../base-project/scripts/genRandomPolygon.ts | 176 + .../base-project/scripts/genRandomSketch.ts | 60 - .../base-project/src/util/clipToGeography.ts | 9 +- packages/geoprocessing/package.json | 3 +- .../scripts/base/datasources/datasources.ts | 4 +- .../datasources/importRasterDatasource.ts | 2 + .../datasources/importVectorDatasource.ts | 2 + .../datasources/precalcRasterDatasource.ts | 4 +- .../datasources/precalcVectorDatasource.ts | 3 +- .../scripts/dataPrep/explodeQuestion.ts | 6 +- .../scripts/dataPrep/importData.ts | 102 +- .../datasources/mr-eez-land-union-precalc.ts | 3 +- .../scripts/init/createClient.ts | 6 +- .../scripts/init/createFunction.ts | 36 +- .../scripts/init/createProject.test.ts | 95 +- .../scripts/init/createProject.ts | 150 +- .../scripts/init/createReport.ts | 95 +- packages/geoprocessing/scripts/init/init.ts | 119 +- packages/geoprocessing/scripts/npm/prepare.ts | 30 +- .../geoprocessing/scripts/testing/index.ts | 1 + .../scripts/testing/polygonSmokeTest.ts | 70 + .../scripts/testing/writeResultOutput.ts | 8 +- .../geoprocessing/scripts/upgrade/upgrade.ts | 5 +- .../geoprocessing/src/aws/serviceHandlers.ts | 3 +- .../src/dataproviders/cog.test.e2e.ts | 75 +- .../geoprocessing/src/dataproviders/cog.ts | 137 - .../src/dataproviders/flatgeobuf.test.e2e.ts | 11 +- .../src/dataproviders/flatgeobuf.ts | 32 +- .../src/dataproviders/genClipLoader.ts | 1 + .../src/dataproviders/getFeatures.test.ts | 64 - .../src/dataproviders/getFeatures.ts | 6 +- .../getFeaturesForSketchBBoxes.ts | 73 + .../geoprocessing/src/dataproviders/index.ts | 2 +- .../src/datasources/VectorDataSource.ts | 5 +- .../geoprocessing/src/datasources/global.ts | 18 +- packages/geoprocessing/src/helpers/index.ts | 1 - .../geoprocessing/src/helpers/metricGroup.ts | 60 +- packages/geoprocessing/src/helpers/number.ts | 49 +- packages/geoprocessing/src/helpers/sketch.ts | 40 +- packages/geoprocessing/src/helpers/units.ts | 10 + packages/geoprocessing/src/i18n/i18nAsync.ts | 23 +- .../src/i18n/lang/en/translation.json | 8 +- packages/geoprocessing/src/index.ts | 1 + .../geoprocessing/src/metrics/helpers.test.ts | 12 +- packages/geoprocessing/src/metrics/helpers.ts | 22 +- .../src/project/ProjectClientBase.ts | 80 +- .../src/testing/fixtures/squareSketches.ts | 10 + .../{split.test.ts => antimeridian.test.ts} | 48 +- .../src/toolbox/{split.ts => antimeridian.ts} | 50 +- packages/geoprocessing/src/toolbox/area.ts | 3 +- .../src/{helpers => toolbox}/clip.ts | 56 +- .../src/toolbox/genPreprocessor.test.ts | 60 +- .../src/toolbox/genPreprocessor.ts | 248 +- .../src/toolbox/geoblaze/geoblaze.test.e2e.ts | 2 +- .../src/toolbox/geoblaze/geoblaze.ts | 4 +- .../src/toolbox/geoblaze/rasterStats.ts | 4 +- .../toolbox/geoblaze/rasterStatsToMetrics.ts | 2 +- packages/geoprocessing/src/toolbox/index.ts | 4 +- .../geoprocessing/src/toolbox/overlapArea.ts | 6 +- .../src/toolbox/overlapFeatures.ts | 69 +- .../src/toolbox/overlapGroupMetrics.ts | 4 +- .../src/toolbox/overlapRaster.test.ts | 244 -- .../src/toolbox/overlapRaster.ts | 86 - .../src/toolbox/overlapRasterClass.ts | 1 + .../src/toolbox/rasterMetrics.ts | 9 +- .../geoprocessing/src/types/dataProcessor.ts | 10 +- .../geoprocessing/src/types/datasource.ts | 2 +- .../geoprocessing/src/types/metricGroup.ts | 8 +- packages/geoprocessing/src/types/metrics.ts | 4 +- packages/geoprocessing/src/types/objective.ts | 2 +- packages/geoprocessing/src/types/reports.ts | 2 +- packages/geoprocessing/src/types/service.ts | 6 +- packages/geoprocessing/src/types/sketch.ts | 7 + .../src/util/genRandomPolygons.ts | 6 +- packages/geoprocessing/vite.config.ts | 9 +- .../gp-clip-ocean-both-sides-barbados.json | 0 .../gp-clip-ocean-cuba-channel-span.json | 0 .../gp-clip-ocean-inner-channel-islands.json | 0 .../gp-clip-ocean-no-land-eez.json | 0 .../gp-clip-ocean-north-zone-extend.json | 0 .../gp-clip-ocean-north-zone.json | 0 .../gp-clip-ocean-surround-island.json | 0 .../fsm-east-west-coll/blankFunction.json | 55 - .../fsm-east-west-coll/simpleFunction.json | 8 +- .../output/fsm-east-west/blankFunction.json | 19 - .../output/fsm-east-west/simpleFunction.json | 8 +- .../clipToLand.json | 33 - .../clipToOcean.json | 815 ----- .../clipToLand.json | 33 - .../clipToOcean.json | 1125 ------- .../clipToLand.json | 49 - .../clipToOcean.json | 1743 ---------- .../clipToLand.json | 33 - .../clipToOcean.json | 33 - .../clipToLand.json | 33 - .../clipToOcean.json | 1643 ---------- .../clipToLand.json | 33 - .../clipToOcean.json | 1711 ---------- .../clipToLand.json | 41 - .../clipToOcean.json | 255 -- .../project/datasources.json | 101 - .../project/geoprocessing.json | 9 +- .../src/clients/SimpleReport.tsx | 2 + .../src/clients/TabReport.tsx | 20 +- .../src/components/SimpleCard.tsx | 58 +- .../src/components/ViabilityPage.tsx | 12 - .../src/functions/clipToLand.test.ts | 87 + .../src/functions/clipToLand.ts | 59 +- .../src/functions/clipToLandSmoke.test.ts | 17 +- .../src/functions/clipToOcean.test.ts | 91 + .../src/functions/clipToOcean.ts | 65 +- .../src/functions/clipToOceanEez.test.ts | 119 + .../src/functions/clipToOceanEez.ts | 63 + .../src/functions/clipToOceanEezSmoke.test.ts | 11 + .../src/functions/clipToOceanSmoke.test.ts | 17 +- .../src/functions/simpleFunction.ts | 83 +- .../src/functions/simpleFunctionSmoke.test.ts | 3 - .../src/functions/validatePolygon.test.ts | 94 + .../src/functions/validatePolygon.ts | 37 + .../functions/validatePolygonSmoke.test.ts | 11 + .../output/fsm-east-west/clipToLand.json | 2881 ++++++++++++++++- .../output/fsm-east-west/clipToOceanEez.json | 8 + .../output/fsm-land-to-int/clipToLand.json | 2093 +++++++++++- .../fsm-land-to-int/clipToOceanEez.json | 404 ++- .../samoa-east-west-coll/blankFunction.json | 3 + .../boundaryAreaOverlap.json | 70 +- .../blankFunction.json | 3 + .../boundaryAreaOverlap.json | 29 +- .../components/BlankCard.example-stories.ts | 0 .../src/components/BlankCard.tsx | 18 +- .../src/components/OverlapCard.tsx | 26 +- .../src/components/RepresentationPage.tsx | 4 +- .../src/components/SizeCard.tsx | 41 +- .../src/components/ViabilityPage.tsx | 4 +- .../src/functions/blankFunction.ts | 37 +- .../src/functions/blankFunctionSmoke.test.ts | 0 .../src/functions/boundaryAreaOverlap.ts | 4 +- .../boundaryAreaOverlapSmoke.test.ts | 3 - .../src/functions/clipToLand.test.ts | 86 + .../src/functions/clipToLand.ts | 54 +- .../src/functions/clipToLandSmoke.test.ts | 17 +- .../src/functions/clipToOcean.test.ts | 90 + .../src/functions/clipToOcean.ts | 61 +- .../src/functions/clipToOceanEez.test.ts | 118 + .../src/functions/clipToOceanEez.ts | 76 +- .../src/functions/clipToOceanEezSmoke.test.ts | 17 +- .../src/functions/clipToOceanSmoke.test.ts | 17 +- .../src/functions/rasterFunction.ts | 36 +- .../src/functions/vectorFunction.ts | 76 +- website/docs/CLI.md | 23 +- website/docs/Contributing.md | 96 +- website/docs/EdgesAndLimits.md | 33 +- website/docs/Testing.md | 51 + website/docs/_components/NodeVersion.tsx | 9 + website/docs/antimeridian/Antimeridian.md | 103 +- .../assets/Earth_map_with_180th_meridian.jpg | Bin 0 -> 104240 bytes ...ap_with_180th_meridian.jpg:Zone.Identifier | 4 + website/docs/api/client-core/index.md | 24 + .../client-ui/interfaces/ClassTableProps.md | 6 +- .../interfaces/SketchClassTableProps.md | 6 +- .../dataproviders/functions/fgBoundingBox.md | 39 - .../dataproviders/functions/fgbFetchAll.md | 26 - .../dataproviders/functions/loadCogWindow.md | 22 - website/docs/api/dataproviders/index.md | 59 +- .../classes/ProjectClientBase.md | 121 +- .../api/geoprocessing/functions/cleanBBox.md | 19 + .../docs/api/geoprocessing/functions/clip.md | 10 +- .../geoprocessing/functions/clipMultiMerge.md | 20 +- .../functions/clipToPolygonDatasources.md | 36 + .../functions/clipToPolygonFeatures.md | 13 +- .../functions/ensureValidPolygon.md | 29 + .../geoprocessing/functions/fgBoundingBox.md | 15 + .../geoprocessing/functions/fgbFetchAll.md | 29 + .../functions/flattenBySketchAllClass.md | 4 +- .../functions/genClipLoader.md | 10 +- .../functions/genClipToPolygonDatasources.md | 44 + .../functions/genClipToPolygonFeatures.md | 34 + .../functions/genPreprocessor.md | 32 - .../api/geoprocessing/functions/getArea.md | 2 +- .../functions/getFeatures.md | 4 +- .../functions/getFeaturesForSketchBBoxes.md | 38 + .../getInternalVectorDatasourceById.md | 2 +- .../functions/getMetricGroupObjectiveId.md | 20 +- .../functions/getMetricGroupObjectiveIds.md | 13 +- .../functions/getObjectiveById.md | 2 +- .../api/geoprocessing/functions/getSum.md | 2 +- .../functions/getVectorDatasourceById.md | 2 +- .../functions/intersectInChunks.md | 25 + .../functions/intersectInChunksArea.md | 37 + .../geoprocessing/functions/intersectSum.md | 38 + .../functions/loadCog.md | 0 .../api/geoprocessing/functions/loadFgb.md | 25 + .../geoprocessing/functions/numberFormat.md | 17 + .../geoprocessing/functions/overlapArea.md | 6 +- .../functions/overlapFeatures.md | 8 +- .../functions/overlapGroupMetrics.md | 2 +- .../geoprocessing/functions/overlapRaster.md | 29 - .../functions/overlapRasterClass.md | 6 +- .../geoprocessing/functions/overlapSubarea.md | 2 +- .../geoprocessing/functions/rasterMetrics.md | 7 +- .../geoprocessing/functions/rasterStats.md | 2 +- .../functions/rasterStatsToMetrics.md | 2 +- .../geoprocessing/functions/roundDecimal.md | 6 +- .../functions/roundDecimalFormat.md | 24 + .../api/geoprocessing/functions/roundLower.md | 2 +- .../functions/splitBBoxAntimeridian.md | 20 + .../functions/splitFeatureAntimeridian.md | 8 +- .../functions/splitSketchAntimeridian.md | 6 +- .../functions/squareMeterToKilometer.md | 10 +- .../functions/squareMeterToMile.md | 10 +- .../functions/toChildProperties.md | 17 + .../functions/toPercentMetric.md | 9 +- .../geoprocessing/functions/toSketchArray.md | 11 +- .../functions/toSketchPropertiesArray.md | 17 + website/docs/api/geoprocessing/index.md | 67 +- .../geoprocessing/interfaces/ClipOptions.md | 22 +- .../interfaces/FeatureClipOperation.md | 2 +- .../geoprocessing/interfaces/FgBoundingBox.md | 33 + .../interfaces/GeoprocessingHandlerOptions.md | 4 +- .../GeoprocessingServiceMetadata.md | 4 +- .../interfaces/OverlapRasterOptions.md | 236 ++ .../interfaces/PreprocessingHandlerOptions.md | 6 +- .../PreprocessingServiceMetadata.md | 6 +- .../interfaces/ProjectClientInterface.md | 2 +- .../interfaces/RasterStatsOptions.md | 6 +- .../geoprocessing/interfaces/ReportResult.md | 4 +- .../api/geoprocessing/type-aliases/Metric.md | 4 +- .../type-aliases/SketchProperties.md | 14 + .../variables/globalDatasources.md | 2 +- .../variables/globalDatasourcesById.md | 5 + .../variables/metricGroupSchema.md | 4 +- .../variables/objectiveSchema.md | 2 +- .../api/geoprocessing/variables/version.md | 8 +- website/docs/api/typedoc-sidebar.cjs | 172 +- website/docs/architecture/Architecture.md | 31 +- .../assets/AddCodespace.jpg | Bin .../assets/AddSecrets.jpg | Bin .../assets/ConfigCodespace.jpg | Bin .../assets/CreateFromTemplate.jpg | Bin .../assets/WorkspacePermissions.jpg | Bin website/docs/codespaces/codespaces.md | 52 + website/docs/concepts/Concepts.md | 322 +- .../docs/concepts/assets/SystemModelBasic.jpg | Bin 18291 -> 18320 bytes website/docs/dataimport.md | 63 + website/docs/dataproviders.md | 23 + website/docs/devcontainer/devcontainer.md | 53 + website/docs/geoprocessing.md | 144 + website/docs/gip/GIP-1-i18n.md | 53 +- website/docs/introduction.md | 58 +- website/docs/linkData.md | 98 + .../docs/multiBoundary/geography-switcher.jpg | Bin 0 -> 112722 bytes website/docs/multiBoundary/multiBoundary.md | 33 + .../multiBoundary/multiBoundaryDefault.jpg | Bin 0 -> 49794 bytes website/docs/precalc.md | 23 + website/docs/preprocessing.md | 187 ++ website/docs/projectclient.md | 108 + website/docs/structure.md | 59 + .../thirdpartydata/assets/AllenDownload.jpg | Bin 0 -> 351162 bytes website/docs/thirdpartydata/thirdpartydata.md | 33 + website/docs/toolbox/assets/difference.jpg | Bin 0 -> 106034 bytes website/docs/toolbox/assets/intersection.jpg | Bin 0 -> 97009 bytes website/docs/toolbox/assets/union.jpg | Bin 0 -> 83349 bytes website/docs/toolbox/toolbox.md | 123 + website/docs/tutorials/Tutorials.md | 1887 +---------- .../assets/3-coral-species-add-page.jpg | Bin 0 -> 168417 bytes .../docs/tutorials/assets/3-corals-map.jpg | Bin 0 -> 49531 bytes .../tutorials/assets/benthic-habitat-map.jpg | Bin 0 -> 34160 bytes .../assets/benthic-habitats-add-page.jpg | Bin 0 -> 201909 bytes .../assets/coral-reef-card-add-to-page.jpg | Bin 0 -> 125196 bytes .../assets/coral-reef-card-collection.jpg | Bin 0 -> 100552 bytes .../assets/coral-reef-card-sketch.jpg | Bin 0 -> 22873 bytes .../tutorials/assets/devcontainer-blue.jpg | Bin 0 -> 15980 bytes website/docs/tutorials/assets/eez-bbox.jpg | Bin 0 -> 210290 bytes .../docs/tutorials/assets/eez-with-land.jpg | Bin 0 -> 104318 bytes .../tutorials/assets/preprocessing-after.jpg | Bin 0 -> 27854 bytes .../tutorials/assets/preprocessing-before.jpg | Bin 0 -> 30169 bytes website/docs/tutorials/assets/reef-extent.jpg | Bin 0 -> 77328 bytes .../tutorials/assets/seamount-add-page.jpg | Bin 0 -> 147813 bytes .../docs/tutorials/assets/seamount-map.jpg | Bin 0 -> 41641 bytes .../tutorials/assets/simple-card-table.jpg | Bin 0 -> 76766 bytes .../tutorials/assets/simple-card-view.jpg | Bin 0 -> 65529 bytes .../docs/tutorials/assets/storybook-one.jpg | Bin 0 -> 25063 bytes .../docs/tutorials/assets/storybook-two.jpg | Bin 0 -> 28045 bytes .../tutorials/assets/terminal-duplicate.jpg | Bin 0 -> 96001 bytes .../tutorials/assets/terminal-profile.jpg | Bin 0 -> 72707 bytes .../clouddrive.md} | 44 +- website/docs/tutorials/deploy.md | 114 + website/docs/tutorials/existingproject.md | 74 + website/docs/tutorials/extraParams.md | 148 + website/docs/tutorials/newproject.md | 190 ++ website/docs/tutorials/sampleproject.md | 2565 +++++++++++++++ website/docs/tutorials/sketchAttributes.md | 34 + website/docs/tutorials/storybook.md | 11 + website/docs/tutorials/updateDatasource.md | 12 + website/docs/{Migrating.md => upgrade.md} | 42 +- website/docs/workers.md | 177 + website/docusaurus.config.ts | 4 + website/package.json | 2 +- website/sidebars.ts | 148 +- .../src/components/HomepageFeatures/index.tsx | 10 +- website/src/pages/index.tsx | 4 +- .../version-6.1.0/tutorials/Tutorials.md | 747 ++--- .../tutorials/assets/devcontainer-blue.jpg | Bin 0 -> 15980 bytes .../version-6.1.0-sidebars.json | 14 +- 318 files changed, 14664 insertions(+), 12918 deletions(-) delete mode 100755 packages/base-project/scripts/genRandomFeature.ts create mode 100644 packages/base-project/scripts/genRandomPolygon.ts delete mode 100644 packages/base-project/scripts/genRandomSketch.ts create mode 100644 packages/geoprocessing/scripts/testing/polygonSmokeTest.ts create mode 100644 packages/geoprocessing/src/dataproviders/getFeaturesForSketchBBoxes.ts rename packages/geoprocessing/src/toolbox/{split.test.ts => antimeridian.test.ts} (75%) rename packages/geoprocessing/src/toolbox/{split.ts => antimeridian.ts} (54%) rename packages/geoprocessing/src/{helpers => toolbox}/clip.ts (60%) delete mode 100644 packages/geoprocessing/src/toolbox/overlapRaster.test.ts delete mode 100644 packages/geoprocessing/src/toolbox/overlapRaster.ts rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-both-sides-barbados.json (100%) rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-cuba-channel-span.json (100%) rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-inner-channel-islands.json (100%) rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-no-land-eez.json (100%) rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-north-zone-extend.json (100%) rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-north-zone.json (100%) rename packages/template-blank-project/examples/{features => base}/gp-clip-ocean-surround-island.json (100%) delete mode 100644 packages/template-blank-project/examples/output/fsm-east-west-coll/blankFunction.json delete mode 100644 packages/template-blank-project/examples/output/fsm-east-west/blankFunction.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToOcean.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToOcean.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToOcean.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToOcean.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToOcean.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToOcean.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToLand.json delete mode 100644 packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToOcean.json delete mode 100644 packages/template-blank-project/src/components/ViabilityPage.tsx create mode 100644 packages/template-blank-project/src/functions/clipToLand.test.ts create mode 100644 packages/template-blank-project/src/functions/clipToOcean.test.ts create mode 100644 packages/template-blank-project/src/functions/clipToOceanEez.test.ts create mode 100644 packages/template-blank-project/src/functions/clipToOceanEez.ts create mode 100644 packages/template-blank-project/src/functions/clipToOceanEezSmoke.test.ts create mode 100644 packages/template-blank-project/src/functions/validatePolygon.test.ts create mode 100644 packages/template-blank-project/src/functions/validatePolygon.ts create mode 100644 packages/template-blank-project/src/functions/validatePolygonSmoke.test.ts create mode 100644 packages/template-ocean-eez/examples/output/samoa-east-west-coll/blankFunction.json create mode 100644 packages/template-ocean-eez/examples/output/samoa-north-south-sketch/blankFunction.json rename packages/{template-blank-project => template-ocean-eez}/src/components/BlankCard.example-stories.ts (100%) rename packages/{template-blank-project => template-ocean-eez}/src/components/BlankCard.tsx (61%) rename packages/{template-blank-project => template-ocean-eez}/src/functions/blankFunction.ts (53%) rename packages/{template-blank-project => template-ocean-eez}/src/functions/blankFunctionSmoke.test.ts (100%) create mode 100644 packages/template-ocean-eez/src/functions/clipToLand.test.ts create mode 100644 packages/template-ocean-eez/src/functions/clipToOcean.test.ts create mode 100644 packages/template-ocean-eez/src/functions/clipToOceanEez.test.ts create mode 100644 website/docs/_components/NodeVersion.tsx create mode 100644 website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg create mode 100644 website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg:Zone.Identifier delete mode 100644 website/docs/api/dataproviders/functions/fgBoundingBox.md delete mode 100644 website/docs/api/dataproviders/functions/fgbFetchAll.md delete mode 100644 website/docs/api/dataproviders/functions/loadCogWindow.md create mode 100644 website/docs/api/geoprocessing/functions/cleanBBox.md create mode 100644 website/docs/api/geoprocessing/functions/clipToPolygonDatasources.md create mode 100644 website/docs/api/geoprocessing/functions/ensureValidPolygon.md create mode 100644 website/docs/api/geoprocessing/functions/fgBoundingBox.md create mode 100644 website/docs/api/geoprocessing/functions/fgbFetchAll.md rename website/docs/api/{dataproviders => geoprocessing}/functions/genClipLoader.md (54%) create mode 100644 website/docs/api/geoprocessing/functions/genClipToPolygonDatasources.md create mode 100644 website/docs/api/geoprocessing/functions/genClipToPolygonFeatures.md delete mode 100644 website/docs/api/geoprocessing/functions/genPreprocessor.md rename website/docs/api/{dataproviders => geoprocessing}/functions/getFeatures.md (60%) create mode 100644 website/docs/api/geoprocessing/functions/getFeaturesForSketchBBoxes.md create mode 100644 website/docs/api/geoprocessing/functions/intersectInChunks.md create mode 100644 website/docs/api/geoprocessing/functions/intersectInChunksArea.md create mode 100644 website/docs/api/geoprocessing/functions/intersectSum.md rename website/docs/api/{dataproviders => geoprocessing}/functions/loadCog.md (100%) create mode 100644 website/docs/api/geoprocessing/functions/loadFgb.md create mode 100644 website/docs/api/geoprocessing/functions/numberFormat.md delete mode 100644 website/docs/api/geoprocessing/functions/overlapRaster.md create mode 100644 website/docs/api/geoprocessing/functions/roundDecimalFormat.md create mode 100644 website/docs/api/geoprocessing/functions/splitBBoxAntimeridian.md create mode 100644 website/docs/api/geoprocessing/functions/toChildProperties.md create mode 100644 website/docs/api/geoprocessing/functions/toSketchPropertiesArray.md create mode 100644 website/docs/api/geoprocessing/interfaces/FgBoundingBox.md create mode 100644 website/docs/api/geoprocessing/interfaces/OverlapRasterOptions.md create mode 100644 website/docs/api/geoprocessing/variables/globalDatasourcesById.md rename website/docs/{tutorials => codespaces}/assets/AddCodespace.jpg (100%) rename website/docs/{tutorials => codespaces}/assets/AddSecrets.jpg (100%) rename website/docs/{tutorials => codespaces}/assets/ConfigCodespace.jpg (100%) rename website/docs/{tutorials => codespaces}/assets/CreateFromTemplate.jpg (100%) rename website/docs/{tutorials => codespaces}/assets/WorkspacePermissions.jpg (100%) create mode 100644 website/docs/codespaces/codespaces.md create mode 100644 website/docs/dataimport.md create mode 100644 website/docs/dataproviders.md create mode 100644 website/docs/devcontainer/devcontainer.md create mode 100644 website/docs/geoprocessing.md create mode 100644 website/docs/linkData.md create mode 100644 website/docs/multiBoundary/geography-switcher.jpg create mode 100644 website/docs/multiBoundary/multiBoundary.md create mode 100644 website/docs/multiBoundary/multiBoundaryDefault.jpg create mode 100644 website/docs/precalc.md create mode 100644 website/docs/preprocessing.md create mode 100644 website/docs/projectclient.md create mode 100644 website/docs/structure.md create mode 100644 website/docs/thirdpartydata/assets/AllenDownload.jpg create mode 100644 website/docs/thirdpartydata/thirdpartydata.md create mode 100644 website/docs/toolbox/assets/difference.jpg create mode 100644 website/docs/toolbox/assets/intersection.jpg create mode 100644 website/docs/toolbox/assets/union.jpg create mode 100644 website/docs/toolbox/toolbox.md create mode 100644 website/docs/tutorials/assets/3-coral-species-add-page.jpg create mode 100644 website/docs/tutorials/assets/3-corals-map.jpg create mode 100644 website/docs/tutorials/assets/benthic-habitat-map.jpg create mode 100644 website/docs/tutorials/assets/benthic-habitats-add-page.jpg create mode 100644 website/docs/tutorials/assets/coral-reef-card-add-to-page.jpg create mode 100644 website/docs/tutorials/assets/coral-reef-card-collection.jpg create mode 100644 website/docs/tutorials/assets/coral-reef-card-sketch.jpg create mode 100644 website/docs/tutorials/assets/devcontainer-blue.jpg create mode 100644 website/docs/tutorials/assets/eez-bbox.jpg create mode 100644 website/docs/tutorials/assets/eez-with-land.jpg create mode 100644 website/docs/tutorials/assets/preprocessing-after.jpg create mode 100644 website/docs/tutorials/assets/preprocessing-before.jpg create mode 100644 website/docs/tutorials/assets/reef-extent.jpg create mode 100644 website/docs/tutorials/assets/seamount-add-page.jpg create mode 100644 website/docs/tutorials/assets/seamount-map.jpg create mode 100644 website/docs/tutorials/assets/simple-card-table.jpg create mode 100644 website/docs/tutorials/assets/simple-card-view.jpg create mode 100644 website/docs/tutorials/assets/storybook-one.jpg create mode 100644 website/docs/tutorials/assets/storybook-two.jpg create mode 100644 website/docs/tutorials/assets/terminal-duplicate.jpg create mode 100644 website/docs/tutorials/assets/terminal-profile.jpg rename website/docs/{Tipsandtricks.md => tutorials/clouddrive.md} (51%) create mode 100644 website/docs/tutorials/deploy.md create mode 100644 website/docs/tutorials/existingproject.md create mode 100644 website/docs/tutorials/extraParams.md create mode 100644 website/docs/tutorials/newproject.md create mode 100644 website/docs/tutorials/sampleproject.md create mode 100644 website/docs/tutorials/sketchAttributes.md create mode 100644 website/docs/tutorials/storybook.md create mode 100644 website/docs/tutorials/updateDatasource.md rename website/docs/{Migrating.md => upgrade.md} (91%) create mode 100644 website/docs/workers.md create mode 100644 website/versioned_docs/version-6.1.0/tutorials/assets/devcontainer-blue.jpg diff --git a/.vscode/launch.json b/.vscode/launch.json index 741ce38357..230dc85c46 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -90,7 +90,21 @@ "cwd": "${workspaceFolder}/packages/template-ocean-eez", "runtimeArgs": [ "--inspect-brk", - "${workspaceRoot}/packages/template-ocean-eez/node_modules/.bin/geoprocessing", + "${workspaceRoot}/node_modules/.bin/geoprocessing", + "test" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "port": 9229 + }, + { + "name": "template-blank-project - debug tests", + "type": "node", + "request": "launch", + "cwd": "${workspaceFolder}/packages/template-blank-project", + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/.bin/geoprocessing", "test" ], "console": "integratedTerminal", diff --git a/README.md b/README.md index 018a0a329c..619df041f9 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Geoprocessing -All-in-one solution for developing low-cost and low-maintenance geoprocessing functions and reports for the web, with Typescript. Simplified publish to cloud with auto-scaling to meet high demand. +All-in-one solution for developing low-cost and low-maintenance geoprocessing functions and reports for SeaSketch. Simplified publish to cloud with auto-scaling to meet high demand. This framework is part of the [SeaSketch](https://seasketch.org) ecosystem. -- [Documentation](https://github.com/seasketch/geoprocessing/wiki) -- [Changelog](https://github.com/seasketch/geoprocessing/blob/dev/CHANGELOG.md) +- [Documentation](https://seasketch.github.io/geoprocessing) +- [Releases](https://github.com/seasketch/geoprocessing/releases) ## Who is this framework for? -This framework is primarily designed for people that want to create and host their own geoprocessing functions and reports and plug them into their SeaSketch project, though it is not dependent on SeaSketch. It is used for all SeaSketch [projects](https://github.com/seasketch/geoprocessing/network/dependents?package_id=UGFja2FnZS0xMTc3OTQ1NDg5). +This framework is designed for people with coding experience that want to create and host their own geoprocessing functions and reports and plug them into their SeaSketch project. It is used for all SeaSketch [projects](https://github.com/seasketch/geoprocessing/network/dependents?package_id=UGFja2FnZS0xMTc3OTQ1NDg5). ## Goals diff --git a/eslint.config.mjs b/eslint.config.mjs index 8aaf0f4fb3..5f7d1e0c92 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -41,6 +41,7 @@ export default [ rules: { "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/ban-ts-comment": "off", "react/no-unescaped-entities": "off", trailingComma: "off", "unicorn/prevent-abbreviations": "off", diff --git a/package-lock.json b/package-lock.json index ec814707a8..4ee65be418 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,9 @@ "name": "root", "license": "BSD-3-Clause", "workspaces": [ - "packages/*" + "packages/geoprocessing", + "packages/base-project", + "packages/template-blank-project" ], "devDependencies": { "@babel/cli": "^7.25.6", @@ -5914,10 +5916,6 @@ "resolved": "packages/template-blank-project", "link": true }, - "node_modules/@seasketch/template-ocean-eez": { - "resolved": "packages/template-ocean-eez", - "link": true - }, "node_modules/@shikijs/core": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.15.2.tgz", @@ -16506,9 +16504,9 @@ } }, "node_modules/flatgeobuf": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/flatgeobuf/-/flatgeobuf-3.33.0.tgz", - "integrity": "sha512-d/Bca6T/jRI1qr3JXD4o16QeAVAQ3JTnbbeQqKbywU+hSjEghXjtqrhUgy4XrvFNVsOJE36zSquebiQ30PRB7g==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/flatgeobuf/-/flatgeobuf-3.36.0.tgz", + "integrity": "sha512-vSKhQpClrZdguVLmD6QhVw4aKnqvcpEpeR5yBMTJmnRpBPBD1GLEE1MtGpBlBwdBfh3AzSnlcB3TS2MHelRwlQ==", "dependencies": { "@repeaterjs/repeater": "3.0.6", "flatbuffers": "24.3.25", @@ -31485,14 +31483,6 @@ "defaults": "^1.0.3" } }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0.tgz", - "integrity": "sha512-0zJXHRAYEjM2tUfZ2DiSOHAa2aw1tisnnhU3ufD57R8iefL+DcdJyRBRyJpG+NUimDgbTI/lH+gAE1PAvV3Cgw==", - "engines": { - "node": ">= 8" - } - }, "node_modules/web-worker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", @@ -32563,9 +32553,21 @@ "storybook": "^8.2.9", "vite": "^5.4.2", "vitest": "^2.0.5", + "vitest-fetch-mock": "^0.4.2", "zx": "^8.1.5" } }, + "packages/base-project/node_modules/vitest-fetch-mock": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.4.2.tgz", + "integrity": "sha512-MuN/TCAvvUs9sLMdOPKqdXEUOD0E5cNW/LN7Tro3KkrLBsvUaH7iQWcznNUU4ml+GqX6ZbNguDmFQ2tliKqhCg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "vitest": ">=2.0.0" + } + }, "packages/example-project": { "version": "7.0.0-beta.8", "extraneous": true, @@ -32785,7 +32787,7 @@ "fast-deep-equal": "^3.1.3", "finalhandler": "^1.2.0", "flatbush": "^3.3.0", - "flatgeobuf": "3.33.0", + "flatgeobuf": "3.36.0", "fs-extra": "^11.2.0", "fuzzy-tools": "^1.2.0", "geoblaze": "2.8.0", @@ -32845,7 +32847,6 @@ "vite-plugin-node-polyfills": "^0.22.0", "vitest": "^2.0.5", "vitest-fetch-mock": "^0.3.0", - "web-streams-polyfill": "4.0.0", "ws": "^7.3.0", "zod": "^3.23.8", "zod-error": "^1.5.0", @@ -33214,6 +33215,7 @@ "packages/template-ocean-eez": { "name": "@seasketch/template-ocean-eez", "version": "7.0.0-beta.9", + "extraneous": true, "license": "BSD-3-Clause", "dependencies": { "@seasketch/geoprocessing": "^7.0.0-beta.9", diff --git a/package.json b/package.json index bf45fda0e8..1102cbaf69 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,9 @@ "name": "root", "private": true, "workspaces": [ - "packages/*" + "packages/geoprocessing", + "packages/base-project", + "packages/template-blank-project" ], "license": "BSD-3-Clause", "devDependencies": { @@ -51,9 +53,10 @@ "publish:experimental:canary": "BRANCH_NAME=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`; if [ $BRANCH_NAME != \"dev\" -a $BRANCH_NAME != \"main\" ] ; then CI=1 lerna publish --force-publish --canary --preid experimental-${BRANCH_NAME} --dist-tag=experimental-${BRANCH_NAME} ; fi", "publish:alpha": "CI=1 lerna publish --force-publish --preid alpha --dist-tag=alpha", "publish:beta": "CI=1 lerna publish --force-publish --preid beta --dist-tag=beta", - "publish:stable": "npm run test && CI=1 lerna publish", - "publish:backport": "npm run test && CI=1 lerna publish --preid backport --dist-tag=backport", + "publish:stable": "CI=1 lerna publish", + "publish:backport": "CI=1 lerna publish --preid backport --dist-tag=backport", "prepare": "husky", + "prepublish": "npm test && lerna run --scope=@seasketch/geoprocessing prepare", "publish:translation": "npx tsx packages/geoprocessing/src/i18n/bin/publishTerms.ts", "import:translation": "npx tsx packages/geoprocessing/src/i18n/bin/importTerms.ts", "sync:translation": "npm run extract:translationt && npm run publish:translation && npm run import:translation", diff --git a/packages/base-project/.prettierignore b/packages/base-project/.prettierignore index 382e47474e..5e20de2497 100644 --- a/packages/base-project/.prettierignore +++ b/packages/base-project/.prettierignore @@ -2,4 +2,4 @@ **/.svn **/.hg node_modules -examples/output \ No newline at end of file +examples \ No newline at end of file diff --git a/packages/base-project/.storybook/genReportStories.ts b/packages/base-project/.storybook/genReportStories.ts index 1b6a91ffbd..422db783a0 100644 --- a/packages/base-project/.storybook/genReportStories.ts +++ b/packages/base-project/.storybook/genReportStories.ts @@ -10,8 +10,6 @@ import { import { GpStoryConfig } from "./types.js"; import { v4 as uuid } from "uuid"; -// Not currently used, project space responsible for its own storybook+vite setup - if (!process.env.PROJECT_PATH) { throw new Error("PROJECT_PATH environment variable not set"); } @@ -162,6 +160,11 @@ for (const storyConfig of storyConfigs) { ...(childProperties ? { childProperties } : {}), }; + // Convert sketch name to valid variable name, which is displayed as the story name + const sketchVariableName = sketch.properties.name + .replace(/^[^a-zA-Z$_\p{L}]/u, "_") // Replace invalid starting characters + .replaceAll(/[^a-zA-Z0-9$_\p{L}]/gu, "_"); // Replace invalid subsequent characters + const story = ` import React from "react"; import { ${storyConfig.componentName} } from '${importFromCacheStr}'; @@ -180,7 +183,7 @@ for (const storyConfig of storyConfigs) { language: "en" }); - export const ${sketch.properties.name.replaceAll("-", "_")} = () => ( + export const ${sketchVariableName} = () => ( <${storyConfig.componentName} /> diff --git a/packages/base-project/.vscode/schemas.json b/packages/base-project/.vscode/schemas.json index f181b5a739..95c4999478 100644 --- a/packages/base-project/.vscode/schemas.json +++ b/packages/base-project/.vscode/schemas.json @@ -53,37 +53,67 @@ ], "additionalProperties": false }, - "metricsSchema": { + "metricGroupSchema": { "type": "array", "items": { - "type": "object", - "properties": { - "metricId": { "type": "string" }, - "type": { "type": "string" }, - "datasourceId": { "type": "string" }, - "classKey": { "type": "string" }, - "classes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "classId": { "type": "string" }, - "classKey": { "type": "string" }, - "datasourceId": { "type": "string" }, - "display": { "type": "string" }, - "numericClassId": { "type": "number" }, - "layerId": { "type": "string" }, - "objectiveId": { "type": "string" } + "oneOf": [ + { + "type": "object", + "properties": { + "metricId": { "type": "string" }, + "type": { "type": "string" }, + "datasourceId": { "type": "string" }, + "classKey": { "type": "string" }, + "classes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "classId": { "type": "string" }, + "display": { "type": "string" }, + "numericClassId": { "type": "number" }, + "layerId": { "type": "string" }, + "objectiveId": { "type": "string" } + }, + "required": ["classId", "display"], + "additionalProperties": false + } }, - "required": ["classId", "display"], - "additionalProperties": false - } + "layerId": { "type": "string" }, + "objectiveId": { "type": "string" } + }, + "required": ["metricId", "classes", "datasourceId"], + "additionalProperties": false }, - "layerId": { "type": "string" }, - "objectiveId": { "type": "string" } - }, - "required": ["metricId", "type", "classes"], - "additionalProperties": false + { + "type": "object", + "properties": { + "metricId": { "type": "string" }, + "type": { "type": "string" }, + "classes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "classId": { "type": "string" }, + "classKey": { "type": "string" }, + "datasourceId": { "type": "string" }, + "display": { "type": "string" }, + "numericClassId": { "type": "number" }, + "layerId": { "type": "string" }, + "objectiveId": { "type": "string" } + }, + "required": ["classId", "display", "datasourceId"], + "additionalProperties": false + } + }, + "layerId": { "type": "string" }, + "objectiveId": { "type": "string" } + }, + "required": ["metricId", "classes"], + "additionalProperties": false + } + ] } }, "objectivesSchema": { @@ -431,7 +461,7 @@ "oneOf": [ { "$ref": "#/definitions/basicSchema" }, { "$ref": "#/definitions/objectivesSchema" }, - { "$ref": "#/definitions/metricsSchema" }, + { "$ref": "#/definitions/metricGroupSchema" }, { "$ref": "#/definitions/geographiesSchema" }, { "$ref": "#/definitions/datasourcesSchema" } ] diff --git a/packages/base-project/README.md b/packages/base-project/README.md index f2cfc82c37..21deb51368 100644 --- a/packages/base-project/README.md +++ b/packages/base-project/README.md @@ -1,5 +1,3 @@ # Getting Started -This is a geoprocessing project. It was created using the `geoprocessing init` command, as part of the tutorial to [create a new project](https://github.com/seasketch/geoprocessing/wiki/Tutorials#create-a-new-geoprocessing-project). - -Once established, you can follow the tutorial to [setup an existing project on a new system](https://github.com/seasketch/geoprocessing/wiki/Tutorials#setup-an-exising-project-on-your-local-system) +This is a geoprocessing project created using the SeaSketch geoprocessing framework. diff --git a/packages/base-project/package.json b/packages/base-project/package.json index 5b7ec466de..f3ff14b38f 100644 --- a/packages/base-project/package.json +++ b/packages/base-project/package.json @@ -35,7 +35,7 @@ "reimport:data": "geoprocessing reimport:data", "start:data": "http-server data/dist -c-1", "start:client": "geoprocessing start:client", - "storybook": "PROJECT_PATH=$(pwd) npx tsx .storybook/genReportStories.ts && storybook dev -p 6006", + "storybook": "PROJECT_PATH=$(pwd) npx tsx .storybook/genReportStories.ts && storybook dev -p 6006 --no-open", "sync:translation": "npm run extract:translation && npm run publish:translation && npm run import:translation", "synth": "geoprocessing synth", "test": "start-server-and-test start:data 8080 'npm run __test'", @@ -72,6 +72,7 @@ "storybook": "^8.2.9", "vite": "^5.4.2", "vitest": "^2.0.5", + "vitest-fetch-mock": "^0.4.2", "zx": "^8.1.5" } } diff --git a/packages/base-project/project/datasources.json b/packages/base-project/project/datasources.json index 1f24950795..bfe50c7476 100644 --- a/packages/base-project/project/datasources.json +++ b/packages/base-project/project/datasources.json @@ -6,7 +6,7 @@ "classKeys": [], "idProperty": "gid", "nameProperty": "gid", - "url": "https://d3p1dsef9f0gjr.cloudfront.net/", + "url": "https://d3p1dsef9f0gjr.cloudfront.net", "precalc": false }, { @@ -54,88 +54,5 @@ "publishLink": "" }, "precalc": false - }, - { - "datasourceId": "bo-present-surface-ph", - "geo_type": "raster", - "formats": ["tif"], - "precalc": true, - "metadata": { - "name": "BioOracle Present Day Surface pH", - "description": "BioOracle Present Day Surface pH global raster", - "version": "2.2", - "publisher": "BioOracle", - "publishDate": "2021-09-24", - "publishLink": "https://www.bio-oracle.org/" - }, - "measurementType": "quantitative", - "band": 1, - "noDataValue": -3.3999999521443642e38, - "created": "2023-12-11T11:55:31.053Z", - "lastUpdated": "2023-12-11T12:52:22.966Z", - "src": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/bo-present-surface-ph.tif" - }, - { - "datasourceId": "bo-present-surface-temp-max", - "geo_type": "raster", - "formats": ["tif"], - "precalc": true, - "metadata": { - "name": "BioOracle Present Day Surface Temperature Maximum", - "description": "BioOracle Present Day Surface Temperature Maximum global raster", - "version": "2.2", - "publisher": "BioOracle", - "publishDate": "2021-09-24", - "publishLink": "https://www.bio-oracle.org/" - }, - "measurementType": "quantitative", - "band": 1, - "noDataValue": -1.7e308, - "created": "2023-12-11T11:56:47.117Z", - "lastUpdated": "2023-12-11T12:52:25.733Z", - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/bo-present-surface-temp-max.tif" - }, - { - "datasourceId": "bo-present-surface-temp-min", - "geo_type": "raster", - "formats": ["tif"], - "precalc": true, - "metadata": { - "name": "BioOracle Present Day Surface Temperature Minimum", - "description": "BioOracle Present Day Surface Temperature Minimum global raster", - "version": "2.2", - "publisher": "BioOracle", - "publishDate": "2021-09-24", - "publishLink": "https://www.bio-oracle.org/" - }, - "measurementType": "quantitative", - "band": 1, - "noDataValue": -1.7e308, - "created": "2023-12-11T11:58:59.485Z", - "lastUpdated": "2023-12-11T12:52:27.957Z", - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/bo-present-surface-temp-min.tif" - }, - { - "datasourceId": "meow-ecos", - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/meow-ecos.fgb", - "layerName": "meow_ecos", - "geo_type": "vector", - "formats": ["fgb"], - "classKeys": [], - "created": "2023-12-12T00:41:57.298Z", - "lastUpdated": "2023-12-12T00:41:57.298Z", - "propertiesToKeep": ["ECOREGION", "PROVINCE", "REALM", "Lat_Zone"], - "explodeMulti": false, - "precalc": true, - "idProperty": "ECOREGION", - "nameProperty": "ECOREGION", - "metadata": { - "name": "Marine Ecoregions of the World", - "description": "A biogeographic classification of the world's coastal and continental shelf waters following a nested hierarchy of realms, provinces and ecoregions", - "version": "20190911", - "publisher": "The Nature Conservancy", - "publishDate": "20190911", - "publishLink": "https://tnc.maps.arcgis.com/home/item.html?id=ed2be4cf8b7a451f84fd093c2e7660e3" - } } ] diff --git a/packages/base-project/project/metrics.json b/packages/base-project/project/metrics.json index 8e0d7df82a..fe51488c70 100644 --- a/packages/base-project/project/metrics.json +++ b/packages/base-project/project/metrics.json @@ -1,15 +1 @@ -[ - { - "metricId": "boundaryAreaOverlap", - "type": "areaOverlap", - "classes": [ - { - "classId": "eez", - "display": "EEZ", - "datasourceId": "global-eez-mr-v12", - "objectiveId": "eez", - "layerId": "" - } - ] - } -] +[] diff --git a/packages/base-project/project/objectives.json b/packages/base-project/project/objectives.json index 0ee1637142..fe51488c70 100644 --- a/packages/base-project/project/objectives.json +++ b/packages/base-project/project/objectives.json @@ -1,10 +1 @@ -[ - { - "objectiveId": "eez", - "shortDesc": "EEZ Objective", - "target": 0.2, - "countsToward": { - "Fully Protected Area": "yes" - } - } -] +[] diff --git a/packages/base-project/scripts/genRandomFeature.ts b/packages/base-project/scripts/genRandomFeature.ts deleted file mode 100755 index db661878ab..0000000000 --- a/packages/base-project/scripts/genRandomFeature.ts +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env ts-node -import fs from "fs-extra"; -import project from "../project/projectClient.js"; -import { - FeatureCollection, - genFeature, - genFeatureCollection, - genRandomPolygons, - Polygon, -} from "@seasketch/geoprocessing"; - -/** - * genRandomFeature script - generates random feature within the bounding box of the project. Not guaranteed to be within the EEZ boundary - * @param outdir - the output director to write features to. Defaults to examples/features/ - * @param name - the name of the feature and the filename to use with a .json extension added. - * @param numfeatures - number of features to generate. Defaults to 1. If greater than 1, will return as a feature collection - */ - -const usage = "Usage: genRandomFeature [numfeatures] [name] [outdir]"; -console.log(process.argv); -const numPolygons = Number.parseInt(process.argv[2]) || 1; -if (!numPolygons || numPolygons <= 0) throw new Error(usage); - -const name = (() => { - const argName = process.argv[3]; - if (argName) { - return `${process.argv[3]}`; - } else if (numPolygons > 1) { - return "randomFeatureCollection"; - } else { - return "randomFeature"; - } -})(); - -const outdir = - process.argv[4] || `${import.meta.dirname}/../examples/features/`; - -const outfile = `${outdir}${name}.json`; - -const bounds = project.basic.bbox; -if (!bounds) throw new Error("Missing bounds in basic.json"); - -const features = (() => { - const fc = genRandomPolygons({ - numPolygons, - bounds, - }) as FeatureCollection; - if (numPolygons === 1) { - return genFeature({ feature: fc.features[0], name }); - } else { - const feats = genFeatureCollection(fc.features, { name }); - return feats; - } -})(); - -await fs.remove(outfile); -fs.writeJSON(outfile, features, { spaces: 2 }, (err) => { - if (err) throw err; - console.log(`features written to ${outfile}`); -}); diff --git a/packages/base-project/scripts/genRandomPolygon.ts b/packages/base-project/scripts/genRandomPolygon.ts new file mode 100644 index 0000000000..0222ed5b6d --- /dev/null +++ b/packages/base-project/scripts/genRandomPolygon.ts @@ -0,0 +1,176 @@ +import fs from "fs-extra"; +import { + featureToSketchCollection, + genFeature, + genFeatureCollection, + genRandomPolygons, + FeatureCollection, + Polygon, +} from "@seasketch/geoprocessing"; +import { program } from "commander"; +import project from "../project/projectClient.js"; + +/** + * genRandomPolygon script - generates random feature polygon or sketch polygon within given bounding box. + * npx tsx genRandomPolygon.ts --help for more info + */ + +program + .option("-o, --outDir ", "output directory") + .option( + "-b, --bbox ", + "bounding box to constrain features [minX, minY, maxX, maxY]", + JSON.stringify(project.basic.bbox) || "[-180, -90, 180, 90]", + ) + .option( + "-n, --numFeatures ", + "number of Features to generate, if > 1 generates FeatureCollection", + "1", + ) + .option( + "-f, --filename ", + "name of the file, defaults to randomSketch.json or randomSketchCollection.json", + ) + .option( + "-s, --sketch", + "generates Sketch polygon. Defaults to Feature polygon", + ) + .option( + "-h, --bboxShrinkFactor ", + "factor to shrink bounding box by to ensure sketch is inside. 10 = 1/10th the size", + "1", + ) + .option( + "-r, --maxRadialLength ", + " maximum number of decimal degrees latitude or longitude that a vertex can reach out of the center of the Polygon Feature", + "0.25", + ); +program.parse(); +const options = program.opts(); + +// console.log("inOptions", options); + +let bbox = JSON.parse(options.bbox); +const numFeatures = Number.parseInt(options.numFeatures) || 1; +const filename = options.filename; +const type = options.sketch === true ? "Sketch" : "Feature"; +const bboxShrinkFactor = Number.parseInt(options.bboxShrinkFactor); +const outdir = + type === "Sketch" + ? `${import.meta.dirname}/../examples/sketches/` + : `${import.meta.dirname}/../examples/features/`; + +const [minX, minY, maxX, maxY] = bbox; +if ( + minX >= maxX || + minY >= maxY || + minX < -180 || + maxX > 180 || + minY < -90 || + maxY > 90 +) { + throw new Error("Invalid bounding box"); +} + +const width = Math.abs(maxX - minX); +const height = Math.abs(maxY - minY); +const center = [minX + width / 2, minY + height / 2]; +// console.log("width", width); +// console.log("height", height); +// console.log("center", center); +const insideMinX = center[0] - width / (2 * bboxShrinkFactor); +const insideMinY = center[1] - height / (2 * bboxShrinkFactor); +const insideMaxX = center[0] + width / (2 * bboxShrinkFactor); +const insideMaxY = center[1] + height / (2 * bboxShrinkFactor); + +const insideBbox = [insideMinX, insideMinY, insideMaxX, insideMaxY]; +bbox = insideBbox; + +const maxRadialLength = Number.parseFloat(options.maxRadialLength); + +const theFilename = (() => { + if (filename) { + return `${filename}`; + } else if (numFeatures > 1) { + return `random${type}Collection.json`; + } else { + return `random${type}.json`; + } +})(); +const outfile = `${outdir}${theFilename}`; + +// remove the extension +const name = theFilename.slice(0, -5); + +console.log("Output options:", { + outfile, + bbox, + numFeatures, + type, + bboxShrinkFactor, + maxRadialLength, +}); + +const sketch = (() => { + const fc = genRandomPolygons({ + numPolygons: numFeatures, + bounds: bbox, + max_radial_length: maxRadialLength, + }) as FeatureCollection; + + if (type === "Feature") { + if (numFeatures === 1) { + return genFeature({ feature: fc.features[0], name }); + } else { + const feats = genFeatureCollection(fc.features, { name }); + return feats; + } + } else { + const sc = featureToSketchCollection(fc, name); + sc.properties.userAttributes = [ + { + label: "Type", + fieldType: "ChoiceField", + exportId: "TYPE", + value: "sketch collection", + }, + { + label: "Notes", + value: + "This is an adjustment of the previous proposal to better meet objectives", + exportId: "NOTES", + fieldType: "TextArea", + }, + ]; + + sc.features.forEach((f, i) => { + sc.features[i].properties.userAttributes = [ + { + label: "Type", + fieldType: "ChoiceField", + exportId: "TYPE", + value: "sketch", + }, + { + label: "Notes", + value: + "This is a modification of the northern proposed area to account for the new requirements", + exportId: "NOTES", + fieldType: "TextArea", + }, + ]; + }); + + if (numFeatures === 1) { + return sc.features[0]; + } else { + return sc; + } + } +})(); + +await fs.remove(outfile); +fs.writeJSON(outfile, sketch, { spaces: 2 }, (err) => { + if (err) throw err; + console.log(`Sketches written to ${outfile}`); +}); diff --git a/packages/base-project/scripts/genRandomSketch.ts b/packages/base-project/scripts/genRandomSketch.ts deleted file mode 100644 index f056779f75..0000000000 --- a/packages/base-project/scripts/genRandomSketch.ts +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env ts-node -import fs from "fs-extra"; -import project from "../project/projectClient.js"; -import { - featureToSketchCollection, - featureToSketch, - genRandomPolygons, - FeatureCollection, - Polygon, -} from "@seasketch/geoprocessing"; - -/** - * genRandomSketch script - generates random sketch within the bounding box of the project. Not guaranteed to be within the EEZ boundary - * @param outdir - the output director to write sketches to. Defaults to examples/sketches/ - * @param name - the name of the sketch and the filename to use with a .json extension added. - * @param numSketches - number of sketches to generate. Defaults to 1. If greater than 1, will return as a sketch collection - */ - -const usage = "Usage: genRandomSketch [numSketches] [name] [outdir]"; -console.log(process.argv); -const numPolygons = Number.parseInt(process.argv[2]) || 1; -if (!numPolygons || numPolygons <= 0) throw new Error(usage); - -const name = (() => { - const argName = process.argv[3]; - if (argName) { - return `${process.argv[3]}.json`; - } else if (numPolygons > 1) { - return "randomSketchCollection"; - } else { - return "randomSketch"; - } -})(); - -const outdir = - process.argv[4] || `${import.meta.dirname}/../examples/sketches/`; - -const outfile = `${outdir}${name}.json`; - -const bounds = project.basic.bbox; -if (!bounds) throw new Error("Missing bounds in basic.json"); - -const sketches = (() => { - const fc = genRandomPolygons({ - numPolygons, - bounds, - }) as FeatureCollection; - if (numPolygons === 1) { - return featureToSketch(fc.features[0], name); - } else { - const sc = featureToSketchCollection(fc, name); - return sc; - } -})(); - -await fs.remove(outfile); -fs.writeJSON(outfile, sketches, { spaces: 2 }, (err) => { - if (err) throw err; - console.log(`Sketches written to ${outfile}`); -}); diff --git a/packages/base-project/src/util/clipToGeography.ts b/packages/base-project/src/util/clipToGeography.ts index b56429b2ce..183f005f9e 100644 --- a/packages/base-project/src/util/clipToGeography.ts +++ b/packages/base-project/src/util/clipToGeography.ts @@ -8,8 +8,8 @@ import { Feature, isSketchCollection, genSketchCollection, -} from "@seasketch/geoprocessing/client-core"; -import { getFeatures } from "@seasketch/geoprocessing/dataproviders"; + getFeatures, +} from "@seasketch/geoprocessing"; import { bbox, featureCollection, simplify } from "@turf/turf"; import project from "../../project/projectClient.js"; import { @@ -19,9 +19,10 @@ import { } from "@seasketch/geoprocessing"; /** - * Clips sketch to geography + * Returns intersection of sketch with geography features. + * If sketch does not overlap with geography returns sketch with zero polygon geometry (null island) * @param sketch Sketch or SketchCollection - * @param geography geography to clip sketch to + * @param geography geography to clip sketch to, geography features are fetched * @param options optionally simplify sketch * @param simplifyOptions.tolerance tolerance in meters * @param simplifyOptions.highQuality highQuality simplification diff --git a/packages/geoprocessing/package.json b/packages/geoprocessing/package.json index f8bd4b2332..997bf3e21f 100644 --- a/packages/geoprocessing/package.json +++ b/packages/geoprocessing/package.json @@ -133,7 +133,7 @@ "fast-deep-equal": "^3.1.3", "finalhandler": "^1.2.0", "flatbush": "^3.3.0", - "flatgeobuf": "3.33.0", + "flatgeobuf": "3.36.0", "fs-extra": "^11.2.0", "fuzzy-tools": "^1.2.0", "geoblaze": "2.8.0", @@ -193,7 +193,6 @@ "vite-plugin-node-polyfills": "^0.22.0", "vitest": "^2.0.5", "vitest-fetch-mock": "^0.3.0", - "web-streams-polyfill": "4.0.0", "ws": "^7.3.0", "zod": "^3.23.8", "zod-error": "^1.5.0", diff --git a/packages/geoprocessing/scripts/base/datasources/datasources.ts b/packages/geoprocessing/scripts/base/datasources/datasources.ts index d51e1fcff2..a502994102 100644 --- a/packages/geoprocessing/scripts/base/datasources/datasources.ts +++ b/packages/geoprocessing/scripts/base/datasources/datasources.ts @@ -35,7 +35,7 @@ export async function createOrUpdateDatasource( if (dExists) { if (process.env.NODE_ENV !== "test") console.log( - `Updating ${inputDatasource.datasourceId} record in datasource file`, + `Updating ${inputDatasource.datasourceId} record in project/datasources.json file`, ); // Update in place if ( @@ -52,7 +52,7 @@ export async function createOrUpdateDatasource( } else { if (process.env.NODE_ENV !== "test") console.log( - `Adding ${inputDatasource.datasourceId} record in datasource file`, + `Adding ${inputDatasource.datasourceId} record in project/datasources.json file`, ); // Just add onto the end dSources = dSources.concat(inputDatasource); diff --git a/packages/geoprocessing/scripts/base/datasources/importRasterDatasource.ts b/packages/geoprocessing/scripts/base/datasources/importRasterDatasource.ts index 3c1c66cad8..89c57762d1 100644 --- a/packages/geoprocessing/scripts/base/datasources/importRasterDatasource.ts +++ b/packages/geoprocessing/scripts/base/datasources/importRasterDatasource.ts @@ -13,6 +13,8 @@ import { publishDatasource } from "./publishDatasource.js"; import ProjectClientBase from "../../../src/project/ProjectClientBase.js"; +$.verbose = true; + export async function importRasterDatasource( projectClient: C, options: ImportRasterDatasourceOptions, diff --git a/packages/geoprocessing/scripts/base/datasources/importVectorDatasource.ts b/packages/geoprocessing/scripts/base/datasources/importVectorDatasource.ts index 8c08028001..77a3d1991d 100644 --- a/packages/geoprocessing/scripts/base/datasources/importVectorDatasource.ts +++ b/packages/geoprocessing/scripts/base/datasources/importVectorDatasource.ts @@ -12,6 +12,8 @@ import { createOrUpdateDatasource } from "./datasources.js"; import { publishDatasource } from "./publishDatasource.js"; import { genVectorConfig } from "./genVectorConfig.js"; +$.verbose = true; + export async function importVectorDatasource( projectClient: C, options: ImportVectorDatasourceOptions, diff --git a/packages/geoprocessing/scripts/base/datasources/precalcRasterDatasource.ts b/packages/geoprocessing/scripts/base/datasources/precalcRasterDatasource.ts index 949812aec2..2324f59f1f 100644 --- a/packages/geoprocessing/scripts/base/datasources/precalcRasterDatasource.ts +++ b/packages/geoprocessing/scripts/base/datasources/precalcRasterDatasource.ts @@ -13,6 +13,7 @@ import { datasourceConfig, getRasterBoxSpherical, rasterMetrics, + loadCog, } from "../../../src/index.js"; import { bbox } from "@turf/turf"; @@ -45,8 +46,7 @@ export async function precalcRasterDatasource( subPath: extraOptions.newDstPath, port: extraOptions.port || 8001, // use default project port, override such as for tests }); - console.log("precalcing raster datasource", url); - const raster: Georaster = await geoblaze.parse(url); + const raster: Georaster = await loadCog(url); const rasterMetrics = await precalcRasterMetrics( raster, diff --git a/packages/geoprocessing/scripts/base/datasources/precalcVectorDatasource.ts b/packages/geoprocessing/scripts/base/datasources/precalcVectorDatasource.ts index 0ae6366b49..e73cdf5ee0 100644 --- a/packages/geoprocessing/scripts/base/datasources/precalcVectorDatasource.ts +++ b/packages/geoprocessing/scripts/base/datasources/precalcVectorDatasource.ts @@ -10,7 +10,6 @@ import { FeatureCollection, MultiPolygon, ProjectClientBase, - clipMultiMerge, createMetric, datasourceConfig, genZodErrorMessage, @@ -18,6 +17,7 @@ import { import { getFeatures } from "../../../src/dataproviders/index.js"; import { area, truncate, featureCollection } from "@turf/turf"; import { getGeographyFeatures } from "../geographies/helpers.js"; +import { clipMultiMerge } from "../../../src/toolbox/clip.js"; /** * Creates precalc metrics for a datasource and geography @@ -48,7 +48,6 @@ export async function precalcVectorDatasource( }); // Create metrics and return to precalc.ts - console.log("precalcing vector datasource", url); return genVectorMetrics(datasource, url, geography, geogDs, extraOptions); } diff --git a/packages/geoprocessing/scripts/dataPrep/explodeQuestion.ts b/packages/geoprocessing/scripts/dataPrep/explodeQuestion.ts index c5f18662d9..33d39e263c 100644 --- a/packages/geoprocessing/scripts/dataPrep/explodeQuestion.ts +++ b/packages/geoprocessing/scripts/dataPrep/explodeQuestion.ts @@ -11,9 +11,9 @@ export async function explodeQuestion( { type: "list", name: "explodeMulti", - message: questionText - ? questionText - : "Should multi-part geometries be split into multiple single-part geometries? (can increase sketch overlap calc performance by reducing number of polygons to fetch)", + message: + questionText || + "Should multi-part geometries be split into single-part geometries?", default: "yes", choices: [ { diff --git a/packages/geoprocessing/scripts/dataPrep/importData.ts b/packages/geoprocessing/scripts/dataPrep/importData.ts index d0fe73d3c8..9d5505d720 100644 --- a/packages/geoprocessing/scripts/dataPrep/importData.ts +++ b/packages/geoprocessing/scripts/dataPrep/importData.ts @@ -17,7 +17,6 @@ import path from "node:path"; import fs from "node:fs"; import { getProjectClient } from "../base/project/projectClient.js"; -import { precalcQuestion } from "./precalcQuestion.js"; import { explodeQuestion } from "./explodeQuestion.js"; $.verbose = false; @@ -58,7 +57,7 @@ const datasources = readDatasources(); const geoTypeAnswer = await geoTypeQuestion(); const srcAnswer = await srcQuestion(); -const config = await (async () => { +const options = await (async () => { if (geoTypeAnswer.geo_type === "vector") { // Vector datasource const layerNameAnswer = await layerNameQuestion(srcAnswer.src); @@ -67,26 +66,41 @@ const config = await (async () => { srcAnswer.src, ); const explodeAnswers = await explodeQuestion(); - const detailedVectorAnswers = await detailedVectorQuestions( - srcAnswer.src, - layerNameAnswer.layerName!, + + const { stdout } = + await $`ogrinfo -json -so -nocount -noextent -nogeomtype ${srcAnswer.src} ${layerNameAnswer.layerName!}`; + const fields: string[] = JSON.parse(stdout) + .layers.find((layer) => layer.name === layerNameAnswer.layerName!) + .fields.map((field) => field.name); + + const detailedVectorAnswers = await detailedVectorQuestions(fields); + const remFields = fields.filter( + (f) => !detailedVectorAnswers.classKeys.includes(f), ); - const precalcAnswers = await precalcQuestion(); - const config = vectorMapper({ + // If there are fields left, ask user if they want to keep any of them + const vectorAnswerProperties = await (async () => { + if (remFields.length > 0) { + return vectorQuestionProperties(remFields); + } else { + return { propertiesToKeep: [] }; + } + })(); + + const options = vectorMapper({ ...geoTypeAnswer, ...srcAnswer, ...datasourceIdAnswer, ...layerNameAnswer, - ...detailedVectorAnswers, + ...vectorAnswerProperties, formats: datasourceConfig.importDefaultVectorFormats.concat( detailedVectorAnswers.formats, ), - ...precalcAnswers, ...explodeAnswers, + precalc: true, }); - return config; + return options; } else { // Raster datasource const datasourceIdAnswer = await datasourceIdQuestion( @@ -94,20 +108,19 @@ const config = await (async () => { srcAnswer.src, ); const detailedRasterAnswers = await detailedRasterQuestions(srcAnswer.src); - const precalcAnswers = await precalcQuestion(); - const config = rasterMapper({ + const options = rasterMapper({ ...geoTypeAnswer, ...srcAnswer, ...datasourceIdAnswer, ...detailedRasterAnswers, - ...precalcAnswers, + precalc: true, }); - return config; + return options; } })(); -await importDatasource(projectClient, config, {}); +await importDatasource(projectClient, options, {}); /** Maps answers object to options */ function vectorMapper( @@ -225,26 +238,23 @@ async function layerNameQuestion( /** Get classKeys, propertiesToKeep, and formats */ async function detailedVectorQuestions( - srcPath: string, - layerName: string, -): Promise< - Pick< - ImportVectorDatasourceAnswers, - "classKeys" | "propertiesToKeep" | "formats" - > -> { - const { stdout } = - await $`ogrinfo -json -so -nocount -noextent -nogeomtype ${srcPath} ${layerName}`; - const fields = JSON.parse(stdout) - .layers.find((layer) => layer.name === layerName) - .fields.map((field) => field.name); - + fields: string[], +): Promise> { return inquirer.prompt< - Pick< - ImportVectorDatasourceAnswers, - "classKeys" | "propertiesToKeep" | "formats" - > + Pick >([ + { + type: "checkbox", + name: "formats", + message: `(Optional) additional formats to create (besides ${datasourceConfig.importDefaultVectorFormats.join( + ", ", + )})`, + choices: datasourceConfig.importExtraVectorFormats.map((name) => ({ + value: name, + name: `${name} - ${datasourceFormatDescriptions[name]}`, + checked: false, + })), + }, { type: "checkbox", name: "classKeys", @@ -257,6 +267,16 @@ async function detailedVectorQuestions( name: field, })), }, + ]); +} + +/** Get classKeys, propertiesToKeep, and formats */ +async function vectorQuestionProperties( + fields: string[], +): Promise> { + return inquirer.prompt< + Pick + >([ { type: "checkbox", name: "propertiesToKeep", @@ -269,18 +289,6 @@ async function detailedVectorQuestions( name: field, })), }, - { - type: "checkbox", - name: "formats", - message: `These formats are automatically created: ${datasourceConfig.importDefaultVectorFormats.join( - ", ", - )}. Select any additional formats you want created`, - choices: datasourceConfig.importExtraVectorFormats.map((name) => ({ - value: name, - name: `${name} - ${datasourceFormatDescriptions[name]}`, - checked: false, - })), - }, ]); } @@ -318,11 +326,11 @@ async function detailedRasterQuestions( choices: [ { value: "quantitative", - name: "Quantitative - values represent amounts, measurement of single thing", + name: "Quantitative - cell value (number) represents a measurement of a single thing", }, { value: "categorical", - name: "Categorical - values represent groups", + name: "Categorical - cell value (number) represents a category the cell is assigned to", }, ], }, diff --git a/packages/geoprocessing/scripts/global/datasources/mr-eez-land-union-precalc.ts b/packages/geoprocessing/scripts/global/datasources/mr-eez-land-union-precalc.ts index 799d746451..40d141a4f7 100644 --- a/packages/geoprocessing/scripts/global/datasources/mr-eez-land-union-precalc.ts +++ b/packages/geoprocessing/scripts/global/datasources/mr-eez-land-union-precalc.ts @@ -2,8 +2,9 @@ import fs from "fs-extra"; import { area, bbox, featureCollection as fc } from "@turf/turf"; import { $ } from "zx"; import { getFeatures } from "../../../src/dataproviders/index.js"; -import { chunk, clip, roundDecimal } from "../../../src/helpers/index.js"; +import { chunk, roundDecimal } from "../../../src/helpers/index.js"; import project from "./ProjectClientGlobal.js"; +import { clip } from "../../../src/toolbox/clip.js"; const outfile = "./mr-eez-land-union-precalc.json"; const infile = "/mnt/c/data/EEZ_land_union_v3_202003/EEZ_Land_v3_202030.shp"; diff --git a/packages/geoprocessing/scripts/init/createClient.ts b/packages/geoprocessing/scripts/init/createClient.ts index 9810d459fe..b6534b6e72 100644 --- a/packages/geoprocessing/scripts/init/createClient.ts +++ b/packages/geoprocessing/scripts/init/createClient.ts @@ -14,7 +14,7 @@ async function createClient() { { type: "input", name: "title", - message: "Name for this client, in PascalCase", + message: "Name for this , in PascalCase (e.g. CoralReefCard", validate: (value) => /^\w+$/.test(value) ? true : "Please use only alphabetical characters", transformer: (value) => pascalcase(value), @@ -79,7 +79,7 @@ export async function makeClient( `${templateClientPath}/SimpleReport.tsx`, ); const testClientCode = await fs.readFile( - `${templateClientPath}/SimpleReport.stories.tsx`, + `${templateClientPath}/SimpleReport.example-stories.ts`, ); // Add client to geoprocessing.json @@ -118,7 +118,7 @@ export async function makeClient( ); await fs.writeFile( - `${projectClientPath}/${options.title}.stories.tsx`, + `${projectClientPath}/${options.title}.example-stories.ts`, testClientCode.toString().replaceAll("SimpleReport", options.title), ); diff --git a/packages/geoprocessing/scripts/init/createFunction.ts b/packages/geoprocessing/scripts/init/createFunction.ts index ca3d2268c0..46faf2f155 100644 --- a/packages/geoprocessing/scripts/init/createFunction.ts +++ b/packages/geoprocessing/scripts/init/createFunction.ts @@ -67,23 +67,6 @@ async function createFunction() { }, ], }, - { - type: "list", - name: "executionMode", - message: "Choose an execution mode", - default: 0, - when: (answers) => answers.type === "geoprocessing", - choices: [ - { - value: "sync", - name: "Sync - Best for quick analyses (< 2s)", - }, - { - value: "async", - name: "Async - Better for long-running processes", - }, - ], - }, ]); answers.title = camelcase(answers.title); if (answers.type === "preprocessing" && answers.clipToEez === "yes") { @@ -91,6 +74,7 @@ async function createFunction() { } if (answers.type === "geoprocessing") { + answers.executionMode = "async"; await makeGeoprocessingHandler(answers, true, ""); } else { await makePreprocessingHandler(answers, true, ""); @@ -166,12 +150,24 @@ export async function makeGeoprocessingHandler( spinner.succeed( `created ${options.title} function in ${projectFunctionPath}/`, ); + spinner.succeed("Registered function in project/geoprocessing.json"); + if (interactive) { - console.log(chalk.blue(`\nGeoprocessing function initialized`)); + console.log("\n"); + console.log( + chalk.blue( + `Geoprocessing function: ${`${projectFunctionPath}/${options.title}.ts`}`, + ), + ); + console.log( + chalk.blue( + `Smoke test: ${`${projectFunctionPath}/${options.title}Smoke.test.ts`}`, + ), + ); console.log(`\nNext Steps: - * Update your function definition in ${`${projectFunctionPath}/${options.title}.ts`} - * Smoke test in ${`${projectFunctionPath}/${options.title}Smoke.test.ts`} will be run the next time you use 'npm test' + * Update the geoprocessing function with your analysis * Populate examples/sketches folder with sketches for smoke test to run against + * 'npm test' to smoke test your new geoprocessing function against all example sketches `); } } diff --git a/packages/geoprocessing/scripts/init/createProject.test.ts b/packages/geoprocessing/scripts/init/createProject.test.ts index e41ed0ca5e..56df1ad4a5 100644 --- a/packages/geoprocessing/scripts/init/createProject.test.ts +++ b/packages/geoprocessing/scripts/init/createProject.test.ts @@ -1,13 +1,8 @@ import path from "node:path"; - import fs from "fs-extra"; import { createProject } from "./createProject.js"; -import { - GeoprocessingJsonConfig, - geographiesSchema, - datasourcesSchema, -} from "../../src/types/index.js"; -import { isVectorDatasource } from "../../src/datasources/index.js"; +import { GeoprocessingJsonConfig } from "../../src/types/index.js"; + import { describe, it, expect, afterAll } from "vitest"; const rootPath = `${import.meta.dirname}/../__test__`; @@ -32,14 +27,10 @@ describe("createProject", () => { region: "us-west-1", languages: ["EN"], templates: [], - planningAreaType: "other", bboxMaxLat: 0, bboxMinLat: 0, bboxMaxLng: 0, bboxMinLng: 0, - planningAreaId: "American Samoa", - planningAreaName: "Samoa", - planningAreaNameQuestion: "yes", }, false, rootPath, @@ -68,7 +59,6 @@ describe("createProject", () => { it("createProject - should create project using eez selection", async () => { const projectName = "test-project-empty"; - const projectPath = path.join(rootPath, projectName); await createProject( { name: projectName, @@ -81,66 +71,10 @@ describe("createProject", () => { region: "us-west-1", languages: ["EN"], templates: [], - planningAreaType: "eez", - planningAreaId: "Micronesian Exclusive Economic Zone", - planningAreaName: "Micronesian Exclusive Economic Zone", - planningAreaNameQuestion: "yes", }, false, rootPath, ); - - const basicJson = JSON.parse( - fs - .readFileSync(path.join(projectPath, "project", "basic.json")) - .toString(), - ); - - // Make sure in the right ballpark - expect(basicJson.bbox[0]).toBeGreaterThan(135); - expect(basicJson.bbox[0]).toBeLessThan(136); - expect(basicJson.bbox[1]).toBeGreaterThan(-2); - expect(basicJson.bbox[1]).toBeLessThan(-1); - - const savedGeogs = fs.readJSONSync( - `${projectPath}/project/geographies.json`, - ); - const geogs = geographiesSchema.parse(savedGeogs); - // console.log(JSON.stringify(geogs)); - expect(Array.isArray(geogs)); - expect(geogs.length).toEqual(2); // world and eez - - const geog = geogs[1]; // eez should be the second geography - expect(geog.display).toEqual("Micronesian Exclusive Economic Zone"); - - // Make sure in the right ballpark - expect(geog.bboxFilter![0]).toBeGreaterThan(135); - expect(geog.bboxFilter![0]).toBeLessThan(136); - expect(geog.bboxFilter![1]).toBeGreaterThan(-2); - expect(geog.bboxFilter![1]).toBeLessThan(-1); - - expect(basicJson.bbox).toEqual(geog.bboxFilter); - - expect(JSON.stringify(geog.propertyFilter)).toEqual( - JSON.stringify({ - property: "GEONAME", - values: ["Micronesian Exclusive Economic Zone"], - }), - ); - - const savedDatasources = fs.readJSONSync( - `${projectPath}/project/datasources.json`, - ); - const ds = datasourcesSchema.parse(savedDatasources); - const globalEezDS = "global-eez-mr-v12"; - const eezDs = ds.find((ds) => ds.datasourceId === globalEezDS); - // expect(isVectorDatasource(ds)).toBe(true); - expect(eezDs).toBeTruthy(); - if (eezDs && isVectorDatasource(ds)) { - expect(eezDs.precalc).toBe(true); - // expect(eezDs?.propertyFilter).toBeTruthy(); - // expect(eezDs?.bboxFilter).toBeTruthy(); - } }, 120_000); it("createProject - should create project with template", async () => { @@ -158,14 +92,6 @@ describe("createProject", () => { region: "us-west-1", languages: ["EN"], templates: ["template-ocean-eez"], - planningAreaType: "other", - bboxMaxLat: 0, - bboxMinLat: 0, - bboxMaxLng: 0, - bboxMinLng: 0, - planningAreaId: "American Samoa", - planningAreaNameQuestion: "yes", - planningAreaName: "Samoa", }, false, rootPath, @@ -195,14 +121,6 @@ describe("createProject", () => { region: "us-west-1", languages: ["EN"], templates: [], - planningAreaType: "other", - bboxMaxLat: 90, - bboxMinLat: -90, - bboxMaxLng: 180, - bboxMinLng: -180, - planningAreaId: "Test Area", - planningAreaName: "", - planningAreaNameQuestion: "no", }, false, rootPath, @@ -217,15 +135,6 @@ describe("createProject", () => { expect(packageJson.license).toBe("UNLICENSED"); expect(packageJson.author).toBe(""); - const basicJson = JSON.parse( - fs - .readFileSync(path.join(projectPath, "project", "basic.json")) - .toString(), - ); - - expect(basicJson.bbox).toEqual([-180, -90, 180, 90]); - expect(basicJson.planningAreaName).toEqual("Test Area"); - const gpConfig = JSON.parse( fs.readFileSync(projectPath + "/project/geoprocessing.json").toString(), ) as GeoprocessingJsonConfig; diff --git a/packages/geoprocessing/scripts/init/createProject.ts b/packages/geoprocessing/scripts/init/createProject.ts index 30e0c22f9f..2669737a9c 100644 --- a/packages/geoprocessing/scripts/init/createProject.ts +++ b/packages/geoprocessing/scripts/init/createProject.ts @@ -3,20 +3,10 @@ import { TemplateMetadata } from "../types.js"; import ora from "ora"; import fs from "fs-extra"; import chalk from "chalk"; -import { - BBox, - Geography, - Package, - projectSchema, - geographiesSchema, - datasourcesSchema, -} from "../../src/types/index.js"; +import { BBox, Package, projectSchema } from "../../src/types/index.js"; import { promisify } from "node:util"; import { getGeoprocessingPath, getBaseProjectPath } from "../util/getPaths.js"; -import { getBbox } from "../global/datasources/mr-eez.js"; import { $ } from "zx"; -import { globalDatasources } from "../../src/datasources/global.js"; -import { isVectorDatasource } from "../../src/index.js"; import * as child from "node:child_process"; $.verbose = false; @@ -34,15 +24,24 @@ export interface CreateProjectMetadata extends TemplateMetadata { region: string; languages: string[]; gpVersion?: string; - planningAreaType: string; + /** @deprecated */ bbox?: BBox; + /** @deprecated */ bboxMinLng?: number; + /** @deprecated */ bboxMaxLng?: number; + /** @deprecated */ bboxMinLat?: number; + /** @deprecated */ bboxMaxLat?: number; - planningAreaId: string; - planningAreaName: string; - planningAreaNameQuestion: string; + /** @deprecated */ + planningAreaType?: string; + /** @deprecated */ + planningAreaId?: string; + /** @deprecated */ + planningAreaName?: string; + /** @deprecated */ + planningAreaNameQuestion?: string; } /** Create project at basePath. If should be created non-interactively then set interactive = false and provide all project creation metadata, otherwise will prompt for answers */ @@ -172,40 +171,9 @@ export async function createProject( spinner.start("updating basic.json"); const basic = fs.readJSONSync(`${projectPath}/project/basic.json`); - // Either lookup bbox of planning area by name or construct from user-provided - const bbox: BBox = await (async () => { - if (metadata.planningAreaType && metadata.planningAreaType === "eez") { - const bbox = await getBbox(metadata.planningAreaId); - if (!bbox) - throw new Error(`Bounding box not for EEZ named ${metadata.name}`); - return bbox; - } else { - if ( - metadata.bboxMinLng === undefined || - metadata.bboxMinLat === undefined || - metadata.bboxMaxLng === undefined || - metadata.bboxMaxLat === undefined - ) { - throw new Error("Incomplete bounding box provided by user"); - } - return [ - metadata.bboxMinLng, - metadata.bboxMinLat, - metadata.bboxMaxLng, - metadata.bboxMaxLat, - ] as BBox; - } - })(); - const validBasic = projectSchema.parse({ ...basic, - bbox, languages: ["EN", ...languages], // insert EN as required language - planningAreaType: metadata.planningAreaType, - planningAreaId: metadata.planningAreaId, - planningAreaName: metadata.planningAreaName - ? metadata.planningAreaName - : metadata.planningAreaId, }); await fs.writeJSONSync(`${projectPath}/project/basic.json`, validBasic, { @@ -213,96 +181,6 @@ export async function createProject( }); spinner.succeed("updated basic.json"); - if (metadata.planningAreaType && metadata.planningAreaType === "eez") { - const globalEezDS = "global-eez-mr-v12"; - const eezDs = globalDatasources.find( - (ds) => ds.datasourceId === globalEezDS, - ); - if (isVectorDatasource(eezDs)) { - if (validBasic.planningAreaType === "eez") { - spinner.start("updating geographies.json"); - // read default geographies and disable them by setting precalc to false - // also clear default-boundary group - const geos: Geography[] = geographiesSchema - .parse(fs.readJSONSync(`${projectPath}/project/geographies.json`)) - .map((g) => ({ ...g, precalc: false, groups: [] })); - // assign initial eez geography with proper filters and precalc true - geos.push({ - geographyId: "eez", - datasourceId: "global-eez-mr-v12", - display: metadata.planningAreaName - ? metadata.planningAreaName - : metadata.planningAreaId, - propertyFilter: { - property: eezDs.idProperty!, - values: [metadata.planningAreaId], - }, - bboxFilter: validBasic.bbox, - groups: ["default-boundary"], - precalc: true, - }); - await fs.writeJSONSync( - `${projectPath}/project/geographies.json`, - geos, - { - spaces: 2, - }, - ); - spinner.succeed("updated geographies.json"); - - spinner.start("updating eez in datasources.json"); - try { - const ds = datasourcesSchema.parse( - fs.readJSONSync(`${projectPath}/project/datasources.json`), - ); - const eezIndex = ds.findIndex( - (d) => d.datasourceId === "global-eez-mr-v12", - ); - // Narrow the global eez datasource to the planning area and turn on precalc - ds[eezIndex] = { - ...ds[eezIndex], - precalc: true, - propertyFilter: { - property: eezDs.idProperty!, - values: [metadata.planningAreaId], - }, - bboxFilter: validBasic.bbox, - }; - await fs.writeJSONSync( - `${projectPath}/project/datasources.json`, - ds, - { - spaces: 2, - }, - ); - } catch (error: unknown) { - if (error instanceof Error) { - console.log("EEZ datasource update failed"); - throw error; - } - } - spinner.succeed("updated eez in datasources.json"); - } else { - // copy default world geography - spinner.start("updating geographies.json"); - try { - await fs.ensureDir(projectPath); - await $`cp -r ${baseProjectPath}/project/geographies.json ${projectPath}/project/geographies.json`; - } catch (error: unknown) { - if (error instanceof Error) { - console.log("Default geography copy failed"); - throw error; - } - } - spinner.succeed("updated geographies.json"); - } - } else { - console.error( - `Expected vector datasource for ${globalEezDS}, geographies.json not updated`, - ); - } - } - spinner.start("add .gitignore"); try { if (fs.existsSync(`${projectPath}/_gitignore`)) { diff --git a/packages/geoprocessing/scripts/init/createReport.ts b/packages/geoprocessing/scripts/init/createReport.ts index cc8c3a6457..d7da39456c 100644 --- a/packages/geoprocessing/scripts/init/createReport.ts +++ b/packages/geoprocessing/scripts/init/createReport.ts @@ -10,8 +10,6 @@ import { GeoprocessingJsonConfig, } from "../../src/types/index.js"; import { - getBlankComponentPath, - getBlankFunctionPath, getOceanEEZComponentPath, getOceanEEZFunctionPath, getProjectComponentPath, @@ -31,40 +29,28 @@ const createReport = async () => { choices: [ { value: "blank", - name: "Blank report", + name: "Blank report - empty report ready to build from scratch", }, { value: "raster", - name: "Raster overlap report - Calculates sketch overlap with raster data sources", + name: "Raster overlap report - calculates sketch overlap with raster datasources", }, { value: "vector", - name: "Vector overlap report - Calculates sketch overlap with vector data sources", + name: "Vector overlap report - calculates sketch overlap with vector datasources", }, ], }, { type: "input", name: "description", - message: "Describe what this report calculates", - }, - { - type: "list", - name: "executionMode", - message: "Choose an execution mode for this report", - choices: [ - { - value: "sync", - name: "Sync - Best for quick analyses (< 2s)", - }, - { - value: "async", - name: "Async - Better for long-running processes", - }, - ], + message: + "Describe what this reports geoprocessing function will calculate (e.g. Calculate sketch overlap with boundary polygons)", }, ]); + answers.executionMode = "async"; + // Title of report if (answers.type === "raster" || answers.type === "vector") { // For raster and vector overlap reports, we need to know which metric group to report on @@ -137,7 +123,24 @@ const createReport = async () => { type: "list", name: "stat", message: "Statistic to calculate", - choices: ["sum", "count", "area"], + choices: [ + { + value: "valid", + name: "valid - count of valid raster cells overlapping with sketch (not nodata cells)", + }, + { + value: "count", + name: "count - count of all raster cells overlapping with sketch (valid and invalid)", + }, + { + value: "sum", + name: "sum - sum of value of valid cells overlapping with sketch", + }, + { + value: "area", + name: "area - area in square meters of valid raster cells overlapping with sketch", + }, + ], }; const { stat } = await inquirer.prompt([statQuestion]); answers.stat = stat; @@ -176,16 +179,10 @@ export async function makeReport( const projectFunctionPath = getProjectFunctionPath(basePath); const projectComponentPath = getProjectComponentPath(basePath); - const templateFuncPath = - options.type === "blank" - ? getBlankFunctionPath() - : getOceanEEZFunctionPath(); - const templateFuncTestPath = `${getBlankFunctionPath()}/blankFunctionSmoke.test.ts`; - const templateCompPath = - options.type === "blank" - ? getBlankComponentPath() - : getOceanEEZComponentPath(); - const templateCompStoriesPath = `${getBlankComponentPath()}/BlankCard.example-stories.ts`; + const templateFuncPath = getOceanEEZFunctionPath(); + const templateFuncTestPath = `${templateFuncPath}/blankFunctionSmoke.test.ts`; + const templateCompPath = getOceanEEZComponentPath(); + const templateCompStoriesPath = `${getOceanEEZComponentPath()}/BlankCard.example-stories.ts`; if (!fs.existsSync(path.join(basePath, "src"))) { fs.mkdirSync(path.join(basePath, "src")); @@ -233,7 +230,8 @@ export async function makeReport( // User inputs to replace defaults const funcName = options.title; - const compName = funcName.charAt(0).toUpperCase() + funcName.slice(1); + const compName = + funcName.charAt(0).toUpperCase() + funcName.slice(1) + "Card"; // Write function file await fs.writeFile( @@ -257,7 +255,7 @@ export async function makeReport( `${projectComponentPath}/${compName}.tsx`, componentCode .toString() - .replace(defaultCompRegex, `${compName}`) + .replace(defaultCompRegex, compName) .replace(defaultFuncRegex, `${funcName}`) .replaceAll("overlapFunction", `${funcName}`) .replace(`"sum"`, `"${options.stat}"`), // for raster/vector overlap reports @@ -268,7 +266,7 @@ export async function makeReport( `${projectComponentPath}/${compName}.example-stories.ts`, storiesComponentCode .toString() - .replaceAll(blankCompRegex, `${compName}`) + .replaceAll(blankCompRegex, compName) .replaceAll(blankFuncRegex, `${funcName}`), ); @@ -290,18 +288,33 @@ export async function makeReport( // Finish and show next steps spinner.succeed(`Created ${options.title} report`); + spinner.succeed("Registered report assets in project/geoprocessing.json"); if (interactive) { - console.log(chalk.blue(`\nReport successfully created!`)); + console.log("\n"); + console.log( + chalk.blue( + `Geoprocessing function: ${`${projectFunctionPath}/${funcName}.ts`}`, + ), + ); + console.log( + chalk.blue( + `Smoke test: ${`${projectFunctionPath}/${funcName}Smoke.test.ts`}`, + ), + ); console.log( - chalk.blue(`Function: ${`${projectFunctionPath}/${funcName}.ts`}`), + chalk.blue( + `Report component: ${`${projectComponentPath}/${compName}.tsx`}`, + ), ); console.log( - chalk.blue(`Component: ${`${projectComponentPath}/${compName}.tsx`}`), + chalk.blue( + `Story generator: ${`${projectComponentPath}/${compName}.example-stories.ts`}`, + ), ); console.log(`\nNext Steps: - * Add your new <${compName} /> component to one of your reports (e.g. src/clients/SimpleReport.tsx) or report pages (e.g. src/components/ViabilityPage.tsx) - * Run 'npm test' to run smoke tests against your new function - * View your report using 'npm storybook' with smoke test output + * 'npm test' to run smoke tests against your new geoprocessing function + * 'npm run storybook' to view your new report with smoke test output + * Add <${compName} /> to a top-level report client or page when ready `); } } diff --git a/packages/geoprocessing/scripts/init/init.ts b/packages/geoprocessing/scripts/init/init.ts index 2cfe358f50..5dd06ca78c 100644 --- a/packages/geoprocessing/scripts/init/init.ts +++ b/packages/geoprocessing/scripts/init/init.ts @@ -5,9 +5,7 @@ import languages from "../../src/i18n/languages.json" with { type: "json" }; import fuzzy from "fuzzy-tools"; import autocomplete from "inquirer-autocomplete-prompt"; import awsRegions from "aws-regions"; -import { getTemplateQuestion } from "../template/addTemplate.js"; import { createProject, CreateProjectMetadata } from "./createProject.js"; -import { eezColl } from "../global/datasources/mr-eez.js"; import { pathToFileURL } from "node:url"; import userMeta from "user-meta"; @@ -21,12 +19,6 @@ async function init(gpVersion?: string) { const defaultName = userMeta.name; const defaultEmail = userMeta.email; - const eezChoices = eezColl.features.map((eez) => ({ - value: eez.properties.GEONAME, - name: eez.properties.GEONAME, - })); - - const templateQuestion = await getTemplateQuestion("starter-template"); const answers = await inquirer.prompt([ /* Pass your questions in here */ { @@ -117,118 +109,21 @@ async function init(gpVersion?: string) { "What languages will your reports be published in, other than English? (leave blank for none)", choices: languages .filter((lan) => lan.code !== "EN") + .sort((a, b) => a.name.localeCompare(b.name)) .map((lan) => ({ value: lan.code, name: lan.name, })), }, - { - type: "list", - name: "planningAreaType", - message: "What type of planning area does your project have?", - default: "eez", - choices: [ - { - value: "eez", - name: "Exclusive Economic Zone (EEZ)", - }, - { value: "other", name: "Other" }, - ], - }, - { - when: (answers) => answers.planningAreaType === "eez", - type: "list", - name: "planningAreaId", - message: "What EEZ is this for?", - choices: eezChoices, - }, - { - when: (answers) => answers.planningAreaType === "eez", - type: "list", - name: "planningAreaNameQuestion", - message: (answers) => - `Is there a different name to use for this planning area than ${answers.planningAreaId}?`, - choices: [ - { value: "yes", name: "Yes" }, - { value: "no", name: "No" }, - ], - default: "yes", - }, - { - when: (answers) => answers.planningAreaNameQuestion === "yes", - type: "input", - name: "planningAreaName", - message: `What is the common name for this planning area?`, - }, - { - when: (answers) => answers.planningAreaType === "other", - type: "input", - name: "planningAreaId", - message: - "What is the name of the planning area as it should be displayed in reports? (e.g. Samoa)", - validate: (value) => - value === "" ? "Provide a name for your planning area" : true, - }, - { - when: (answers) => answers.planningAreaType === "other", - type: "input", - name: "bboxMinLng", - message: - "What is the projects minimum longitude (left) in degrees (-180.0 to 180.0)?", - default: -180, - validate: (value) => - Number.isNaN(Number.parseFloat(value)) ? "Not a number!" : true, - filter: (value) => - Number.isNaN(Number.parseFloat(value)) - ? value - : Number.parseFloat(value), - }, - { - when: (answers) => answers.planningAreaType === "other", - type: "input", - name: "bboxMinLat", - message: - "What is the projects minimum latitude (bottom) in degrees (-90.0 to 90.0)?", - default: -90, - validate: (value) => - Number.isNaN(Number.parseFloat(value)) ? "Not a number!" : true, - filter: (value) => - Number.isNaN(Number.parseFloat(value)) - ? value - : Number.parseFloat(value), - }, - { - when: (answers) => answers.planningAreaType === "other", - type: "input", - name: "bboxMaxLng", - message: - "What is the projects maximum longitude (right) in degrees (-180.0 to 180.0)?", - default: 180, - validate: (value) => - Number.isNaN(Number.parseFloat(value)) ? "Not a number!" : true, - filter: (value) => - Number.isNaN(Number.parseFloat(value)) - ? value - : Number.parseFloat(value), - }, - { - when: (answers) => answers.planningAreaType === "other", - type: "input", - name: "bboxMaxLat", - message: - "What is the projects maximum latitude (top) in degrees (-90.0 to 90.0)?", - default: 90, - validate: (value) => - Number.isNaN(Number.parseFloat(value)) ? "Not a number!" : true, - filter: (value) => - Number.isNaN(Number.parseFloat(value)) - ? value - : Number.parseFloat(value), - }, - templateQuestion, ]); + answers.templates = ["template-blank-project"]; + answers.planningAreaType = "other"; answers.gpVersion = gpVersion; + answers.bboxMinLng = -180; + answers.bboxMinLat = -90; + answers.bboxMaxLng = 180; + answers.bboxMaxLat = 90; await createProject(answers); } diff --git a/packages/geoprocessing/scripts/npm/prepare.ts b/packages/geoprocessing/scripts/npm/prepare.ts index 679c818922..dbb06fa7f1 100755 --- a/packages/geoprocessing/scripts/npm/prepare.ts +++ b/packages/geoprocessing/scripts/npm/prepare.ts @@ -150,6 +150,21 @@ async function bundleTemplates(templateType: TemplateType) { ); } + if (fs.existsSync(path.join(templatePath, "src", "clients"))) { + if (!fs.existsSync(path.join(distTemplatePath, "src", "clients"))) { + fs.mkdirSync(path.join(distTemplatePath, "src", "clients")); + } + await fs.copy( + path.join(templatePath, "src", "clients"), + path.join(distTemplatePath, "src", "clients"), + ); + if (fs.existsSync(`${distTemplatePath}/src/clients/.story-cache`)) { + await fs.rmdir(`${distTemplatePath}/src/clients/.story-cache`, { + recursive: true, + }); + } + } + if (fs.existsSync(path.join(templatePath, "src", "components"))) { if (!fs.existsSync(path.join(distTemplatePath, "src", "components"))) { fs.mkdirSync(path.join(distTemplatePath, "src", "components")); @@ -158,6 +173,11 @@ async function bundleTemplates(templateType: TemplateType) { path.join(templatePath, "src", "components"), path.join(distTemplatePath, "src", "components"), ); + if (fs.existsSync(`${distTemplatePath}/src/components/.story-cache`)) { + await fs.rmdir(`${distTemplatePath}/src/components/.story-cache`, { + recursive: true, + }); + } } if (fs.existsSync(path.join(templatePath, "src", "assets"))) { @@ -170,16 +190,6 @@ async function bundleTemplates(templateType: TemplateType) { ); } - if (fs.existsSync(path.join(templatePath, "src", "clients"))) { - if (!fs.existsSync(path.join(distTemplatePath, "src", "clients"))) { - fs.mkdirSync(path.join(distTemplatePath, "src", "clients")); - } - await fs.copy( - path.join(templatePath, "src", "clients"), - path.join(distTemplatePath, "src", "clients"), - ); - } - if (fs.existsSync(path.join(templatePath, "examples"))) { if (!fs.existsSync(path.join(distTemplatePath, "examples"))) { fs.mkdirSync(path.join(distTemplatePath, "examples")); diff --git a/packages/geoprocessing/scripts/testing/index.ts b/packages/geoprocessing/scripts/testing/index.ts index 1f056b2bd9..dfe75c6903 100644 --- a/packages/geoprocessing/scripts/testing/index.ts +++ b/packages/geoprocessing/scripts/testing/index.ts @@ -1,3 +1,4 @@ export * from "./writeResultOutput.js"; export * from "./getExamples.js"; export * from "./polygonPreprocessorSmokeTest.js"; +export * from "./polygonSmokeTest.js"; diff --git a/packages/geoprocessing/scripts/testing/polygonSmokeTest.ts b/packages/geoprocessing/scripts/testing/polygonSmokeTest.ts new file mode 100644 index 0000000000..e7e51910c3 --- /dev/null +++ b/packages/geoprocessing/scripts/testing/polygonSmokeTest.ts @@ -0,0 +1,70 @@ +import { writeResultOutput } from "./index.js"; +import { Feature } from "geojson"; +import { Sketch, ValidationError } from "../../src/index.js"; +import { booleanValid } from "@turf/turf"; + +/** + * Runs a basic smoke test on a preprocessor function that takes feature or sketch polygon input + * For each example provided, runs the preprocessing function and checks that the output is truthy, + * and that the geometry is valid according to the OGC spec using turf.booleanValid + * then outputs the result to examples/output directory. If you need more comprehensive tests, + * consider writing additional tests after calling this test or simply copying the source code for this test + * function to create your own. + */ +export const polygonSmokeTest = ( + preprocessorFunc: (feature: Feature) => Promise, + /** Preprocessor function name */ + preprocessorName: string, + /** Feature or Sketch examples to run against */ + examples: Feature[] | Sketch[], + options: { + /** timeout for test run in milliseconds, defaults to 10000 or 10 seconds */ + timeout?: number; + /** If true console outputs the name of the example on start of run */ + debug?: boolean; + } = {}, +) => { + const { timeout = 10_000, debug = false } = options; + + describe("Basic smoke tests", () => { + test("handler function is present", () => { + expect(typeof preprocessorFunc).toBe("function"); + }); + + test( + `${preprocessorName}Smoke`, + async () => { + if (examples.length === 0) { + console.log(`No examples provided`); + } + for (const example of examples) { + if (debug) { + console.log("Example:", example.properties?.name); + } + try { + const result = await preprocessorFunc(example); + expect(result).toBeTruthy(); + expect(booleanValid(result)); + expect( + result.geometry.type === "Polygon" || + result.geometry.type === "MultiPolygon", + ); + writeResultOutput( + result, + preprocessorName, + example?.properties?.name, + ); + } catch (error) { + console.log("error", example?.properties?.name, error); + if (error instanceof ValidationError) { + // ValidationErrors don't indicate failures, just comprehensive tests + } else { + throw error; + } + } + } + }, + timeout, + ); + }); +}; diff --git a/packages/geoprocessing/scripts/testing/writeResultOutput.ts b/packages/geoprocessing/scripts/testing/writeResultOutput.ts index 2992fe2e14..c1df2a08a7 100644 --- a/packages/geoprocessing/scripts/testing/writeResultOutput.ts +++ b/packages/geoprocessing/scripts/testing/writeResultOutput.ts @@ -8,13 +8,9 @@ export async function writeResultOutput( functionName: string, name: string, ) { - if (!fs.existsSync("examples/output")) { - await fs.mkdir("examples/output"); - } const folder = "examples/output/" + name; - if (!fs.existsSync(folder)) { - await fs.mkdir(folder); - } + await fs.ensureDirSync(folder); + fs.writeFile( folder + "/" + functionName + ".json", JSON.stringify(results, null, " "), diff --git a/packages/geoprocessing/scripts/upgrade/upgrade.ts b/packages/geoprocessing/scripts/upgrade/upgrade.ts index d0e371ae09..014c8d4ad9 100644 --- a/packages/geoprocessing/scripts/upgrade/upgrade.ts +++ b/packages/geoprocessing/scripts/upgrade/upgrade.ts @@ -31,7 +31,10 @@ spinner.succeed("Update tsconfig.json"); //// scripts //// spinner.start("Update scripts"); -await $`mkdir -p scripts && cp -r ${GP_PATH}/dist/base-project/scripts/* scripts`; + +await $`mkdir -p scripts`; +await $`rm -rf scripts/genRandomFeature.ts scripts/genRandomSketch.ts`; // remove old scripts +await $`cp -r ${GP_PATH}/dist/base-project/scripts/* scripts`; spinner.succeed("Update scripts"); //// i18n //// diff --git a/packages/geoprocessing/src/aws/serviceHandlers.ts b/packages/geoprocessing/src/aws/serviceHandlers.ts index 902e2cd31d..f781134b50 100644 --- a/packages/geoprocessing/src/aws/serviceHandlers.ts +++ b/packages/geoprocessing/src/aws/serviceHandlers.ts @@ -26,6 +26,7 @@ export const projectMetadata = async ( endpoint: `https://${event.headers["Host"]}/prod/${func.title}`, handler: undefined, purpose: undefined, + requiresProperties: func.requiresProperties || [], })), preprocessingServices: preprocessingFunctions .filter((f) => f.purpose === "preprocessing") @@ -33,7 +34,7 @@ export const projectMetadata = async ( title: func.title, description: func.description, endpoint: `https://${event.headers["Host"]}/prod/${func.title}`, - requiresProperties: func.requiresProperties, + requiresProperties: func.requiresProperties || [], })), }; return { diff --git a/packages/geoprocessing/src/dataproviders/cog.test.e2e.ts b/packages/geoprocessing/src/dataproviders/cog.test.e2e.ts index 3dd7251fc4..09b09173cf 100644 --- a/packages/geoprocessing/src/dataproviders/cog.test.e2e.ts +++ b/packages/geoprocessing/src/dataproviders/cog.test.e2e.ts @@ -1,6 +1,6 @@ import { describe, test, expect } from "vitest"; -import { loadCog, loadCogWindow } from "./cog.js"; -import { Feature, Polygon, Sketch } from "../types/index.js"; +import { loadCog } from "./cog.js"; +import { Polygon, Sketch } from "../types/index.js"; import { genSampleSketch } from "../helpers/index.js"; import geoblaze from "geoblaze"; import parseGeoraster from "georaster"; @@ -137,75 +137,4 @@ describe("COG test", () => { const raster = await loadCog(url); expect(raster).toBeTruthy(); }); - - test("two load methods should produce same result", async () => { - const url = "http://127.0.0.1:8080/data/in/feature_abyssopelagic_cog.tif"; - - const rasterParse = await loadCog(url); - const rasterLoad = await loadCogWindow(url, {}); - - const parseSumAll = await geoblaze.sum(rasterParse); - const loadSumAll = await geoblaze.sum(rasterLoad); - - expect(JSON.stringify(parseSumAll)).toEqual(JSON.stringify(loadSumAll)); - }); - - test("two load methods should produce same result with polygon", async () => { - const url = "http://127.0.0.1:8080/data/in/feature_abyssopelagic_cog.tif"; - - const rasterParse = await loadCog(url); - const rasterLoad = await loadCogWindow(url, {}); - - // Polygon covering most of the eez raster value but not all of it, including some nodata values - const bigFeatureWithin: Feature = { - type: "Feature", - properties: {}, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-65.909_690_828_480_31, 30.182_428_167_053_605], - [-67.854_750_601_860_64, 33.213_322_279_942_39], - [-65.088_233_545_547_84, 34.667_396_091_110_22], - [-62.000_687_206_249_91, 31.712_038_280_100_28], - [-63.407_550_828_743_45, 30.201_312_242_523_315], - [-63.407_550_828_743_45, 30.201_312_242_523_315], - [-65.909_690_828_480_31, 30.182_428_167_053_605], - ], - ], - }, - }; - - const parseSumWithin = await geoblaze.sum(rasterParse, bigFeatureWithin); - const loadSumWithin = await geoblaze.sum(rasterLoad, bigFeatureWithin); - expect(JSON.stringify(parseSumWithin)).toEqual( - JSON.stringify(loadSumWithin), - ); - - // Larger than the raster but still not covering all value - const bigFeatureOutside: Feature = { - type: "Feature", - properties: {}, - geometry: { - type: "Polygon", - coordinates: [ - [ - [-66.740_590_149_147_64, 34.506_881_449_617_666], - [-69.101_099_582_861_65, 30.144_660_016_114_18], - [-65.088_233_545_547_84, 27.047_671_639_081_4], - [-60.442_750_979_998_664, 29.332_644_770_916_56], - [-59.885_670_753_642_15, 34.403_019_034_534_25], - [-65.938_016_941_684_88, 37.802_152_619_082_43], - [-66.740_590_149_147_64, 34.506_881_449_617_666], - ], - ], - }, - }; - - const parseSumOutside = await geoblaze.sum(rasterParse, bigFeatureOutside); - const loadSumOutside = await geoblaze.sum(rasterLoad, bigFeatureOutside); - expect(JSON.stringify(parseSumOutside)).toEqual( - JSON.stringify(loadSumOutside), - ); - }); }); diff --git a/packages/geoprocessing/src/dataproviders/cog.ts b/packages/geoprocessing/src/dataproviders/cog.ts index 5578dd2f39..8e7de865bf 100644 --- a/packages/geoprocessing/src/dataproviders/cog.ts +++ b/packages/geoprocessing/src/dataproviders/cog.ts @@ -1,18 +1,4 @@ -import { BBox } from "../types/index.js"; -import parseGeoraster from "georaster"; import geoblaze from "geoblaze"; -import { maxWidth } from "../toolbox/index.js"; -import { buffer, bboxPolygon, bbox } from "@turf/turf"; - -interface CogOptions { - noDataValue?: number; - projection?: number; - windowBox?: BBox; - /** if window is smaller than one pixel, will buffer the widest dimension to the size of one pixel, ensuring at least one pixel is returned */ - bufferSmall?: boolean; - /** optional buffer as percentage of max width of bbox of window, defaults to amount less than max pixel size + 20% of width */ - bufferWidthMultiple?: number; -} /** * Returns cog-aware georaster at given url. Will not fetch raster values @@ -24,126 +10,3 @@ export const loadCog = async (url: string) => { if (process.env.NODE_ENV !== "test") console.log("loadCog", url); return geoblaze.parse(url); }; - -/** - * Returns georaster window (image subset) defined by options.windowBox, otherwise loads the whole raster - * windowBox is extended out to the nearest pixel edge to (in theory) avoid resampling. Assumes raster is in WGS84 degrees - * This function front loads the raster values, so subsequent geoblaze calls (e.g. sum) can be called sync - * @deprecated - * */ -export const loadCogWindow = async (url: string, options: CogOptions) => { - if (process.env.NODE_ENV !== "test") - console.log("loadCogWindow", url, "options:", JSON.stringify(options)); - - const georaster = await parseGeoraster(url); - // Default to meta parsed from raster - const { - windowBox = [ - georaster.xmin, - georaster.ymin, - georaster.xmax, - georaster.ymax, - ], - noDataValue = georaster.noDataValue || 0, - projection = georaster.projection || 4326, - bufferSmall = true, - bufferWidthMultiple = 0.2, - } = options; - - if (process.env.NODE_ENV !== "test") console.log(`using bbox ${windowBox}`); - - // Calculate window in geographic and image coordinates - const { image: finalWindow, bbox: finalBox } = ((box: BBox) => { - // Special case buffer window smaller than pixel - if (bufferSmall) { - // get largest pixel dimension - const maxResolution = Math.max( - georaster.pixelHeight, - georaster.pixelWidth, - ); - // Check if largest window dimension is smaller, or within .01 degrees of max pixel dimension - // If so, buffer to make up the difference - const diff = maxWidth(box) - maxResolution; - if (diff < 0.01) { - const radius = Math.abs(diff) + maxWidth(box) * bufferWidthMultiple; - const bufPoly = buffer(bboxPolygon(box), radius, { - units: "degrees", - }); - if (!bufPoly) throw new Error("Failed to buffer window"); - const bufBox = bbox(bufPoly); - return bboxToPixelEdge(bufBox, georaster); - } - } - - return bboxToPixelEdge(box, georaster); - })(windowBox); - - const rasterOptions = { - left: finalWindow.left, - top: finalWindow.top, - right: finalWindow.right, - bottom: finalWindow.bottom, - width: finalWindow.right - finalWindow.left, - height: finalWindow.bottom - finalWindow.top, - resampleMethod: "nearest", - }; - - // console.log("COG image options"); - // console.log(JSON.stringify(rasterOptions)); - - if (!georaster.getValues) - throw new Error( - "Missing getValues method, did you forget to load the raster via url?", - ); - const values = await georaster.getValues(rasterOptions); - - const xmin = finalBox[0]; - const ymax = finalBox[3]; - const pixelWidth = georaster.pixelWidth; - const pixelHeight = georaster.pixelHeight; - // - const metadata = { - noDataValue, - projection, - xmin, - ymax, - pixelWidth, - pixelHeight, - }; - // console.log("COG metadata"); - // console.log(metadata); - const raster = await parseGeoraster(values, metadata); - return raster; -}; - -/** - * Finds boundary of raster window in pixel coordinates given bbox. - * Extends out to nearest whole image pixel edge and returns both image - * and geographic coordinates at that edge. - */ -const bboxToPixelEdge = (bbox: number[], rasterMeta: any) => { - // COG window - // Image coordinates start in top left, which is 0, 0 and go down and to the right - // georaster - { left: 0, top: 0, right: 4000, bottom: 4000, width: 10, height: 10 } - - // Calculate whole window image coordinates - const image = { - left: Math.floor((bbox[0] - rasterMeta.xmin) / rasterMeta.pixelWidth), - bottom: Math.ceil((rasterMeta.ymax - bbox[1]) / rasterMeta.pixelHeight), - right: Math.ceil((bbox[2] - rasterMeta.xmin) / rasterMeta.pixelWidth), - top: Math.floor((rasterMeta.ymax - bbox[3]) / rasterMeta.pixelHeight), - }; - - // Geographic coordinates start in bottom left - // [xmin, ymin, xmax, ymax] - // [left, bottom, right, top] - - // Convert whole image coordinates back to geographic - const imageBbox = [ - rasterMeta.xmin + image.left * rasterMeta.pixelWidth, - rasterMeta.ymax - image.bottom * rasterMeta.pixelHeight, - rasterMeta.xmin + image.right * rasterMeta.pixelWidth, - rasterMeta.ymax - image.top * rasterMeta.pixelHeight, - ]; - return { image, bbox: imageBbox }; -}; diff --git a/packages/geoprocessing/src/dataproviders/flatgeobuf.test.e2e.ts b/packages/geoprocessing/src/dataproviders/flatgeobuf.test.e2e.ts index 58b80745de..508ebb3f59 100644 --- a/packages/geoprocessing/src/dataproviders/flatgeobuf.test.e2e.ts +++ b/packages/geoprocessing/src/dataproviders/flatgeobuf.test.e2e.ts @@ -1,5 +1,5 @@ import { expect, test } from "vitest"; -import { fgbFetchAll } from "./flatgeobuf.js"; +import { loadFgb } from "./flatgeobuf.js"; import canonicalize from "../util/canonicalize.js"; import { deserialize } from "flatgeobuf/lib/mjs/geojson.js"; @@ -8,8 +8,9 @@ import path from "node:path"; import { isFeatureCollection } from "../index.js"; test("flatgeobuf - local world fgb", async () => { - const str = canonicalize([ + const canonicalStr = canonicalize([ { + id: 0, // this is not in the data, but fgb client automatically adds it on deserialize as of v3.36.0 type: "Feature", properties: { name: "World boundary", @@ -30,9 +31,9 @@ test("flatgeobuf - local world fgb", async () => { }, ]); const url = "http://127.0.0.1:8080/data/in/world.fgb"; - const features = await fgbFetchAll(url); + const features = await loadFgb(url); expect(features.length).toEqual(1); - expect(canonicalize(features)).toEqual(str); + expect(canonicalize(features)).toEqual(canonicalStr); }); test("flatgeobuf - file countries fgb from disk", async () => { @@ -52,7 +53,7 @@ test("flatgeobuf - file countries fgb from disk", async () => { test("flatgeobuf - external world fgb", async () => { const url = "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/world-unstable.fgb"; - const features = await fgbFetchAll(url); + const features = await loadFgb(url); expect(features.length).toEqual(1); // console.log(JSON.stringify(features)) }, 20_000); diff --git a/packages/geoprocessing/src/dataproviders/flatgeobuf.ts b/packages/geoprocessing/src/dataproviders/flatgeobuf.ts index 9b4143b2e3..6b08ac8b9e 100644 --- a/packages/geoprocessing/src/dataproviders/flatgeobuf.ts +++ b/packages/geoprocessing/src/dataproviders/flatgeobuf.ts @@ -1,10 +1,16 @@ import { takeAsync } from "flatgeobuf/lib/mjs/streams/utils.js"; import { BBox, Feature, Geometry } from "../types/index.js"; -import "./fetchPolyfill.js"; import { deserialize } from "flatgeobuf/lib/mjs/geojson.js"; -export function fgBoundingBox(box: BBox) { +export interface FgBoundingBox { + minX: number; + maxX: number; + minY: number; + maxY: number; +} + +export function fgBoundingBox(box: BBox): FgBoundingBox { return { minX: box[0], maxX: box[2], @@ -13,13 +19,25 @@ export function fgBoundingBox(box: BBox) { }; } -/** Fetch features within bounding box and deserializes them, awaiting all of them before returning. - * Useful when running a spatial function on the whole set is faster than running - * one at a time as the deserialize generator provides them +/** + * Fetch features from flatgeobuf at url within bounding box + * Awaits all features before returning, rather than streaming them. + * @deprecated Use `loadCog` instead. */ export async function fgbFetchAll>( url: string, box?: BBox, +) { + return loadFgb(url, box); +} + +/** + * Fetch features from flatgeobuf at url that intersect with bounding box + * Awaits all features before returning, rather than streaming them. + */ +export async function loadFgb>( + url: string, + box?: BBox, ) { const fgBox = (() => { if (!box && !Array.isArray(box)) { @@ -30,12 +48,12 @@ export async function fgbFetchAll>( })(); if (process.env.NODE_ENV !== "test") - console.log("fgbFetchAll", `url: ${url}`, `box: ${JSON.stringify(fgBox)}`); + console.log("loadFgb", `url: ${url}`, `box: ${JSON.stringify(fgBox)}`); const features = (await takeAsync( deserialize(url, fgBox) as AsyncGenerator, )) as F[]; if (!Array.isArray(features)) - throw new Error("Unexpected result from fgbFetchAll"); + throw new Error("Unexpected result from loadFgb"); return features; } diff --git a/packages/geoprocessing/src/dataproviders/genClipLoader.ts b/packages/geoprocessing/src/dataproviders/genClipLoader.ts index 6e6527e710..175f2c9d4e 100644 --- a/packages/geoprocessing/src/dataproviders/genClipLoader.ts +++ b/packages/geoprocessing/src/dataproviders/genClipLoader.ts @@ -13,6 +13,7 @@ import { DatasourceClipOperation } from "../types/dataProcessor.js"; * Given a project client and 1 or more clip operations, returns a function that when called * loads clip features from their datasources that overlap with the feature polygon to clip. * Pass this function to genPreprocessor() and it will take care of the rest. + * @deprecated */ export const genClipLoader =

( project: P, diff --git a/packages/geoprocessing/src/dataproviders/getFeatures.test.ts b/packages/geoprocessing/src/dataproviders/getFeatures.test.ts index 3590175d16..a9f7034516 100644 --- a/packages/geoprocessing/src/dataproviders/getFeatures.test.ts +++ b/packages/geoprocessing/src/dataproviders/getFeatures.test.ts @@ -47,68 +47,4 @@ describe("getFeatures", () => { ); expect(feats.length).toEqual(1050); }, 30_000); - - test("getFeatures - fetch subdivided with bbox crossing antimeridian greater than 180", async () => { - const eezDatasource = project.getExternalVectorDatasourceById( - "global-clipping-eez-land-union", - ); - if (!eezDatasource) - throw new Error("missing global eez land union datasource"); - const feats = await getFeatures( - eezDatasource, - project.getDatasourceUrl(eezDatasource, { format: "fgb" }), - { - bbox: [170.3874, -15.761_472, 186.443_15, -14.240_49], - }, - ); - // toJsonFile(featureCollection(feats), "SUB_FIJI_OUTSIDE_SUB.json"); - expect(feats.length).toEqual(4); // Only returns left side of antimeridian - }, 30_000); - - test("getFeatures - fetch subdivided with bbox crossing antimeridian within 180", async () => { - const eezDatasource = project.getExternalVectorDatasourceById( - "global-clipping-eez-land-union", - ); - if (!eezDatasource) - throw new Error("missing global eez land union datasource"); - const feats = await getFeatures( - eezDatasource, - project.getDatasourceUrl(eezDatasource, { format: "fgb" }), - { - bbox: [-180, -15.706_455_006_156_576, 180, -14.274_583_217_973_047], - }, - ); - // toJsonFile(featureCollection(feats), "SUB_FIJI_INSIDE_SUB.json"); - expect(feats.length).toEqual(29); // Returns eez features across entire world crossing - }, 30_000); - - // The same behavior is observed when using a flatgeobuf datasource, they just take a lot more time to run - - test("getFeatures - fetch flatgeobuf with bbox crossing antimeridian outside 180 returns long way", async () => { - const fgbDatasourceId = - project.getVectorDatasourceById("global-eez-mr-v12"); - const feats = await getFeatures( - fgbDatasourceId, - project.getDatasourceUrl(fgbDatasourceId, { format: "fgb" }), - { - bbox: [170.3874, -15.761_472, 186.443_15, -14.240_49], - }, - ); - // toJsonFile(featureCollection(feats), "SUB_FIJI_OUTSIDE_FGB.json"); - expect(feats.length).toEqual(4); // Returns eez features across entire world crossing - }, 90_000); - - test("getFeatures - fetch flatgeobuf with bbox crossing antimeridian within 180 returns long way", async () => { - const fgbDatasourceId = - project.getVectorDatasourceById("global-eez-mr-v12"); - const feats = await getFeatures( - fgbDatasourceId, - project.getDatasourceUrl(fgbDatasourceId, { format: "fgb" }), - { - bbox: [-180, -15.706_455_006_156_576, 180, -14.274_583_217_973_047], - }, - ); - // toJsonFile(featureCollection(feats), "SUB_FIJI_INSIDE_FGB.json"); - expect(feats.length).toEqual(25); // Returns 50 eez features because bbox spans the world - }, 90_000); }); diff --git a/packages/geoprocessing/src/dataproviders/getFeatures.ts b/packages/geoprocessing/src/dataproviders/getFeatures.ts index 80724e3c52..013e704d7f 100644 --- a/packages/geoprocessing/src/dataproviders/getFeatures.ts +++ b/packages/geoprocessing/src/dataproviders/getFeatures.ts @@ -3,7 +3,7 @@ import { isInternalVectorDatasource, VectorDataSource, } from "../datasources/index.js"; -import { fgbFetchAll } from "./flatgeobuf.js"; +import { loadFgb } from "./flatgeobuf.js"; import { ExternalVectorDatasource, InternalVectorDatasource, @@ -30,7 +30,7 @@ export async function getFeatures>( let features: F[] = []; if (isInternalVectorDatasource(datasource)) { - features = await fgbFetchAll(url, bboxFilter); + features = await loadFgb(url, bboxFilter); } else if ( isExternalVectorDatasource(datasource) && datasource.formats && @@ -55,7 +55,7 @@ export async function getFeatures>( datasource.formats.includes("fgb") ) { // fallback to flatgeobuf - features = await fgbFetchAll(url, bboxFilter); + features = await loadFgb(url, bboxFilter); } // filter by property value diff --git a/packages/geoprocessing/src/dataproviders/getFeaturesForSketchBBoxes.ts b/packages/geoprocessing/src/dataproviders/getFeaturesForSketchBBoxes.ts new file mode 100644 index 0000000000..470b035bcf --- /dev/null +++ b/packages/geoprocessing/src/dataproviders/getFeaturesForSketchBBoxes.ts @@ -0,0 +1,73 @@ +import { + BBox, + Feature, + MultiPolygon, + Polygon, + Sketch, + SketchCollection, +} from "../types/index.js"; +import { loadFgb } from "./flatgeobuf.js"; +import { toSketchArray } from "../helpers/index.js"; +import md5 from "spark-md5"; +import { bbox } from "@turf/turf"; +import { splitBBoxAntimeridian } from "../toolbox/antimeridian.js"; + +/** + * Loads features from a FlatGeobuf referenced by URL, which intersect the + * bounding boxes of each individual sketch in a SketchCollection, or a single + * Sketch. + * + * In the case of a SketchCollection, it is possible that duplicate features may + * be fetched in the case of overlapping bounding boxes or very large features + * that span multiple bounding boxes. This function will de-dupe those features. + * Ideally, there is a feature.id property set. If not the caller can provide a + * uniqueIdProperty to de-dupe features. If neither is provided, a hash of the + * feature coordinates will be used. + * + * If feature.id is not available, and uniqueIdProperty is not provided, there + * is the potential for elimination of features that are geometrically identical + * but have different properties. + * + * @param sketch Sketch or SketchCollection + * @param fgbUrl FlatGeobuf location + * @param uniqueIdProperty Used to de-dupe features when feature.id is not + * available + * @returns array of Features + */ +export async function getFeaturesForSketchBBoxes( + sketch: Sketch | SketchCollection, + fgbUrl: string, + options: { uniqueIdProperty?: string } = {}, +) { + const { uniqueIdProperty } = options; + const features: Feature[] = []; + const addedIdentifiers = new Set(); + await Promise.all( + toSketchArray(sketch).map(async (sketch) => { + const box = bbox(sketch); + const splitBoxes = splitBBoxAntimeridian(box) as BBox[]; + const results = ( + await Promise.all( + splitBoxes.map(async (box) => { + return await loadFgb>(fgbUrl, box); + }), + ) + ).flat(); + for (const feature of results) { + let id = feature.id?.toString(); + if (!id) { + if (uniqueIdProperty) { + id = feature.properties?.[uniqueIdProperty]; + } else { + id = md5.hash(JSON.stringify(feature.geometry.coordinates)); + } + } + if (id && !addedIdentifiers.has(id)) { + addedIdentifiers.add(id); + features.push(feature); + } + } + }), + ); + return features; +} diff --git a/packages/geoprocessing/src/dataproviders/index.ts b/packages/geoprocessing/src/dataproviders/index.ts index efa188b104..050426217f 100644 --- a/packages/geoprocessing/src/dataproviders/index.ts +++ b/packages/geoprocessing/src/dataproviders/index.ts @@ -1,5 +1,5 @@ -// Purposefully not exported from top-level to avoid mjs import issues, import directly export * from "./cog.js"; export * from "./flatgeobuf.js"; export * from "./getFeatures.js"; +export * from "./getFeaturesForSketchBBoxes.js"; export * from "./genClipLoader.js"; diff --git a/packages/geoprocessing/src/datasources/VectorDataSource.ts b/packages/geoprocessing/src/datasources/VectorDataSource.ts index d27e58c3cf..dd5273df21 100644 --- a/packages/geoprocessing/src/datasources/VectorDataSource.ts +++ b/packages/geoprocessing/src/datasources/VectorDataSource.ts @@ -145,6 +145,7 @@ export class VectorDataSource> { private tree: RBushIndex; private dissolvedFeatureCache?: DissolvedFeatureCache; private needsRewinding?: boolean; + private metadataFetched: boolean = false; /** * VectorDataSource aids client-side or lambda based geoprocessing tools fetch @@ -169,7 +170,6 @@ export class VectorDataSource> { url: this.url, options: this.options, }); - this.fetchMetadata(); } static clearRegisteredSources() { @@ -491,6 +491,9 @@ export class VectorDataSource> { bbox: BBox, unionProperty?: string, ): Promise> { + if (!this.metadataFetched) { + this.fetchMetadata(); + } const features = await this.fetch(bbox); if (features.length === 0) { return fc([]); diff --git a/packages/geoprocessing/src/datasources/global.ts b/packages/geoprocessing/src/datasources/global.ts index a2af98a260..3079500889 100644 --- a/packages/geoprocessing/src/datasources/global.ts +++ b/packages/geoprocessing/src/datasources/global.ts @@ -1,4 +1,10 @@ -import { Datasource, Feature, Polygon } from "../types/index.js"; +import { groupBy } from "../helpers/groupBy.js"; +import { + ExternalRasterDatasource, + ExternalVectorDatasource, + Feature, + Polygon, +} from "../types/index.js"; export type OsmLandFeature = Feature; export type EezLandUnion = Feature; @@ -7,7 +13,10 @@ export type EezLandUnion = Feature; * Definitive list of global datasources for geoprocessing framework * @todo: fetch from global-datasources repo */ -export const globalDatasources: Datasource[] = [ +export const globalDatasources: ( + | ExternalVectorDatasource + | ExternalRasterDatasource +)[] = [ { datasourceId: "global-clipping-osm-land", geo_type: "vector", @@ -61,3 +70,8 @@ export const globalDatasources: Datasource[] = [ precalc: false, }, ]; + +export const globalDatasourcesById = groupBy( + globalDatasources, + (ds) => ds.datasourceId, +); diff --git a/packages/geoprocessing/src/helpers/index.ts b/packages/geoprocessing/src/helpers/index.ts index c57c1933ee..7821bdb7c3 100644 --- a/packages/geoprocessing/src/helpers/index.ts +++ b/packages/geoprocessing/src/helpers/index.ts @@ -1,6 +1,5 @@ export * from "./bboxOverlap.js"; export * from "./chunk.js"; -export * from "./clip.js"; export * from "./feature.js"; export * from "./geo.js"; export * from "./groupBy.js"; diff --git a/packages/geoprocessing/src/helpers/metricGroup.ts b/packages/geoprocessing/src/helpers/metricGroup.ts index b6e23b8354..681acfe4b5 100644 --- a/packages/geoprocessing/src/helpers/metricGroup.ts +++ b/packages/geoprocessing/src/helpers/metricGroup.ts @@ -2,44 +2,68 @@ import { MetricGroup } from "../types/metricGroup.js"; import { keyBy } from "./keyBy.js"; /** - * Returns the top-level objective assigned for the given MetricGroup. - * If a classID is also passed, returns the objective ID for that class within the metric group */ + * Returns the objectiveId assigned to the given MetricGroup. + * If classId provided, returns the objective ID assigned to data class with that classId, else fallback to metricGroup objectiveId. + * @param metricGroup the metricGroup to get the objective for + * @param classId the classId to get the objective for + * @returns objectiveId + * @throws if data class does not exist with classId + * @throws if no objectiveId found for metricGroup or its class + */ export const getMetricGroupObjectiveId = ( metricGroup: MetricGroup, classId?: string, -) => { - if (metricGroup.objectiveId) return metricGroup.objectiveId; - +): string => { if (classId) { const classesByName = keyBy( metricGroup.classes, (curClass) => curClass.classId, ); - const classObjectiveId = classesByName[classId].objectiveId; - if (classObjectiveId) return classObjectiveId; + const classObjective = classesByName[classId]; + if (!classObjective) { + throw new Error( + `Data class with classId = ${classId} not found in metricGroup ${metricGroup.metricId}`, + ); + } + if (classObjective.objectiveId) { + return classObjective.objectiveId; // return class level objectiveId if available + } + } + if (!metricGroup.objectiveId) { + throw new Error( + `No objectiveId found for metricGroup ${metricGroup.metricId} or its class ${classId}`, + ); } - throw new Error(`Expected objectiveId for metricGroup or class ${classId}`); + return metricGroup.objectiveId!; // fallback to metricGroup objectiveId }; -/** Returns array of all objective IDs configured for the given MetricGroup. - * If a class does not have an objectiveId assigned, then it gets the top-level - * objectiveId +/** + * Returns array of objective IDs for the given MetricGroup. + * If at least one class has an objectiveId assigned, then it returns those, missing classes with no objectiveId get the top-level objectiveId + * If no class-level objectives are found, then it returns the top-level objectiveId + * If no objectives are found, returns an empty array + * @param metricGroup the metricGroup to get the objectives for + * @returns array of objectiveIds */ export const getMetricGroupObjectiveIds = (metricGroup: MetricGroup) => { const classIds = metricGroup.classes.reduce( (idsSoFar, curClass) => { return curClass.objectiveId ? idsSoFar.concat(curClass.objectiveId) - : idsSoFar; + : idsSoFar.concat(metricGroup.objectiveId || []); }, [], ); - // add top-level objective if also defined - const finalIds = metricGroup.objectiveId - ? [metricGroup.objectiveId, ...classIds] - : classIds; + // If at least one class has an objectiveId, return those + if (classIds.length > 0) { + return [...new Set(classIds)]; // deduplicate + } + + // fallback to top-level objectiveId + if (metricGroup.objectiveId) { + return [metricGroup.objectiveId]; + } - // deduplicate - return [...new Set(finalIds)]; + return []; // no objectives found }; diff --git a/packages/geoprocessing/src/helpers/number.ts b/packages/geoprocessing/src/helpers/number.ts index 26ad532645..ebb67f4ecc 100644 --- a/packages/geoprocessing/src/helpers/number.ts +++ b/packages/geoprocessing/src/helpers/number.ts @@ -3,21 +3,51 @@ export interface RoundDecimalOptions { keepSmallValues?: boolean; } -/** Rounds a number to a fixed precision */ +/** + * Rounds number to a fixed number of decimals + * @param value Value to round + * @param decimals Number of digits after the decimal point to keep + * @param options.keepSmallValues If true, will keep any small value as-is which would be rounded to 0, defaults to false + * @returns rounded number + */ export const roundDecimal = ( /** Value to round */ value: number, /** Number of digits after the decimal point to keep */ decimals = 1, - options: RoundDecimalOptions = { keepSmallValues: false }, + options: RoundDecimalOptions = {}, ) => { + const { keepSmallValues = false } = options; const roundedValue = Number( Math.round(Number.parseFloat(`${value}e${decimals}`)) + `e-${decimals}`, ); - return options.keepSmallValues && value && !roundedValue - ? value - : roundedValue; + return keepSmallValues && value && !roundedValue ? value : roundedValue; +}; + +/** + * Rounds number to a fixed number of decimals, then formats as a human readable string + * @param value Value to round + * @param decimals Number of digits after the decimal point to keep + * @param options.keepSmallValues If true, will keep any small value as-is which would be rounded to 0, defaults to false + * @returns rounded number as a human readable string + */ +export const roundDecimalFormat = ( + /** Value to round */ + value: number, + /** Number of digits after the decimal point to keep */ + decimals = 1, + options: RoundDecimalOptions = {}, +) => { + const NumberFormatter = new Intl.NumberFormat("en", { style: "decimal" }); + return NumberFormatter.format(roundDecimal(value, decimals, options)); +}; + +/** Formats number to string, if less than zero will leave as-is, otherwise will format as large number */ +export const numberFormat = (val: number) => { + const NumberFormatter = new Intl.NumberFormat("en", { style: "decimal" }); + + return val < 0 ? `${val}` : NumberFormatter.format(val); }; export interface PercentEdgeOptions { @@ -48,12 +78,7 @@ export interface PercentEdgeOptions { */ export const percentWithEdge = ( val: number, - options: PercentEdgeOptions = { - digits: 1, - digitsIfMatchLower: 0, - lower: 0.001, - lowerBound: 0, - }, + options: PercentEdgeOptions = {}, ) => { const { digits = 1, @@ -119,7 +144,7 @@ export const percentGoalWithEdge = ( }); }; -/** Formats number to string, rounding decimal to number of digits, with special handling of minimum bound */ +/** Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value */ export const roundLower = (val: number, { lower } = { lower: 1 }) => { const NumberFormatter = new Intl.NumberFormat("en", { style: "decimal" }); diff --git a/packages/geoprocessing/src/helpers/sketch.ts b/packages/geoprocessing/src/helpers/sketch.ts index 6e387b76bc..bd6e576688 100644 --- a/packages/geoprocessing/src/helpers/sketch.ts +++ b/packages/geoprocessing/src/helpers/sketch.ts @@ -79,7 +79,30 @@ export function getJsonUserAttribute( } } -/** Helper to convert a Sketch or SketchCollection to a Sketch array, maintaining geometry type */ +/** + * Converts array of sketches to an array of their SketchProperties + */ +export function toSketchPropertiesArray( + sketchArray: Sketch[] | NullSketch[], +): SketchProperties[] { + return sketchArray.map((s) => s.properties); +} + +/** + * Returns SketchProperties for each child sketch in a SketchCollection + */ +export function toChildProperties( + sketchCollection: SketchCollection, +): SketchProperties[] { + return sketchCollection.features.map((sketch) => sketch.properties); +} + +/** + * Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type + * Useful for putting in a consistent form that can be iterated over + * @param input sketch or sketch collection + * @returns array of sketches, if input is a sketch collection then it is the child sketches + */ export function toSketchArray( input: Sketch | SketchCollection, ): Sketch[] { @@ -316,7 +339,20 @@ export const genSketch = ( ]) as unknown as Feature, name = `sketch-${uuid()}`, id = uuid(), - userAttributes = [], + userAttributes = [ + { + label: "Type of Sketch", + fieldType: "ChoiceField", + exportId: "TYPE_OF_SKETCH", + value: "sample", + }, + { + label: "Notes", + fieldType: "TextArea", + exportId: "NOTES", + value: "This is a sample sketch", + }, + ], sketchClassId = uuid(), createdAt = new Date().toISOString(), updatedAt = new Date().toISOString(), diff --git a/packages/geoprocessing/src/helpers/units.ts b/packages/geoprocessing/src/helpers/units.ts index 9fa8eab634..5e01bea005 100644 --- a/packages/geoprocessing/src/helpers/units.ts +++ b/packages/geoprocessing/src/helpers/units.ts @@ -1,7 +1,17 @@ +/** + * Converts value from square meters to square miles + * @param value in square meters + * @returns value in square miles + */ export function squareMeterToMile(value: number) { return value / 2_589_988.110_336; } +/** + * Converts value from square meters to square kilometers + * @param value in square meters + * @returns value in square kilometers + */ export function squareMeterToKilometer(value: number) { return value / 1000 ** 2; } diff --git a/packages/geoprocessing/src/i18n/i18nAsync.ts b/packages/geoprocessing/src/i18n/i18nAsync.ts index 7203dad006..e091b884e5 100644 --- a/packages/geoprocessing/src/i18n/i18nAsync.ts +++ b/packages/geoprocessing/src/i18n/i18nAsync.ts @@ -64,23 +64,30 @@ export function createI18nAsyncInstance( // Load translations let baseLangResources = {}; try { - const baseLangToLoadPath = `${baseLangPath}/${langToLoad}/${namespace}.json`; - const curModule = baseLangModules[baseLangToLoadPath]; - baseLangResources = JSON.parse( - ((await curModule()) as unknown as any).default, - ); + if (isDefault) { + // Do not load if default language, let components render strings directly + baseLangResources = {}; + } else { + const baseLangToLoadPath = `${baseLangPath}/${langToLoad}/${namespace}.json`; + const curModule = baseLangModules[baseLangToLoadPath]; + baseLangResources = JSON.parse( + ((await curModule()) as unknown as any).default, + ); + } } catch { console.info(`Warning: failed to find base lang resource.`); } - console.log("language baseLangResources", baseLangResources); + // console.log("language baseLangResources", baseLangResources); let langResources = {}; if (langPath !== undefined) { try { if (isDefault) { + // Do not load if default language, let components render strings directly langResources = {}; } else { const langToLoadPath = `${langPath}/${langToLoad}/${namespace}.json`; + console.log("language langToLoadPath", langToLoadPath); const curModule = langModules[langToLoadPath]; langResources = JSON.parse( ((await curModule()) as unknown as any).default, @@ -90,8 +97,8 @@ export function createI18nAsyncInstance( console.info(`Warning: failed to find lang resource.`); } } - console.log("language langResources", langResources); - console.log("language extraTerms", extraTerms); + // console.log("language langResources", langResources); + // console.log("language extraTerms", extraTerms); // Return merged translations if (isDefault) { diff --git a/packages/geoprocessing/src/i18n/lang/en/translation.json b/packages/geoprocessing/src/i18n/lang/en/translation.json index 07c9ec5c9e..45d4d88057 100644 --- a/packages/geoprocessing/src/i18n/lang/en/translation.json +++ b/packages/geoprocessing/src/i18n/lang/en/translation.json @@ -77,10 +77,8 @@ "Shoreline": "Shoreline", "Show by MPA": "Show by MPA", "Show by Sketch": "Show by Sketch", - "SimpleCard ecoregion message": "The following ecoregions are nearby: <2>", - "SimpleCard sketch size message": "This sketch is <2>{{area}} square kilometers", - "SimpleCard temperature message": "The present day sea surface temperature within this sketch is <2>{{minTemp}} - {{maxTemp}}°C.", - "SimpleCard title": "Zone Report", + "SimpleCard sketch size message": "This {{sketchStr}} is {{areaString}} square kilometers.", + "SimpleCard title": "Simple Report", "Size": "Size", "SizeCard - introduction": "national waters extend from the shoreline out to 200 nautical miles, known as the Exclusive Economic Zone (EEZ). This report summarizes offshore plan overlap with the EEZ and other boundaries within it, measuring progress towards achieving % targets for each boundary.", "SizeCard - learn more": "<0> This report summarizes the size and proportion of this plan within these boundaries.

If sketch boundaries within a plan overlap with each other, the overlap is only counted once.

", @@ -90,5 +88,7 @@ "Viability": "Viability", "Within Plan": "Within Plan", "km²": "km²", + "sketch": "sketch", + "sketch collection": "sketch collection", "units": "units" } diff --git a/packages/geoprocessing/src/index.ts b/packages/geoprocessing/src/index.ts index 08429bab46..de25715cce 100644 --- a/packages/geoprocessing/src/index.ts +++ b/packages/geoprocessing/src/index.ts @@ -7,6 +7,7 @@ export * from "./aws/index.js"; export * from "./datasources/index.js"; +export * from "./dataproviders/index.js"; export * from "./helpers/index.js"; export * from "./iucn/index.js"; export * from "./metrics/index.js"; diff --git a/packages/geoprocessing/src/metrics/helpers.test.ts b/packages/geoprocessing/src/metrics/helpers.test.ts index b74b73ebaa..f828346450 100644 --- a/packages/geoprocessing/src/metrics/helpers.test.ts +++ b/packages/geoprocessing/src/metrics/helpers.test.ts @@ -12,7 +12,11 @@ import { MetricProperties, } from "./helpers.js"; import { NullSketch, NullSketchCollection, Metric } from "../types/index.js"; -import { hasOwnProperty, toPercentMetric } from "../../client-core.js"; +import { + hasOwnProperty, + toPercentMetric, + toSketchPropertiesArray, +} from "../../client-core.js"; import deepEqual from "fast-deep-equal"; const metricName = "metric1"; @@ -391,7 +395,11 @@ describe("flattenSketchAllClass", () => { }, ]; - const rows = flattenBySketchAllClass(metrics, CLASSES, sketches); + const rows = flattenBySketchAllClass( + metrics, + CLASSES, + toSketchPropertiesArray(sketches), + ); expect(rows).toEqual(answer); }); diff --git a/packages/geoprocessing/src/metrics/helpers.ts b/packages/geoprocessing/src/metrics/helpers.ts index edc382e086..2ebb354832 100644 --- a/packages/geoprocessing/src/metrics/helpers.ts +++ b/packages/geoprocessing/src/metrics/helpers.ts @@ -11,6 +11,7 @@ import { MetricIdTypes, GroupMetricSketchAgg, MetricDimensions, + SketchProperties, } from "../types/index.js"; import { @@ -322,14 +323,19 @@ const classSortAlphaDisplay = (a: DataClass, b: DataClass) => { /** * Matches numerator metrics with denominator metrics and divides their value, - * returning a new array of percent metrics. If denominator metric has value of 0, returns NaN + * returning a new array of percent metrics. * Matches on the optional idProperty given, otherwise defaulting to classId * Deep copies and maintains all other properties from the numerator metric + * If denominator metric has value of 0, returns NaN + * NaN allows downstream consumers to understand this isn't just any 0. + * It's an opportunity to tell the user that no matter where they put their sketch, there is no way for the value to be more than zero. + * For example, the ClassTable component looks for `NaN` metric values and will automatically display 0%, + * along with an informative popover explaining that no data class features are within the current geography. * @param numerators array of metrics, to be used as numerators (often sketch metrics) * @param denominators array of metrics, to be used as denominators (often planning region metrics) * @param metricIdOverride optional metricId value to assign to outputted metrics * @param idProperty optional id property to match metric with total metric, defaults to classId - * @returns Metric[] of percent values + * @returns Metric[] of percent values or NaN if denominator was 0 */ export const toPercentMetric = ( numerators: Metric[], @@ -429,14 +435,14 @@ export const nestMetrics = ( * where each object contains sketch id, sketch name, and all metric values for each class * @param metrics List of metrics, expects one metric per sketch and class combination * @param classes Data classes represented in metrics - * @param sketches Sketches contained in metrics + * @param sketchProperties SketchProperties of sketches represented in metrics * @param sortFn Function to sort class configs using Array.sort (defaults to alphabetical by display name) * @returns An array of objects with flattened sketch metrics */ export const flattenBySketchAllClass = ( metrics: Metric[], classes: DataClass[], - sketches: Sketch[] | NullSketch[], + sketchProperties: SketchProperties[], sortFn?: (a: DataClass, b: DataClass) => number, ): Record[] => { const metricsByClassId = groupBy( @@ -446,7 +452,7 @@ export const flattenBySketchAllClass = ( const sketchRows: Record[] = []; - for (const curSketch of sketches) { + for (const curSketchProperties of sketchProperties) { // For current sketch, transform classes into an object mapping classId to its one metric value const classMetricAgg = classes .sort(sortFn || classSortAlphaDisplay) @@ -461,14 +467,14 @@ export const flattenBySketchAllClass = ( // Map current classId to extracted metric value aggSoFar[curClass.classId] = - sketchMetricsById[curSketch.properties.id].value; + sketchMetricsById[curSketchProperties.id].value; return aggSoFar; }, {}); sketchRows.push({ - sketchId: curSketch.properties.id, - sketchName: curSketch.properties.name, + sketchId: curSketchProperties.id, + sketchName: curSketchProperties.name, ...classMetricAgg, }); } diff --git a/packages/geoprocessing/src/project/ProjectClientBase.ts b/packages/geoprocessing/src/project/ProjectClientBase.ts index 69b4ae1bd5..95aff3c4d9 100644 --- a/packages/geoprocessing/src/project/ProjectClientBase.ts +++ b/packages/geoprocessing/src/project/ProjectClientBase.ts @@ -179,6 +179,21 @@ export class ProjectClientBase implements ProjectClientInterface { : `https://gp-${this._package.name}-datasets.s3.${this._geoprocessing.region}.amazonaws.com/`; } + public getFgbPath( + ds: + | Datasource + | VectorDatasource + | InternalVectorDatasource + | ExternalVectorDatasource + | RasterDatasource + | ExternalRasterDatasource + | InternalRasterDatasource + | ImportRasterDatasourceConfig + | ImportVectorDatasourceConfig, + ) { + return `data/dist/${ds.datasourceId}.fgb`; + } + public getDatasourceUrl( ds: | Datasource @@ -250,7 +265,7 @@ export class ProjectClientBase implements ProjectClientInterface { ); } - // DATSOURCES // + // DATASOURCES // /** Returns Datasource given datasourceId */ public getDatasourceById(datasourceId: string): Datasource { @@ -356,7 +371,7 @@ export class ProjectClientBase implements ProjectClientInterface { return getObjectiveById(objectiveId, this._objectives); } - // METRICS // + // METRIC GROUPS // /** Returns MetricGroup given metricId, optional translating display name, given i18n t function */ public getMetricGroup(metricId: string, t?: TFunction): MetricGroup { @@ -382,7 +397,16 @@ export class ProjectClientBase implements ProjectClientInterface { return `${mg.metricId}Perc`; } - /** Returns all Objectives for MetricGroup, optionally translating short description, given i18n t function */ + /** + * Returns Objectives for MetricGroup + * If at least one class has an objective assigned, then it returns those, missing classes with no objective get the top-level objective + * If no class-level objectives are found, then it returns the top-level objective + * If no objectives are found, returns an empty array + * Given i18n t function it will also translate the short description + * @param metricGroup + * @param t + * @returns + */ public getMetricGroupObjectives( metricGroup: MetricGroup, t?: TFunction, @@ -397,6 +421,56 @@ export class ProjectClientBase implements ProjectClientInterface { })); } + /** + * Returns datasource for given MetricGroup. + * If classId is provided, returns class-level datasource if assigned, otherwise falls back to top-level metricGroup datasource + * @param metricGroup - metricGroup to get datasource for + * @param options.classId - metricGroup class to get datasource for + * @returns the datasource object + * @throws if class does not exist in metric group with given classId + * @throws if datasourceId is missing for metricGroup and class + */ + public getMetricGroupDatasource( + metricGroup: MetricGroup, + options: { classId?: string } = {}, + ): Datasource { + const { classId } = options; + if (classId) { + const dataClass = metricGroup.classes.find((c) => c.classId === classId); + if (dataClass && dataClass.datasourceId) + return this.getDatasourceById(dataClass.datasourceId); + } + + if (!metricGroup.datasourceId) + throw new Error( + `Could not find datasourceId for metric group ${metricGroup.metricId} or its class ${classId}, please add one`, + ); + return this.getDatasourceById(metricGroup.datasourceId); + } + + /** + * Returns classKey for given metric group, class-level if available, otherwise metricGroup level if not + * @param metricGroup - metricGroup to search for class and classKey + * @param options.classId - optional data class ID to specifically get classKey for + * @returns the classKey name or undefined + * @throws if class does not exist in metric group with given classId + */ + public getMetricGroupClassKey( + metricGroup: MetricGroup, + options: { classId?: string } = {}, + ) { + const { classId } = options; + if (classId) { + const dataClass = metricGroup.classes.find((c) => c.classId === classId); + if (!dataClass) + throw new Error( + `Class not found in metricGroup ${metricGroup.metricId} with classId ${classId}`, + ); + if (dataClass.classKey) return dataClass.classKey; + } + return metricGroup.classKey; + } + /** * Returns precalc metrics from precalc.json. Optionally filters down to specific metricGroup and geographyId * @param mg MetricGroup to get precalculated metrics for diff --git a/packages/geoprocessing/src/testing/fixtures/squareSketches.ts b/packages/geoprocessing/src/testing/fixtures/squareSketches.ts index 696bf4c5b7..066b1ac0fd 100644 --- a/packages/geoprocessing/src/testing/fixtures/squareSketches.ts +++ b/packages/geoprocessing/src/testing/fixtures/squareSketches.ts @@ -84,6 +84,15 @@ const poly2 = polygon([ [1, 1], ], ]); +const poly2Inner = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); const sketch2 = genSampleSketch(poly2.geometry, "sketch2"); // fully outside outer @@ -158,6 +167,7 @@ export default { sketch1, sketchMultiPoly1, poly2, + poly2Inner, sketch2, poly3, sketch3, diff --git a/packages/geoprocessing/src/toolbox/split.test.ts b/packages/geoprocessing/src/toolbox/antimeridian.test.ts similarity index 75% rename from packages/geoprocessing/src/toolbox/split.test.ts rename to packages/geoprocessing/src/toolbox/antimeridian.test.ts index b86c2ffbea..56204dfd93 100644 --- a/packages/geoprocessing/src/toolbox/split.test.ts +++ b/packages/geoprocessing/src/toolbox/antimeridian.test.ts @@ -1,7 +1,11 @@ import { describe, test, expect } from "vitest"; -import { splitFeatureAntimeridian, splitSketchAntimeridian } from "./split.js"; -import { feature } from "@turf/turf"; +import { + splitFeatureAntimeridian, + splitSketchAntimeridian, + splitBBoxAntimeridian, +} from "./antimeridian.js"; +import { bbox, feature, polygon } from "@turf/turf"; import { Feature, Polygon, Sketch } from "../types/index.js"; import { toFeaturePolygonArray } from "../helpers/index.js"; import { @@ -181,3 +185,43 @@ describe("splitSketch", () => { } }); }); + +describe("splitBBoxAntimeridian", () => { + test("splitBBoxAntimeridian bbox crosses antimeridian at -180", async () => { + // This poly extends 10 degrees on each side of the antimeridian at -180 + const poly = polygon([ + [ + [-170, 10], + [-190, 10], + [-190, 0], + [-170, 0], + [-170, 10], + ], + ]); + const polyBox = bbox(poly); + const boxes = splitBBoxAntimeridian(polyBox); + + expect(boxes.length).toBe(2); + expect(boxes[0]).toEqual([170, 0, 180, 10]); // portion extending below -180 shifted to be less than 180 + expect(boxes[1]).toEqual([-180, 0, -170, 10]); // portion within -180 left as-is + }); + + test("splitBBoxAntimeridian bbox crosses antimeridian at +180", async () => { + // This poly extends 10 degrees on each side of the antimeridian at -180 + const poly = polygon([ + [ + [170, 10], + [190, 10], + [190, 0], + [170, 0], + [170, 10], + ], + ]); + const polyBox = bbox(poly); + const boxes = splitBBoxAntimeridian(polyBox); + + expect(boxes.length).toBe(2); + expect(boxes[0]).toEqual([170, 0, 180, 10]); // portion within 180 left as-is + expect(boxes[1]).toEqual([-180, 0, -170, 10]); // portion extending beyond 180 shifted to be greater than -180 + }); +}); diff --git a/packages/geoprocessing/src/toolbox/split.ts b/packages/geoprocessing/src/toolbox/antimeridian.ts similarity index 54% rename from packages/geoprocessing/src/toolbox/split.ts rename to packages/geoprocessing/src/toolbox/antimeridian.ts index 5c231e6819..0c24ffd51d 100644 --- a/packages/geoprocessing/src/toolbox/split.ts +++ b/packages/geoprocessing/src/toolbox/antimeridian.ts @@ -7,14 +7,17 @@ import { Polygon, Sketch, SketchCollection, + BBox, } from "../types/index.js"; import { cleanCoords } from "./cleanCoords.js"; import splitGeojson from "geojson-antimeridian-cut"; /** - * Splits a Feature or FeatureCollection on the 180 degree antimeridian - * @param feature - * @returns + * Splits a Feature or FeatureCollection on the 180 degree antimeridian. + * The bbox property of the result will have longitude coordinates that are + * shifted/normalized to be within the range of -180 to 180. + * @param feature the feature or feature collection to split + * @returns the split feature or feature collection */ export function splitFeatureAntimeridian< G extends Geometry = Polygon | MultiPolygon, @@ -37,8 +40,10 @@ export function splitFeatureAntimeridian< /** * Splits a Sketch or SketchCollection on the 180 degree antimeridian - * @param sketch - * @returns + * The bbox property of the result will have longitude coordinates that are + * shifted/normalized to be within the range of -180 to 180. + * @param sketch the sketch or sketch collection to split + * @returns the split sketch or sketch collection */ export function splitSketchAntimeridian( sketch: Sketch | SketchCollection, @@ -53,3 +58,38 @@ export function splitSketchAntimeridian( splitFeatures.bbox = bbox(cleanFeatures); return splitFeatures; } + +/** + * If bounding box crosses antimeridian (and extends outside the range of -180 to 180), + * split it into two bounding boxes at the antimeridian. + * @param bbox the bounding box to split + * @returns array of one or two bounding boxes + */ +export function splitBBoxAntimeridian(bbox: BBox) { + const [minX, minY, maxX, maxY] = cleanBBox(bbox); + + // If the normalized bbox crosses the antimeridian, splitting is needed + if (minX > maxX) { + return [ + [minX, minY, 180, maxY], + [-180, minY, maxX, maxY], + ]; + } else { + return [bbox]; + } +} + +/** + * Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian + * @param bbox the bounding box to clean + * @returns the cleaned bounding box + */ +export function cleanBBox(bbox: BBox) { + const [minX, minY, maxX, maxY] = bbox; + + // Normalize longitudes to the [-180, 180] range if needed + const normMinX = ((((minX + 180) % 360) + 360) % 360) - 180; + const normMaxX = ((((maxX + 180) % 360) + 360) % 360) - 180; + + return [normMinX, minY, normMaxX, maxY]; +} diff --git a/packages/geoprocessing/src/toolbox/area.ts b/packages/geoprocessing/src/toolbox/area.ts index 05f1e737e9..dd9d1e1181 100644 --- a/packages/geoprocessing/src/toolbox/area.ts +++ b/packages/geoprocessing/src/toolbox/area.ts @@ -1,7 +1,8 @@ import { Sketch, SketchCollection, Polygon, Metric } from "../types/index.js"; -import { isSketchCollection, clip } from "../helpers/index.js"; +import { isSketchCollection } from "../helpers/index.js"; import { createMetric } from "../metrics/index.js"; import { featureCollection, featureEach, area as turfArea } from "@turf/turf"; +import { clip } from "./clip.js"; /** * Calculates the area of each sketch and collection. diff --git a/packages/geoprocessing/src/helpers/clip.ts b/packages/geoprocessing/src/toolbox/clip.ts similarity index 60% rename from packages/geoprocessing/src/helpers/clip.ts rename to packages/geoprocessing/src/toolbox/clip.ts index a8d6049783..ca2c046f99 100644 --- a/packages/geoprocessing/src/helpers/clip.ts +++ b/packages/geoprocessing/src/toolbox/clip.ts @@ -1,9 +1,12 @@ -/** - * Passthru to polygon-clipping methods - */ - import polygonClipping from "polygon-clipping"; -import { multiPolygon, polygon, geomEach, getGeom } from "@turf/turf"; +import { + multiPolygon, + polygon, + geomEach, + getGeom, + featureCollection, + area, +} from "@turf/turf"; import { Feature, MultiPolygon, @@ -13,14 +16,14 @@ import { GeoJsonProperties, } from "../types/geojson.js"; import { ValidationError } from "../types/index.js"; +import { chunk } from "../helpers/chunk.js"; /** - * Performs clip operation on features + * Performs one of 4 different clip operations on features * @param features - FeatureCollection of Polygons or MultiPolygons. First feature is the subject, the rest are the clippers * @param operation - one of "union", "intersection", "xor", "difference" * @param options - optional properties to set on the resulting feature * @returns clipped Feature of Polygon or MultiPolygon - * @deprecated - use turf modules instead, now with support for operating against an array of features */ export function clip< P extends GeoJsonProperties | undefined = GeoJsonProperties, @@ -51,8 +54,13 @@ export function clip< } /** - * Performs clip by merging features2 coords into a single multipolygon. - * Useful when you need features2 to be seen as a single unit when clipping feature1 (e.g. intersection) + * Performs clip after first merging features2 coords into a single multipolygon. + * Avoids errors in underlying clipping library when too many features in features2 + * @param feature1 polygon or multipolygon to clip + * @param features2 collection of polygons or multipolygons to clip feature1 against + * @param operation one of "union", "intersection", "xor", "difference" + * @param options.properties properties to set on the resulting feature + * @returns polygon or multipolygon feature result from clip operation, if no overlap then returns null */ export function clipMultiMerge< P extends GeoJsonProperties | undefined = GeoJsonProperties, @@ -73,7 +81,8 @@ export function clipMultiMerge< throw new ValidationError("Missing or empty features for clip"); const geom1 = getGeom(feature1); - // Combine into one multipoly coordinate array + + // Combine features2 into one multipoly coordinate array so that it is operated on in one go const coords2 = (() => { return features2.features.reduce( (acc, poly) => { @@ -99,3 +108,30 @@ export function clipMultiMerge< Polygon | MultiPolygon >; } + +/** + * Calculates area overlap between a feature A and a feature array B. + * Intersection is done in chunks on featuresB to avoid errors due to too many features + * @param featureA single feature to intersect with featuresB + * @param featuresB array of features + * @param chunkSize Size of array to split featuresB into, avoids intersect failure due to large array) + * @returns intersection of featureA with featuresB + */ +export const intersectInChunks = ( + featureA: Feature, + featuresB: Feature[], + chunkSize: number, +) => { + // chunk to avoid blowing up intersect + const chunks = chunk(featuresB, chunkSize || 5000); + // intersect chunks and flatten into single result + return chunks.flatMap((curChunk) => { + // MultiMerge will merge curChunk FC into a single multipolygon before intersection + const rem = clipMultiMerge( + featureA, + featureCollection(curChunk), + "intersection", + ); + return rem || []; + }); +}; diff --git a/packages/geoprocessing/src/toolbox/genPreprocessor.test.ts b/packages/geoprocessing/src/toolbox/genPreprocessor.test.ts index c35e610fa5..a16790fb97 100644 --- a/packages/geoprocessing/src/toolbox/genPreprocessor.test.ts +++ b/packages/geoprocessing/src/toolbox/genPreprocessor.test.ts @@ -1,9 +1,17 @@ import { describe, test, expect } from "vitest"; import { area } from "@turf/turf"; import project from "../testing/project/testProjectClient.js"; -import { genClipLoader } from "../dataproviders/index.js"; -import { Sketch } from "../types/index.js"; -import { genPreprocessor } from "./genPreprocessor.js"; +import { + DatasourceClipOperation, + FeatureClipOperation, + Polygon, + Sketch, +} from "../types/index.js"; +import { + genClipToPolygonDatasources, + genClipToPolygonFeatures, +} from "./genPreprocessor.js"; +import fix from "../testing/fixtures/squareSketches.js"; // import micronesia eez from global subdivided describe("genPreprocessor", () => { @@ -13,7 +21,7 @@ describe("genPreprocessor", () => { ); if (!eezDatasource) throw new Error("missing global eez land union datasource"); - const clipLoader = genClipLoader(project, [ + const clipOperations: DatasourceClipOperation[] = [ { datasourceId: "global-clipping-osm-land", // subtract out land from sketch @@ -36,9 +44,9 @@ describe("genPreprocessor", () => { }, }, }, - ]); + ]; - const preprocessor = genPreprocessor(clipLoader); + const preprocessor = genClipToPolygonDatasources(project, clipOperations); const result = await preprocessor({ type: "Feature", properties: { @@ -71,7 +79,7 @@ describe("genPreprocessor", () => { ); if (!eezDatasource) throw new Error("missing global eez land union datasource"); - const clipLoader = genClipLoader(project, [ + const clipOperations: DatasourceClipOperation[] = [ { datasourceId: "global-clipping-osm-land", // subtract out land from sketch @@ -81,11 +89,11 @@ describe("genPreprocessor", () => { unionProperty: "gid", }, }, - ]); + ]; - const preprocessor = genPreprocessor(clipLoader); + const preprocessor = genClipToPolygonDatasources(project, clipOperations); - const theSketch: Sketch = { + const theSketch: Sketch = { type: "Feature", properties: { name: "fsm-east-west", @@ -116,3 +124,35 @@ describe("genPreprocessor", () => { expect(area(result)).toEqual(origArea); }, 20_000); }); + +describe("genClipToPolygonsPreprocessor", () => { + test("genClipToPolygonsPreprocessor should successfully generate and run preprocessor", async () => { + const featureOperations: FeatureClipOperation[] = [ + { + clipFeatures: [fix.outer], + operation: "intersection", + }, + ]; + + const preprocessor = genClipToPolygonFeatures(featureOperations); + const result = await preprocessor(fix.poly2); + + expect(result).toBeTruthy(); + expect(area(result)).toBe(area(fix.poly2Inner)); + }, 60_000); + + test("geoprocessorz - sketch outside of datasource should not clip at all", async () => { + const featureOperations: FeatureClipOperation[] = [ + { + clipFeatures: [fix.outer], + operation: "difference", + }, + ]; + + const preprocessor = genClipToPolygonFeatures(featureOperations, {}); + const result = await preprocessor(fix.poly3); + + expect(result).toBeTruthy(); + expect(area(result)).toBe(area(fix.poly3)); // should be same as input + }, 20_000); +}); diff --git a/packages/geoprocessing/src/toolbox/genPreprocessor.ts b/packages/geoprocessing/src/toolbox/genPreprocessor.ts index 0ed95f21cb..efd8ee7047 100644 --- a/packages/geoprocessing/src/toolbox/genPreprocessor.ts +++ b/packages/geoprocessing/src/toolbox/genPreprocessor.ts @@ -1,78 +1,248 @@ -import { clip, isPolygonFeature } from "../helpers/index.js"; -import { clipMultiMerge } from "../helpers/index.js"; +import { + isPolygonFeature, + isPolygonFeatureArray, + numberFormat, +} from "../helpers/index.js"; +import { clipMultiMerge } from "./clip.js"; import { ValidationError, Feature, Polygon, MultiPolygon, } from "../types/index.js"; -import { area, featureCollection as fc, flatten, kinks } from "@turf/turf"; -import { ClipOptions, FeatureClipOperation } from "../types/dataProcessor.js"; +import { + area, + bbox, + featureCollection as fc, + flatten, + kinks, + booleanValid, +} from "@turf/turf"; +import { + ClipOptions, + DatasourceClipOperation, + FeatureClipOperation, +} from "../types/dataProcessor.js"; +import { + isExternalVectorDatasource, + isInternalVectorDatasource, +} from "../datasources/helpers.js"; +import { ProjectClientInterface } from "../project/ProjectClientBase.js"; +import { getFeatures } from "../dataproviders/getFeatures.js"; +import { clip } from "./clip.js"; /** - * Returns a preprocessor function given clipLoader function - * @throws if clipped feature is larger than maxSize, defaults to 500K km + * Returns true if feature is valid and meets requirements set by options. + * @param feature - feature to validate + * @param options - validation options + * @param options.minSize - minimum size in square kilometers that polygon can be. Throws if smaller. + * @param options.enforceMinSize - Whether or not minSize should be enforced and throw if smaller + * @param options.maxSize - maxSize in square kilometers that polygon can be. Throws if larger. + * @param options.enforceMaxSize - Whether or not maxSize should be enforced and throw if larger + * @throws if polygon is invalid with reason + * @returns true if valid */ -export const genPreprocessor = ( - /** Clip loader function */ - clipLoader: ( - feature: Feature, - ) => Promise, +export function ensureValidPolygon( + feature: Feature, + options: { + allowSelfCrossing?: boolean; + minSize?: number; + enforceMinSize?: boolean; + maxSize?: number; + enforceMaxSize?: boolean; + } = {}, +): boolean { + const { + /** If false will throw error if shape crosses itself */ + allowSelfCrossing = false, + /** Minimum shape size in square kilometers, defaults to 0 */ + minSize = 0, + /** If true will throw error if shape is less than minSize */ + enforceMinSize = true, + /** Maximum shape size in square kilometers */ + maxSize = 10_000_000, + /** If true will throw error if shape is more than maxSize */ + enforceMaxSize = true, + } = options; + + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + if (!booleanValid(feature)) { + throw new ValidationError("Polygon feature is invalid"); + } + + if (allowSelfCrossing === false) { + const kinkPoints = kinks(feature); + if (kinkPoints.features.length > 0) { + throw new ValidationError("Your sketch polygon crosses itself"); + } + } + + const MIN_SIZE_SQ_METERS = minSize * 1_000_000; + const MAX_SIZE_SQ_METERS = maxSize * 1_000_000; + + if (enforceMinSize && area(feature) < MIN_SIZE_SQ_METERS) { + throw new ValidationError( + `Shapes should be at least ${numberFormat(minSize > 1 ? minSize : MIN_SIZE_SQ_METERS)} square ${minSize > 1 ? "km" : "meters"} in size`, + ); + } + + if (enforceMaxSize && area(feature) > MAX_SIZE_SQ_METERS) { + throw new ValidationError( + `Shapes should be no more than ${numberFormat(maxSize)} square km in size`, + ); + } + + return true; +} + +/** + * Returns a function that applies clip operations to a feature using other polygon features. + * @param operations - array of DatasourceClipOperations + * @param options - clip options + * @param options.ensurePolygon - if true always returns single polygon. If operations result in multiple polygons it returns the largest (defaults to true) + * @throws if a datasource fetch returns no features or if nothing remains of feature after clip operations + * @returns clipped polygon + */ +export const genClipToPolygonFeatures = ( + clipOperations: FeatureClipOperation[], options: ClipOptions = {}, ) => { const func = async (feature: Feature): Promise => { - return clipToPolygonFeatures(feature, clipLoader, options); + return clipToPolygonFeatures(feature, clipOperations, options); }; return func; }; /** - * Takes a Polygon feature and returns the portion remaining after performing clipOperations - * If results in multiple polygons then returns the largest - * @throws if input feature to clip is not a polygon or if enforceMaxSize is true and clipped feature is larger than maxSize, defaults to 500K km + * Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features + * @param feature - feature to clip + * @param clipOperations - array of DatasourceClipOperations + * @param options - clip options + * @param options.ensurePolygon - if true always returns single polygon. If operations result in multiple polygons it returns the largest (defaults to true) + * @throws if a datasource fetch returns no features or if nothing remains of feature after clip operations + * @returns clipped polygon */ export async function clipToPolygonFeatures( - /** feature to clip */ feature: Feature, - /** Load clip features from datasources for clip operations */ - clipLoader: ( - feature: Feature, - ) => Promise, + clipOperations: FeatureClipOperation[], options: ClipOptions = {}, ): Promise> { - const { - maxSize = 500_000, - enforceMaxSize = false, - ensurePolygon = true, - } = options; - - //// INITIAL CHECKS //// - if (!isPolygonFeature(feature)) { throw new ValidationError("Input must be a polygon"); } - const MAX_SIZE_KM = maxSize * 1000 ** 2; + const { ensurePolygon = true } = options; + let clipped: Feature | null = feature; // Start with whole feature - if (enforceMaxSize && area(feature) > MAX_SIZE_KM) { - throw new ValidationError( - `Please limit sketches to under ${MAX_SIZE_KM} square km`, - ); + // Sequentially run clip operations. If operation returns null at some point, don't do any more ops + for (const clipOp of clipOperations) { + if (clipped !== null && clipOp.clipFeatures.length > 0) { + if (clipOp.operation === "intersection") { + clipped = clipMultiMerge( + clipped, + fc(clipOp.clipFeatures), + "intersection", + ); + } else if (clipOp.operation === "difference") { + clipped = clip(fc([clipped, ...clipOp.clipFeatures]), "difference"); + } + } } - const kinkPoints = kinks(feature); - if (kinkPoints.features.length > 0) { - throw new ValidationError("Your sketch polygon crosses itself."); + if (!clipped || area(clipped) === 0) { + throw new ValidationError("Feature is outside of boundary"); + } else { + if (ensurePolygon && clipped.geometry.type === "MultiPolygon") { + // If multipolygon, keep only the biggest piece + const flattened = flatten(clipped); + let biggest = [0, 0]; + for (let i = 0; i < flattened.features.length; i++) { + const a = area(flattened.features[i]); + if (a > biggest[0]) { + biggest = [a, i]; + } + } + return flattened.features[biggest[1]] as Feature; + } else { + return clipped; + } } +} +/** + * Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources + * @param project - project client to use for accessing datasources + * @param clipOperations - array of DatasourceClipOperations + * @param options - clip options + * @param options.ensurePolygon - if true always returns single polygon. If operations result in multiple polygons it returns the largest (defaults to true) + * @throws if a datasource fetch returns no features or if nothing remains of feature after clip operations + * @returns clipped polygon + */ +export const genClipToPolygonDatasources =

( + project: P, + clipOperations: DatasourceClipOperation[], + options: ClipOptions = {}, +) => { + const func = async ( + feature: Feature, + ): Promise => { + return clipToPolygonDatasources(project, feature, clipOperations, options); + }; + return func; +}; + +/** + * Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources + * @param project - project client to use for accessing datasources + * @param feature - feature to clip + * @param clipOperations - array of DatasourceClipOperations + * @param options - clip options + * @param options.ensurePolygon - if true always returns single polygon. If operations result in multiple polygons it returns the largest (defaults to true) + * @throws if a datasource fetch returns no features or if nothing remains of feature after clip operations + * @returns clipped polygon + */ +export async function clipToPolygonDatasources< + P extends ProjectClientInterface, +>( + project: P, + feature: Feature, + clipOperations: DatasourceClipOperation[], + options: ClipOptions = {}, +): Promise> { + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + const { ensurePolygon = true } = options; let clipped: Feature | null = feature; // Start with whole feature - //// CLIP OPERATIONS //// + const featureOperations = await Promise.all( + clipOperations.map(async (o) => { + const ds = project.getDatasourceById(o.datasourceId); + if (!isInternalVectorDatasource(ds) && !isExternalVectorDatasource(ds)) { + throw new Error(`Expected vector datasource for ${ds.datasourceId}`); + } - const clipOperations = await clipLoader(feature); + const url = project.getDatasourceUrl(ds); + + const featureBox = bbox(feature); + const clipFeatures = await getFeatures(ds, url, { + ...o.options, + bbox: featureBox, + }); + if (!isPolygonFeatureArray(clipFeatures)) { + throw new Error("Expected array of Polygon features"); + } + return { + clipFeatures, + operation: o.operation, + }; + }), + ); // Sequentially run clip operations in order. If operation returns null at some point, don't do any more ops - for (const clipOp of clipOperations) { + for (const clipOp of featureOperations) { if (clipped !== null && clipOp.clipFeatures.length > 0) { if (clipOp.operation === "intersection") { clipped = clipMultiMerge( diff --git a/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.test.e2e.ts b/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.test.e2e.ts index 9d624b2cec..9b4345156d 100644 --- a/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.test.e2e.ts +++ b/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.test.e2e.ts @@ -3,7 +3,7 @@ import { Polygon, Sketch, Feature } from "../../types/index.js"; import parseGeoraster from "georaster"; import testData from "./test/testData.js"; import geoblaze from "geoblaze"; -import { splitSketchAntimeridian } from "../split.js"; +import { splitSketchAntimeridian } from "../antimeridian.js"; describe("geoblaze basics", () => { test("simple in-memory raster sum test", async () => { diff --git a/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.ts b/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.ts index ec936ae225..42c23d129a 100644 --- a/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.ts +++ b/packages/geoprocessing/src/toolbox/geoblaze/geoblaze.ts @@ -29,7 +29,7 @@ export const geoblazeDefaultStatValues = { }; /** - * Returns sum of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0. + * Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0. */ export const getSum = async ( raster: Georaster, @@ -51,7 +51,7 @@ export const getSum = async ( }; /** - * Returns area of valid cells (not nodata) overlapping with feature. If no valid cells found, returns 0. + * Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0. */ export const getArea = async ( raster: Georaster, diff --git a/packages/geoprocessing/src/toolbox/geoblaze/rasterStats.ts b/packages/geoprocessing/src/toolbox/geoblaze/rasterStats.ts index 4721e30f74..902025f1ac 100644 --- a/packages/geoprocessing/src/toolbox/geoblaze/rasterStats.ts +++ b/packages/geoprocessing/src/toolbox/geoblaze/rasterStats.ts @@ -43,12 +43,12 @@ export interface RasterStatsOptions extends CalcStatsOptions { categorical?: boolean; /** If categorical raster, metric property name that categories are organized. Defaults to classId */ categoryMetricProperty?: MetricDimension; - /** If categorical raster, array of values to create metrics for */ + /** If categorical raster, array of values to create metrics for. Any values not provided won't be counted */ categoryMetricValues?: string[]; } /** - * Calculates over 10 different raster stats, optionally constrains to raster cells overlapping with feature. + * Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics). * Defaults to calculating only sum stat * If no cells found, returns 0 or null value for each stat as appropriate. */ diff --git a/packages/geoprocessing/src/toolbox/geoblaze/rasterStatsToMetrics.ts b/packages/geoprocessing/src/toolbox/geoblaze/rasterStatsToMetrics.ts index 1407c01dda..f70395436b 100644 --- a/packages/geoprocessing/src/toolbox/geoblaze/rasterStatsToMetrics.ts +++ b/packages/geoprocessing/src/toolbox/geoblaze/rasterStatsToMetrics.ts @@ -3,7 +3,7 @@ import { roundDecimal } from "../../helpers/index.js"; import { createMetric } from "../../metrics/index.js"; /** - * Converts an array of geoblaze raster StatsObjects to an array of Metrics + * Converts an array of geoblaze raster StatsObject to an array of Metrics * @param statsObjects * @param sketchId * @param extra diff --git a/packages/geoprocessing/src/toolbox/index.ts b/packages/geoprocessing/src/toolbox/index.ts index 3b06f3a3ca..4f1cc373b0 100644 --- a/packages/geoprocessing/src/toolbox/index.ts +++ b/packages/geoprocessing/src/toolbox/index.ts @@ -1,13 +1,13 @@ export * from "./area.js"; +export * from "./clip.js"; export * from "./width.js"; export * from "./overlapArea.js"; export * from "./overlapFeatures.js"; -export * from "./overlapRaster.js"; export * from "./overlapRasterClass.js"; export * from "./overlapGroupMetrics.js"; export * from "./booleanOverlap.js"; export * from "./genPreprocessor.js"; export * from "./geoblaze/index.js"; export * from "./cleanCoords.js"; -export * from "./split.js"; +export * from "./antimeridian.js"; export * from "./rasterMetrics.js"; diff --git a/packages/geoprocessing/src/toolbox/overlapArea.ts b/packages/geoprocessing/src/toolbox/overlapArea.ts index f65cf86460..09670b76f6 100644 --- a/packages/geoprocessing/src/toolbox/overlapArea.ts +++ b/packages/geoprocessing/src/toolbox/overlapArea.ts @@ -6,7 +6,7 @@ import { Polygon, Metric, } from "../types/index.js"; -import { isSketchCollection, toSketchArray, clip } from "../helpers/index.js"; +import { isSketchCollection, toSketchArray } from "../helpers/index.js"; import { createMetric } from "../metrics/index.js"; import { featureCollection, @@ -15,11 +15,11 @@ import { simplify, } from "@turf/turf"; import { ValidationError } from "../types/index.js"; +import { clip } from "./clip.js"; /** * Assuming sketches are within some outer boundary with size outerArea, * calculates the area of each sketch and the proportion of outerArea they take up. - * @deprecated - using geographies will clip your datasources and you can just use overlapFeatures */ export async function overlapArea( /** Metric identifier */ @@ -178,7 +178,7 @@ export async function overlapArea( * Returns area stats for sketch input after performing overlay operation against a subarea feature. * Includes both area overlap and percent area overlap metrics, because calculating percent later would be too complicated * For sketch collections, dissolve is used when calculating total sketch area to prevent double counting - * @deprecated - using geographies will clip your datasources and you can just use overlapFeatures + * @deprecated - using geographies will clip your datasources and you can just use overlapFeatures. This will be removed in a future version */ export async function overlapSubarea( /** Metric identifier */ diff --git a/packages/geoprocessing/src/toolbox/overlapFeatures.ts b/packages/geoprocessing/src/toolbox/overlapFeatures.ts index 93a2a9110f..7cb0983ed5 100644 --- a/packages/geoprocessing/src/toolbox/overlapFeatures.ts +++ b/packages/geoprocessing/src/toolbox/overlapFeatures.ts @@ -8,11 +8,9 @@ import { import { toSketchArray, isSketchCollection, - chunk, - clip, - clipMultiMerge, roundDecimal, } from "../helpers/index.js"; +import { clip, intersectInChunks } from "./clip.js"; import { createMetric } from "../metrics/index.js"; import { MultiPolygon } from "../types/geojson.js"; import { @@ -36,20 +34,19 @@ interface OverlapFeatureOptions { truncate?: boolean; } -// ToDo: support -// point - sum of points -// linestring - sum of length - /** * Calculates overlap between sketch(es) and an array of polygon features. * Supports area or sum operation (given sumProperty), defaults to area * If sketch collection includes overall and per sketch + * @param metricId unique metric identifier to assign to each metric + * @param features to intersect and get overlap stats + * @param sketch the sketches. If empty will return 0 result. + * @param options + * @returns array of Metric objects */ export async function overlapFeatures( metricId: string, - /** features to intersect and get overlap stats */ features: Feature[], - /** the sketches. If empty will return 0 result. */ sketch: | Sketch | SketchCollection @@ -74,7 +71,7 @@ export async function overlapFeatures( // Create individual sketch metrics const sketchMetrics: Metric[] = sketches.map((curSketch) => { - const intersections = doIntersect( + const intersections = doIntersectOp( curSketch as Feature, finalFeatures as Feature[], newOptions, @@ -123,7 +120,7 @@ export async function overlapFeatures( } } else { featureEach(finalSketches, (feat) => { - const intersections = doIntersect( + const intersections = doIntersectOp( feat, finalFeatures as Feature[], newOptions, @@ -159,13 +156,14 @@ export async function overlapFeatures( } /** - * Gets intersect sum/area between a sketch and feature array + * Performs intersect between a feature A and features B and calculates area or sum + * @private internal function of overlapFeatures * @param featureA Single sketch (as a feature) * @param featuresB Features to overlap with sketch * @param options Includes whether to calculate area or sum, chunk size for area calculation, and property name for sum calculation * @returns Value of area/sum and (sum only) array of overlapping features */ -const doIntersect = ( +const doIntersectOp = ( featureA: Feature, featuresB: Feature[], options: OverlapFeatureOptions, @@ -173,56 +171,45 @@ const doIntersect = ( const { chunkSize, operation = "area" } = options; switch (operation) { case "sum": { - return getSketchPolygonIntersectSumValue( - featureA, - featuresB, - options.sumProperty, - ); + return intersectSum(featureA, featuresB, options.sumProperty); } default: { - return getSketchPolygonIntersectArea(featureA, featuresB, chunkSize); + return intersectInChunksArea(featureA, featuresB, chunkSize); } } }; /** - * Calculates area overlap between sketch and a feature array - * @param featureA Single sketch (as a feature) - * @param featuresB Features to overlap with sketch + * Calculates area overlap between a feature A and a feature array B. + * Intersection is done in chunks on featuresB to avoid errors due to too many features + * @param featureA single feature to intersect with featuresB + * @param featuresB array of features * @param chunkSize Size of array to split featuresB into, avoids intersect failure due to large array) - * @returns Area overlap between the sketch and features + * @returns area of intersection of featureA with featuresB */ -const getSketchPolygonIntersectArea = ( +export const intersectInChunksArea = ( featureA: Feature, featuresB: Feature[], chunkSize: number, ) => { - // chunk to avoid blowing up intersect - const chunks = chunk(featuresB, chunkSize || 5000); // intersect and get area of remainder - const sketchValue = chunks - .map((curChunk) => { - const rem = clipMultiMerge( - featureA, - featureCollection(curChunk), - "intersection", - ); - return rem; - }) - .reduce((sumSoFar, rem) => (rem ? area(rem) + sumSoFar : sumSoFar), 0); - return { value: sketchValue, indices: [] }; + const featureArea = intersectInChunks(featureA, featuresB, chunkSize).reduce( + (sumSoFar, rem) => (rem ? area(rem) + sumSoFar : sumSoFar), + 0, + ); + return { value: featureArea, indices: [] }; }; /** * Sums the value of intersecting features. No support for partial, counts the whole feature - * @param featureA Single sketch (as a feature) - * @param featuresB Features to overlap with sketch - * @param sumProperty Property with value to sum, if not defined each feature will count as 1 + * @param featureA single feature to intersect with featuresB + * @param featuresB array of features + * @param sumProperty Property in featuresB with value to sum, if not defined each feature will count as 1 * @returns Sum of features/feature property which overlap with the sketch, and a list of * indices for features that overlap with the sketch to be used in calculating total sum of * the sketch collection */ -const getSketchPolygonIntersectSumValue = ( +export const intersectSum = ( featureA: Feature, featuresB: Feature[], sumProperty?: string, diff --git a/packages/geoprocessing/src/toolbox/overlapGroupMetrics.ts b/packages/geoprocessing/src/toolbox/overlapGroupMetrics.ts index 225910bf5f..5ec0cc8133 100644 --- a/packages/geoprocessing/src/toolbox/overlapGroupMetrics.ts +++ b/packages/geoprocessing/src/toolbox/overlapGroupMetrics.ts @@ -13,9 +13,9 @@ import { toSketchArray, isSketchCollection, groupBy, - clip, isPolygonFeatureArray, } from "../helpers/index.js"; +import { clip } from "./clip.js"; import { createMetric, firstMatchingMetric } from "../metrics/index.js"; import { overlapFeatures } from "./overlapFeatures.js"; import { overlapArea } from "./overlapArea.js"; @@ -154,7 +154,7 @@ export async function overlapAreaGroupMetrics(options: { } /** - * Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group + * Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group * Assumes a sketch is member of only one group, determined by caller-provided metricToGroup * For each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first) * Types of metrics returned: diff --git a/packages/geoprocessing/src/toolbox/overlapRaster.test.ts b/packages/geoprocessing/src/toolbox/overlapRaster.test.ts deleted file mode 100644 index f6f801a6aa..0000000000 --- a/packages/geoprocessing/src/toolbox/overlapRaster.test.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { describe, test, expect } from "vitest"; -import fix from "../testing/fixtures/sketches.js"; -import parseGeoraster from "georaster"; -import { overlapRaster } from "./overlapRaster.js"; - -// bbox - [xmin, ymin, xmax, ymax] -// pixel - [left, bottom, right, top] - -describe("overlapRaster test", () => { - test("overlapRaster - bottom left raster cell sum should be 0", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 2], - [0, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metrics = await overlapRaster("test", raster, fix.bottomLeftPoly); - expect(metrics.length).toBe(1); - expect(metrics[0].value).toBe(0); - }); - - test("overlapRaster - top right raster cell sum should be 2", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 2], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metrics = await overlapRaster("test", raster, fix.topRightPoly); - expect(metrics.length).toBe(1); - expect(metrics[0].value).toBe(2); - }); - - test("overlapRaster - top right raster cell - truncation", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 0.002_345_6], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metricsTruncationFalse = await overlapRaster( - "test", - raster, - fix.topRightPoly, - { - truncate: false, - }, - ); - expect(metricsTruncationFalse.length).toBe(1); - expect(metricsTruncationFalse[0].value).toBe(0.002_345_6); - - const metricsTruncationTrue = await overlapRaster( - "test", - raster, - fix.topRightPoly, - { - truncate: true, - }, - ); - expect(metricsTruncationTrue.length).toBe(1); - expect(metricsTruncationTrue[0].value).toBe(0.002_346); - - const metricsTruncationDefault = await overlapRaster( - "test", - raster, - fix.topRightPoly, - ); - expect(metricsTruncationDefault.length).toBe(1); - expect(metricsTruncationDefault[0].value).toBe(0.002_346); - }); - - test("overlapRaster - top right raster cell - truncation with very small value", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 8.58e-7], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metricsTruncation = await overlapRaster( - "test", - raster, - fix.topRightPoly, - { - truncate: true, - }, - ); - expect(metricsTruncation.length).toBe(1); - expect(metricsTruncation[0].value).toBe(8.58e-7); // Value untruncated because it would truncate to 0 - - const metricsNoTruncation = await overlapRaster( - "test", - raster, - fix.topRightPoly, - { - truncate: false, - }, - ); - expect(metricsNoTruncation.length).toBe(1); - expect(metricsNoTruncation[0].value).toBe(8.58e-7); // Value untruncated - - const metricsDefaultTruncation = await overlapRaster( - "test", - raster, - fix.topRightPoly, - { - truncate: false, - }, - ); - expect(metricsDefaultTruncation.length).toBe(1); - expect(metricsDefaultTruncation[0].value).toBe(8.58e-7); // Value untruncated because it would truncate to 0 - }); - - test("overlapRaster - whole raster sum should be 5", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 2], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metrics = await overlapRaster("test", raster, fix.wholePoly); - expect(metrics.length).toBe(1); - expect(metrics[0].value).toBe(5); - }); - - test("overlapRaster - mixed coll should handle overlap and not double count", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 2], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metrics = await overlapRaster("test", raster, fix.wholeMixedSC); - expect(metrics.length).toBe(3); - expect(metrics[0].value).toBe(5); // first sketch - expect(metrics[1].value).toBe(5); // second sketch - expect(metrics[2].value).toBe(5); // collection - no double count - }); - - test("overlapRaster - should not count holes", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 2], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metrics = await overlapRaster("test", raster, fix.holeBlPoly); - expect(metrics.length).toBe(1); - expect(metrics[0].value).toBe(4); // first sketch - }); - - test("overlapRaster - should handle holes in each sketch, that cancel in collection for full sum", async () => { - const raster = await parseGeoraster( - [ - [ - [1, 2], - [1, 1], - ], - ], - { - noDataValue: 0, - projection: 4326, - xmin: 0, // left - ymax: 20, // top - pixelWidth: 10, - pixelHeight: 10, - }, - ); - const metrics = await overlapRaster("test", raster, fix.holeMixedSC); - expect(metrics.length).toBe(3); - expect(metrics[0].value).toBe(4); // first sketch - expect(metrics[1].value).toBe(3); // second sketch - expect(metrics[2].value).toBe(5); // collection is full sum, each sketch picking up the others hole - }); -}); diff --git a/packages/geoprocessing/src/toolbox/overlapRaster.ts b/packages/geoprocessing/src/toolbox/overlapRaster.ts deleted file mode 100644 index aa0a11b91c..0000000000 --- a/packages/geoprocessing/src/toolbox/overlapRaster.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { - Sketch, - SketchCollection, - Polygon, - Metric, - MultiPolygon, -} from "../types/index.js"; -import { isSketchCollection, roundDecimal } from "../helpers/index.js"; -import { createMetric } from "../metrics/index.js"; -import { featureEach } from "@turf/turf"; -import { getSum } from "./geoblaze/index.js"; -import { Georaster } from "geoblaze"; - -interface OverlapRasterOptions { - /** Truncates results to 6 digits, defaults to true */ - truncate?: boolean; -} - -/** - * Returns metrics representing sketch overlap with raster. - * If sketch collection, then calculate overlap for all child sketches also - * @deprecated - switch to overlapRasterSum - */ -export async function overlapRaster( - /** metricId value to assign to each measurement */ - metricId: string, - /** Cloud-optimized geotiff to calculate overlap with, loaded via loadCog or geoblaze.parse() */ - raster: Georaster, - /** single sketch or collection to calculate metrics for. */ - sketch: - | Sketch - | SketchCollection, - options?: Partial, -): Promise { - const newOptions: OverlapRasterOptions = { - truncate: true, - ...options, - }; - - // Get raster sum for each feature - const sumPromises: Promise[] = []; - const sumFeatures: Sketch[] = []; - - featureEach(sketch, async (feat) => { - // accumulate geoblaze sum promises and features so we can create metrics later - sumPromises.push(getSum(raster, feat)); - sumFeatures.push(feat); - }); - - // await results and create metrics - const sketchMetrics: Metric[] = []; - for (const [index, curSum] of (await Promise.all(sumPromises)).entries()) { - sketchMetrics.push( - createMetric({ - metricId, - sketchId: sumFeatures[index].properties.id, - value: newOptions.truncate - ? roundDecimal(curSum, 6, { keepSmallValues: true }) - : curSum, - extra: { - sketchName: sumFeatures[index].properties.name, - }, - }), - ); - } - - if (isSketchCollection(sketch)) { - // Push collection with accumulated sumValue - const collSumValue = await getSum(raster, sketch); - sketchMetrics.push( - createMetric({ - metricId, - sketchId: sketch.properties.id, - value: newOptions.truncate - ? roundDecimal(collSumValue, 6, { keepSmallValues: true }) - : collSumValue, - extra: { - sketchName: sketch.properties.name, - isCollection: true, - }, - }), - ); - } - - return sketchMetrics; -} diff --git a/packages/geoprocessing/src/toolbox/overlapRasterClass.ts b/packages/geoprocessing/src/toolbox/overlapRasterClass.ts index 5e8f96526f..789bdfd2ab 100644 --- a/packages/geoprocessing/src/toolbox/overlapRasterClass.ts +++ b/packages/geoprocessing/src/toolbox/overlapRasterClass.ts @@ -16,6 +16,7 @@ import { featureEach } from "@turf/turf"; /** * Calculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes * If sketch collection, then calculate overlap for all child sketches also + * @deprecated use rasterMetrics instead */ export async function overlapRasterClass( /** metricId value to assign to each measurement */ diff --git a/packages/geoprocessing/src/toolbox/rasterMetrics.ts b/packages/geoprocessing/src/toolbox/rasterMetrics.ts index a95e5a4957..1a96e59501 100644 --- a/packages/geoprocessing/src/toolbox/rasterMetrics.ts +++ b/packages/geoprocessing/src/toolbox/rasterMetrics.ts @@ -14,7 +14,7 @@ import { RasterStatsOptions, rasterStats } from "./geoblaze/index.js"; import { rasterStatsToMetrics } from "./geoblaze/rasterStatsToMetrics.js"; import { Georaster } from "geoblaze"; -interface OverlapRasterOptions extends RasterStatsOptions { +export interface OverlapRasterOptions extends RasterStatsOptions { /** Optional metricId to be assigned. Don't use if you are calculating more than one stat because you won't be able to tell them apart */ metricId?: string; /** Optional caller-provided prefix to add to metricId in addition to stat name e.g. 'coral' with metrics of 'sum', 'count', 'area' will generate metric IDs of 'coral-sum', 'coral-count', 'coral-area' */ @@ -23,7 +23,7 @@ interface OverlapRasterOptions extends RasterStatsOptions { truncate?: boolean; /** If multi-band raster, metric property name that raster bands are organized by e.g. classID */ bandMetricProperty?: MetricDimension; - /** If multi-band raster, object mapping band number (starting with 0 index) to unique ID value eg. { 0: 'mangroves', 1: 'coral' }. Defaults to 'band 1', 'band 2' */ + /** If multi-band raster, object mapping band number (starting with 0 index) to unique ID value eg. ( 0: 'mangroves', 1: 'coral' ). Defaults to 'band 1', 'band 2' */ bandMetricValues?: string[]; includeChildMetrics?: boolean; /** If categorical raster, set to true */ @@ -35,8 +35,9 @@ interface OverlapRasterOptions extends RasterStatsOptions { } /** - * Calculates stats on the provided raster and returns as an array of Metric objects (defaults to sum stat) - * If sketch, then calculate overlap metrics, sketch collection will calculate metrics for each individual sketch within + * Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics). + * If feature is a collection, then calculate metrics for each individual feature as well as the collection as a whole. + * This can be disabled with includeChildMetrics: false. Defaults to assuming a continuous raster but also supports categorical option */ export async function rasterMetrics( /** Cloud-optimized geotiff, loaded via loadCog or geoblaze.parse() */ diff --git a/packages/geoprocessing/src/types/dataProcessor.ts b/packages/geoprocessing/src/types/dataProcessor.ts index dbe58940b2..a99e27bc40 100644 --- a/packages/geoprocessing/src/types/dataProcessor.ts +++ b/packages/geoprocessing/src/types/dataProcessor.ts @@ -1,4 +1,4 @@ -import { Feature, Polygon, BBox } from "../types/index.js"; +import { Feature, Polygon, BBox, MultiPolygon } from "../types/index.js"; // Where datasources meet data providers meet preprocessors/geoprocessors @@ -13,7 +13,7 @@ export type ClipOperations = "intersection" | "difference"; /** Parameters for clip operation using polygon features */ export interface FeatureClipOperation { - clipFeatures: Feature[]; + clipFeatures: Feature[]; operation: ClipOperations; } @@ -33,12 +33,8 @@ export interface DatasourceClipOperation { options?: DatasourceOptions; } -/** Optional parameters for preprocessor function */ +/** Optional parameters for polygon clip preprocessor */ export interface ClipOptions { /** Ensures result is a polygon. If clip results in multipolygon, returns the largest component */ ensurePolygon?: boolean; - /** maxSize in square kilometers that clipped polygon result can be. Preprocessor function will throw if larger. */ - maxSize?: number; - /** Whether or not maxSize should be enforced and throw */ - enforceMaxSize?: boolean; } diff --git a/packages/geoprocessing/src/types/datasource.ts b/packages/geoprocessing/src/types/datasource.ts index b992c7e614..5772c6e954 100644 --- a/packages/geoprocessing/src/types/datasource.ts +++ b/packages/geoprocessing/src/types/datasource.ts @@ -82,7 +82,7 @@ export const vectorDatasourceSchema = baseDatasourceSchema.merge( bboxFilter: bboxSchema.optional(), /** Import - Name of layer within vector datasource to extract */ layerName: z.string().optional(), - /** keys to generate classes for. Vector - property names */ + /** properties whose values define classes of data. */ classKeys: z.array(z.string()), }), ); diff --git a/packages/geoprocessing/src/types/metricGroup.ts b/packages/geoprocessing/src/types/metricGroup.ts index 2ab6f2a8bf..5a9ebcb3be 100644 --- a/packages/geoprocessing/src/types/metricGroup.ts +++ b/packages/geoprocessing/src/types/metricGroup.ts @@ -8,14 +8,14 @@ import { z } from "zod"; export const metricGroupSchema = z.object({ /** Unique id of metric in project*/ metricId: z.string(), - /** Metric type */ - type: z.string(), + /** data classes used by group */ + classes: z.array(dataClassSchema), + /** unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user */ + type: z.string().optional(), /** Datasource to generate metrics from */ datasourceId: z.string().optional(), /** Optional datasource class key used to source classIds */ classKey: z.string().optional(), - /** data classes used by group */ - classes: z.array(dataClassSchema), /** Optional ID of map layer associated with this metric */ layerId: z.string().optional(), /** group level objective, applies to all classes */ diff --git a/packages/geoprocessing/src/types/metrics.ts b/packages/geoprocessing/src/types/metrics.ts index e6afd3176a..ce2d0ab74a 100644 --- a/packages/geoprocessing/src/types/metrics.ts +++ b/packages/geoprocessing/src/types/metrics.ts @@ -30,8 +30,8 @@ export const metricSchema = z.object({ export const metricsSchema = z.array(metricSchema); /** - * Represents a single record of a metric with a value, stratified by one or more dimensions. - * The naming is a bit of a misnomer, you can think of it as a MetricValue + * Single record of value, stratified in one or more dimensions. + * The name Metric is an overgeneralization, you can think of it as a MetricValue. */ export type Metric = z.infer; export type Metrics = z.infer; diff --git a/packages/geoprocessing/src/types/objective.ts b/packages/geoprocessing/src/types/objective.ts index 0e9d9ed469..58beafde98 100644 --- a/packages/geoprocessing/src/types/objective.ts +++ b/packages/geoprocessing/src/types/objective.ts @@ -50,7 +50,7 @@ export const objectiveSchema = z.object({ shortDesc: z.string(), /** Value required for objective to be met */ target: z.number().nonnegative(), - /** Generic map of MPA protection levels to whether they count towards objective */ + /** Generic map of group names (e.g. MPA protection levels) to whether they count towards objective */ countsToward: objectiveAnswerMapSchema, }); diff --git a/packages/geoprocessing/src/types/reports.ts b/packages/geoprocessing/src/types/reports.ts index 2dd7543caf..cb17502055 100644 --- a/packages/geoprocessing/src/types/reports.ts +++ b/packages/geoprocessing/src/types/reports.ts @@ -26,5 +26,5 @@ export interface ReportResultBase { export interface ReportResult { metrics: Metric[]; /** The sketch used, without geometry */ - sketch: NullSketch | NullSketchCollection; + sketch?: NullSketch | NullSketchCollection; } diff --git a/packages/geoprocessing/src/types/service.ts b/packages/geoprocessing/src/types/service.ts index e9221a2747..4903ffa337 100644 --- a/packages/geoprocessing/src/types/service.ts +++ b/packages/geoprocessing/src/types/service.ts @@ -78,7 +78,7 @@ export interface GeoprocessingHandlerOptions { /** Specify the ids of any Sketch Class form fields that must be provided in * order to run the function */ - requiresProperties: string[]; + requiresProperties?: string[]; /** Whether to rate limit beyond basic DDoS protection */ rateLimited?: boolean; rateLimit?: number; @@ -100,9 +100,9 @@ export interface PreprocessingHandlerOptions { description: string; /** Seconds */ timeout: number; - /** Megabytes, 128 - 3008, defaults to 1024 */ + /** Megabytes, 128 - 10240, defaults to 1024 */ memory?: number; - requiresProperties: string[]; + requiresProperties?: string[]; } export type GeoprocessingRequestParams = Record; diff --git a/packages/geoprocessing/src/types/sketch.ts b/packages/geoprocessing/src/types/sketch.ts index e08556ab90..e99f192b5e 100644 --- a/packages/geoprocessing/src/types/sketch.ts +++ b/packages/geoprocessing/src/types/sketch.ts @@ -13,14 +13,21 @@ export type SketchGeometryTypes = Polygon | MultiPolygon | LineString | Point; /** Properties of a Sketch, defines known keys as well as unknown for extensiblity */ export type SketchProperties = Record & { + /** Unique sketch ID */ id: string; /** Name specified by the author of the sketch */ name: string; + /** Last updated ISO 8601 timestamp */ updatedAt: ISO8601DateTime; + /** Last updated ISO 8601 timestamp */ createdAt: ISO8601DateTime; + /** Unique ID of class of sketch */ sketchClassId: string; + /** True if these are properties for a SketchCollection, false if Sketch */ isCollection: boolean; + /** User-defined attributes with values for Sketch. Defines known keys as well as unknown for extensiblity */ userAttributes: UserAttribute[]; + /** This is used on rare occasion to provide the sketch properties of a SketchCollections child sketches */ childProperties?: SketchProperties[]; }; diff --git a/packages/geoprocessing/src/util/genRandomPolygons.ts b/packages/geoprocessing/src/util/genRandomPolygons.ts index b283df60a9..8e7a085f28 100644 --- a/packages/geoprocessing/src/util/genRandomPolygons.ts +++ b/packages/geoprocessing/src/util/genRandomPolygons.ts @@ -10,7 +10,7 @@ export const genRandomPolygons = (config: { bounds: BBox; max_radial_length?: number; }) => { - const { numPolygons = 300, bounds, max_radial_length = 0.5 } = config; + const { numPolygons = 300, bounds, max_radial_length = 0.25 } = config; const randPolys = randomPolygon(numPolygons, { bbox: bounds, max_radial_length, @@ -21,9 +21,9 @@ export const genRandomPolygons = (config: { (previousValue, currentFeature, featureIndex) => { return previousValue.concat({ ...currentFeature, - id: featureIndex, + id: featureIndex + 1, properties: { - id: featureIndex, + id: featureIndex + 1, }, }); }, diff --git a/packages/geoprocessing/vite.config.ts b/packages/geoprocessing/vite.config.ts index bb74c4f821..109d0bcbb5 100644 --- a/packages/geoprocessing/vite.config.ts +++ b/packages/geoprocessing/vite.config.ts @@ -4,7 +4,14 @@ import { nodePolyfills } from "vite-plugin-node-polyfills"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react(), nodePolyfills()], + plugins: [ + react({ + babel: { + plugins: ["@babel/plugin-syntax-import-attributes"], + }, + }), + nodePolyfills(), + ], build: { sourcemap: true, minify: true, diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-both-sides-barbados.json b/packages/template-blank-project/examples/base/gp-clip-ocean-both-sides-barbados.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-both-sides-barbados.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-both-sides-barbados.json diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-cuba-channel-span.json b/packages/template-blank-project/examples/base/gp-clip-ocean-cuba-channel-span.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-cuba-channel-span.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-cuba-channel-span.json diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-inner-channel-islands.json b/packages/template-blank-project/examples/base/gp-clip-ocean-inner-channel-islands.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-inner-channel-islands.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-inner-channel-islands.json diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-no-land-eez.json b/packages/template-blank-project/examples/base/gp-clip-ocean-no-land-eez.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-no-land-eez.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-no-land-eez.json diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-north-zone-extend.json b/packages/template-blank-project/examples/base/gp-clip-ocean-north-zone-extend.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-north-zone-extend.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-north-zone-extend.json diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-north-zone.json b/packages/template-blank-project/examples/base/gp-clip-ocean-north-zone.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-north-zone.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-north-zone.json diff --git a/packages/template-blank-project/examples/features/gp-clip-ocean-surround-island.json b/packages/template-blank-project/examples/base/gp-clip-ocean-surround-island.json similarity index 100% rename from packages/template-blank-project/examples/features/gp-clip-ocean-surround-island.json rename to packages/template-blank-project/examples/base/gp-clip-ocean-surround-island.json diff --git a/packages/template-blank-project/examples/output/fsm-east-west-coll/blankFunction.json b/packages/template-blank-project/examples/output/fsm-east-west-coll/blankFunction.json deleted file mode 100644 index 3aa6b4bae2..0000000000 --- a/packages/template-blank-project/examples/output/fsm-east-west-coll/blankFunction.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "metrics": [], - "sketch": { - "properties": { - "id": "fsm-east-west-coll", - "name": "fsm-east-west-coll", - "createdAt": "2023-01-10T17:20:33.668529+00:00", - "updatedAt": "2023-01-10T17:21:07.432889+00:00", - "description": null, - "collectionId": null, - "isCollection": true, - "sketchClassId": "119", - "userAttributes": [ - { - "label": "Description", - "value": null, - "exportId": "description", - "fieldType": "TextArea" - }, - { - "label": "Author(s)", - "value": null, - "exportId": "authors", - "fieldType": "TextArea" - } - ], - "include_12-24_nm_contiguous_zone": true - }, - "bbox": [ - 149.3384476090506, - 7.033915089905491, - 167.1102326219892, - 7.671995147373664 - ], - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "name": "fsm-east-west", - "updatedAt": "2022-11-17T10:02:53.645Z", - "sketchClassId": "123abc", - "id": "abc123" - }, - "bbox": [ - 149.3384476090506, - 7.033915089905491, - 167.1102326219892, - 7.671995147373664 - ], - "geometry": null - } - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/fsm-east-west-coll/simpleFunction.json b/packages/template-blank-project/examples/output/fsm-east-west-coll/simpleFunction.json index e9c55c7c0d..ca0b67c7b8 100644 --- a/packages/template-blank-project/examples/output/fsm-east-west-coll/simpleFunction.json +++ b/packages/template-blank-project/examples/output/fsm-east-west-coll/simpleFunction.json @@ -1,9 +1,3 @@ { - "area": 92400484528.7418, - "nearbyEcoregions": [ - "Marshall Islands", - "East Caroline Islands" - ], - "minTemp": 28.011158, - "maxTemp": 30.495605 + "area": 92400484528.74194 } \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/fsm-east-west/blankFunction.json b/packages/template-blank-project/examples/output/fsm-east-west/blankFunction.json deleted file mode 100644 index db696fd17e..0000000000 --- a/packages/template-blank-project/examples/output/fsm-east-west/blankFunction.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "metrics": [], - "sketch": { - "type": "Feature", - "properties": { - "name": "fsm-east-west", - "updatedAt": "2022-11-17T10:02:53.645Z", - "sketchClassId": "123abc", - "id": "abc123" - }, - "bbox": [ - 149.3384476090506, - 7.033915089905491, - 167.1102326219892, - 7.671995147373664 - ], - "geometry": null - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/fsm-east-west/simpleFunction.json b/packages/template-blank-project/examples/output/fsm-east-west/simpleFunction.json index e9c55c7c0d..ca0b67c7b8 100644 --- a/packages/template-blank-project/examples/output/fsm-east-west/simpleFunction.json +++ b/packages/template-blank-project/examples/output/fsm-east-west/simpleFunction.json @@ -1,9 +1,3 @@ { - "area": 92400484528.7418, - "nearbyEcoregions": [ - "Marshall Islands", - "East Caroline Islands" - ], - "minTemp": 28.011158, - "maxTemp": 30.495605 + "area": 92400484528.74194 } \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToLand.json deleted file mode 100644 index 1c7f7b0b0b..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToLand.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "Feature", - "properties": { - "name": "gp-clip-ocean-both-sides-barbados.json" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -59.4854736328125, - 14.141902399847732 - ], - [ - -59.91943359375001, - 9.958029972336439 - ], - [ - -59.853515625, - 9.958029972336439 - ], - [ - -59.4305419921875, - 14.131248778377424 - ], - [ - -59.4854736328125, - 14.141902399847732 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToOcean.json deleted file mode 100644 index d31e05bf65..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-both-sides-barbados.json/clipToOcean.json +++ /dev/null @@ -1,815 +0,0 @@ -{ - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -59.91943359375001, - 9.958029972336439 - ], - [ - -59.853515625, - 9.958029972336439 - ], - [ - -59.53912434699832, - 13.059933949394656 - ], - [ - -59.539442, - 13.060084 - ], - [ - -59.540579, - 13.0603 - ], - [ - -59.540692, - 13.060181 - ], - [ - -59.540864, - 13.060557 - ], - [ - -59.540555, - 13.060724 - ], - [ - -59.540607, - 13.061059 - ], - [ - -59.540821, - 13.06131 - ], - [ - -59.541182, - 13.061627 - ], - [ - -59.541525, - 13.061828 - ], - [ - -59.541537, - 13.06184 - ], - [ - -59.541946, - 13.062238 - ], - [ - -59.541894, - 13.062539 - ], - [ - -59.543123, - 13.062992 - ], - [ - -59.54352, - 13.06316 - ], - [ - -59.543723, - 13.063248 - ], - [ - -59.54377, - 13.063264 - ], - [ - -59.543961, - 13.063362 - ], - [ - -59.544079, - 13.063417 - ], - [ - -59.544281, - 13.063494 - ], - [ - -59.544306, - 13.063505 - ], - [ - -59.544784, - 13.063766 - ], - [ - -59.544941, - 13.063962 - ], - [ - -59.545098, - 13.064063 - ], - [ - -59.545974, - 13.064139 - ], - [ - -59.546932, - 13.064303 - ], - [ - -59.54834, - 13.064612 - ], - [ - -59.548701, - 13.064676 - ], - [ - -59.549372, - 13.064817 - ], - [ - -59.550949, - 13.064905 - ], - [ - -59.551207, - 13.065055 - ], - [ - -59.551481, - 13.065214 - ], - [ - -59.551816, - 13.065724 - ], - [ - -59.552177, - 13.065724 - ], - [ - -59.553341, - 13.065638 - ], - [ - -59.553677, - 13.065573 - ], - [ - -59.554403, - 13.065433 - ], - [ - -59.555138, - 13.065256 - ], - [ - -59.555292, - 13.065473 - ], - [ - -59.556637, - 13.065166 - ], - [ - -59.557009, - 13.06508 - ], - [ - -59.557326, - 13.065122 - ], - [ - -59.557564, - 13.065186 - ], - [ - -59.557853, - 13.06514 - ], - [ - -59.558161, - 13.065238 - ], - [ - -59.558563, - 13.06529 - ], - [ - -59.558768, - 13.065278 - ], - [ - -59.559585, - 13.065099 - ], - [ - -59.559854, - 13.065031 - ], - [ - -59.559946, - 13.065041 - ], - [ - -59.559981, - 13.065076 - ], - [ - -59.561244, - 13.064901 - ], - [ - -59.562072, - 13.064688 - ], - [ - -59.563178, - 13.06419 - ], - [ - -59.563295, - 13.06416 - ], - [ - -59.563697, - 13.064087 - ], - [ - -59.564422, - 13.064025 - ], - [ - -59.564609, - 13.064018 - ], - [ - -59.565188, - 13.064018 - ], - [ - -59.565412, - 13.064102 - ], - [ - -59.565403, - 13.064361 - ], - [ - -59.56591, - 13.064595 - ], - [ - -59.566928, - 13.064853 - ], - [ - -59.566925, - 13.064784 - ], - [ - -59.566958, - 13.064723 - ], - [ - -59.567001, - 13.064694 - ], - [ - -59.567024, - 13.064699 - ], - [ - -59.567036, - 13.06474 - ], - [ - -59.567033, - 13.064776 - ], - [ - -59.567011, - 13.064827 - ], - [ - -59.566955, - 13.064892 - ], - [ - -59.567056, - 13.06503 - ], - [ - -59.56718, - 13.065365 - ], - [ - -59.567237, - 13.06566 - ], - [ - -59.567606, - 13.065977 - ], - [ - -59.568068, - 13.066219 - ], - [ - -59.568549, - 13.066355 - ], - [ - -59.569394, - 13.066515 - ], - [ - -59.570355, - 13.066514 - ], - [ - -59.571013, - 13.066497 - ], - [ - -59.571514, - 13.066433 - ], - [ - -59.571561, - 13.066435 - ], - [ - -59.571618, - 13.066575 - ], - [ - -59.572272, - 13.066962 - ], - [ - -59.572905, - 13.066934 - ], - [ - -59.5734, - 13.067035 - ], - [ - -59.573503, - 13.067057 - ], - [ - -59.573733, - 13.066979 - ], - [ - -59.573768, - 13.066979 - ], - [ - -59.573767, - 13.06711 - ], - [ - -59.5742, - 13.067235 - ], - [ - -59.574783, - 13.067448 - ], - [ - -59.574951, - 13.067364 - ], - [ - -59.574978, - 13.067288 - ], - [ - -59.575046, - 13.067313 - ], - [ - -59.575009, - 13.06752 - ], - [ - -59.575434, - 13.067714 - ], - [ - -59.575523, - 13.067768 - ], - [ - -59.575548, - 13.067812 - ], - [ - -59.575543, - 13.067936 - ], - [ - -59.575416, - 13.068143 - ], - [ - -59.575341, - 13.068257 - ], - [ - -59.575341, - 13.068258 - ], - [ - -59.575329, - 13.068344 - ], - [ - -59.575344, - 13.068427 - ], - [ - -59.575432, - 13.068512 - ], - [ - -59.575512, - 13.068557 - ], - [ - -59.575616, - 13.068595 - ], - [ - -59.575766, - 13.068628 - ], - [ - -59.576045, - 13.068671 - ], - [ - -59.576218, - 13.068693 - ], - [ - -59.576323, - 13.068703 - ], - [ - -59.576657, - 13.068722 - ], - [ - -59.576934, - 13.068811 - ], - [ - -59.577187, - 13.068998 - ], - [ - -59.577221, - 13.069014 - ], - [ - -59.577485, - 13.06911 - ], - [ - -59.57815, - 13.069107 - ], - [ - -59.578898, - 13.069182 - ], - [ - -59.579016, - 13.069141 - ], - [ - -59.579015, - 13.069206 - ], - [ - -59.579176, - 13.069241 - ], - [ - -59.57961, - 13.069205 - ], - [ - -59.579963, - 13.069163 - ], - [ - -59.580134, - 13.069122 - ], - [ - -59.580183, - 13.069217 - ], - [ - -59.580681, - 13.069773 - ], - [ - -59.58068, - 13.069945 - ], - [ - -59.581105, - 13.070325 - ], - [ - -59.581125, - 13.07046 - ], - [ - -59.581663, - 13.070741 - ], - [ - -59.582042, - 13.070847 - ], - [ - -59.582455, - 13.071028 - ], - [ - -59.582858, - 13.071112 - ], - [ - -59.583362, - 13.071176 - ], - [ - -59.583777, - 13.071244 - ], - [ - -59.584144, - 13.071328 - ], - [ - -59.58461, - 13.071388 - ], - [ - -59.585439, - 13.071458 - ], - [ - -59.585693, - 13.071341 - ], - [ - -59.585894, - 13.07143 - ], - [ - -59.586025, - 13.071558 - ], - [ - -59.586122, - 13.07164 - ], - [ - -59.586293, - 13.071746 - ], - [ - -59.586869, - 13.072015 - ], - [ - -59.586993, - 13.072107 - ], - [ - -59.587041, - 13.072287 - ], - [ - -59.587131, - 13.072426 - ], - [ - -59.587188, - 13.072471 - ], - [ - -59.58741, - 13.072548 - ], - [ - -59.587422, - 13.072557 - ], - [ - -59.587426, - 13.072586 - ], - [ - -59.587404, - 13.07261 - ], - [ - -59.587351, - 13.072655 - ], - [ - -59.587341, - 13.072697 - ], - [ - -59.587347, - 13.07273 - ], - [ - -59.587376, - 13.072776 - ], - [ - -59.587431, - 13.072837 - ], - [ - -59.587521, - 13.072876 - ], - [ - -59.587615, - 13.072897 - ], - [ - -59.587757, - 13.07292 - ], - [ - -59.588102, - 13.073 - ], - [ - -59.588328, - 13.073063 - ], - [ - -59.588603, - 13.073176 - ], - [ - -59.588843, - 13.073258 - ], - [ - -59.589153, - 13.073327 - ], - [ - -59.58961, - 13.073359 - ], - [ - -59.589955, - 13.073349 - ], - [ - -59.590424, - 13.073294 - ], - [ - -59.590765, - 13.073182 - ], - [ - -59.590838, - 13.073178 - ], - [ - -59.5909, - 13.073186 - ], - [ - -59.591013, - 13.073241 - ], - [ - -59.591153, - 13.073294 - ], - [ - -59.591265, - 13.073317 - ], - [ - -59.591396, - 13.073329 - ], - [ - -59.591871, - 13.07336 - ], - [ - -59.591976, - 13.073341 - ], - [ - -59.5921, - 13.073483 - ], - [ - -59.592175, - 13.073452 - ], - [ - -59.592347, - 13.073444 - ], - [ - -59.592853, - 13.073459 - ], - [ - -59.593398, - 13.073468 - ], - [ - -59.593894, - 13.073464 - ], - [ - -59.593917, - 13.073418 - ], - [ - -59.594014, - 13.073391 - ], - [ - -59.594151, - 13.073689 - ], - [ - -59.59447, - 13.073729 - ], - [ - -59.594654, - 13.073713 - ], - [ - -59.594877, - 13.073782 - ], - [ - -59.595394, - 13.073729 - ], - [ - -59.595747, - 13.073682 - ], - [ - -59.595812, - 13.073628 - ], - [ - -59.595862, - 13.073592 - ], - [ - -59.595949, - 13.073673 - ], - [ - -59.595928, - 13.073754 - ], - [ - -59.596037, - 13.073806 - ], - [ - -59.59625957062217, - 13.073798721442648 - ], - [ - -59.91943359375001, - 9.958029972336439 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToLand.json deleted file mode 100644 index 7906a1dacf..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToLand.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "Feature", - "properties": { - "name": "gp-clip-ocean-cuba-channel-span.json" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -82.8973388671875, - 21.906100421878413 - ], - [ - -82.86712646484375, - 21.915019085230302 - ], - [ - -82.89459228515624, - 22.093274832590485 - ], - [ - -82.94952392578125, - 22.083094832921418 - ], - [ - -82.8973388671875, - 21.906100421878413 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToOcean.json deleted file mode 100644 index 44cc9b7860..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-cuba-channel-span.json/clipToOcean.json +++ /dev/null @@ -1,1125 +0,0 @@ -{ - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -82.94952392578125, - 22.083094832921418 - ], - [ - -82.90356948646247, - 21.927232616010667 - ], - [ - -82.902618, - 21.927256 - ], - [ - -82.901287, - 21.927396 - ], - [ - -82.899584, - 21.927786 - ], - [ - -82.899171, - 21.927901 - ], - [ - -82.898527, - 21.928177 - ], - [ - -82.897575, - 21.928565 - ], - [ - -82.896754, - 21.928695 - ], - [ - -82.896137, - 21.928655 - ], - [ - -82.895225, - 21.928446 - ], - [ - -82.894195, - 21.928003 - ], - [ - -82.893066, - 21.927424 - ], - [ - -82.892462, - 21.927653 - ], - [ - -82.891343, - 21.927394 - ], - [ - -82.889939, - 21.926837 - ], - [ - -82.888848, - 21.926797 - ], - [ - -82.886988, - 21.926582 - ], - [ - -82.885777, - 21.926459 - ], - [ - -82.884241, - 21.925729 - ], - [ - -82.883652, - 21.92556 - ], - [ - -82.882965, - 21.925523 - ], - [ - -82.882025, - 21.925575 - ], - [ - -82.88134, - 21.925792 - ], - [ - -82.880498, - 21.926168 - ], - [ - -82.87999, - 21.926475 - ], - [ - -82.879683, - 21.926643 - ], - [ - -82.879248, - 21.92673 - ], - [ - -82.878587, - 21.926745 - ], - [ - -82.87777, - 21.926938 - ], - [ - -82.876219, - 21.927709 - ], - [ - -82.875254, - 21.928063 - ], - [ - -82.873923, - 21.928117 - ], - [ - -82.871654, - 21.927709 - ], - [ - -82.870823, - 21.927738 - ], - [ - -82.870154, - 21.928027 - ], - [ - -82.8692095550432, - 21.92853853580912 - ], - [ - -82.88840428387806, - 22.053114124482853 - ], - [ - -82.888563, - 22.053062 - ], - [ - -82.889061, - 22.052454 - ], - [ - -82.889585, - 22.052868 - ], - [ - -82.890345, - 22.052722 - ], - [ - -82.890634, - 22.052382 - ], - [ - -82.891525, - 22.053694 - ], - [ - -82.891577, - 22.055273 - ], - [ - -82.889926, - 22.056828 - ], - [ - -82.889297, - 22.056876 - ], - [ - -82.889087, - 22.056366 - ], - [ - -82.88889373563971, - 22.056290712277317 - ], - [ - -82.89459228515624, - 22.093274832590485 - ], - [ - -82.91653240585146, - 22.089208862252164 - ], - [ - -82.916237, - 22.088317 - ], - [ - -82.917206, - 22.087297 - ], - [ - -82.918596, - 22.087346 - ], - [ - -82.919356, - 22.086641 - ], - [ - -82.919487, - 22.086107 - ], - [ - -82.92127, - 22.084698 - ], - [ - -82.925752, - 22.084722 - ], - [ - -82.92727322013518, - 22.087218361247466 - ], - [ - -82.94952392578125, - 22.083094832921418 - ] - ], - [ - [ - -82.92695, - 22.066728 - ], - [ - -82.926552, - 22.066923 - ], - [ - -82.926216, - 22.067312 - ], - [ - -82.925482, - 22.068478 - ], - [ - -82.925084, - 22.068555 - ], - [ - -82.924622, - 22.069061 - ], - [ - -82.924434, - 22.069255 - ], - [ - -82.924392, - 22.069624 - ], - [ - -82.923846, - 22.070052 - ], - [ - -82.923616, - 22.070557 - ], - [ - -82.923574, - 22.07114 - ], - [ - -82.922588, - 22.071218 - ], - [ - -82.922672, - 22.071879 - ], - [ - -82.922882, - 22.07219 - ], - [ - -82.923469, - 22.071451 - ], - [ - -82.923658, - 22.071879 - ], - [ - -82.923993, - 22.07116 - ], - [ - -82.924455, - 22.071082 - ], - [ - -82.924392, - 22.071646 - ], - [ - -82.925189, - 22.071587 - ], - [ - -82.925314, - 22.07217 - ], - [ - -82.925063, - 22.072637 - ], - [ - -82.92393, - 22.073025 - ], - [ - -82.923658, - 22.073395 - ], - [ - -82.922903, - 22.074386 - ], - [ - -82.921896, - 22.075027 - ], - [ - -82.920848, - 22.07561 - ], - [ - -82.919149, - 22.075707 - ], - [ - -82.918813, - 22.075299 - ], - [ - -82.918625, - 22.074658 - ], - [ - -82.918667, - 22.073803 - ], - [ - -82.917912, - 22.073142 - ], - [ - -82.91787, - 22.072423 - ], - [ - -82.919233, - 22.071509 - ], - [ - -82.921959, - 22.069508 - ], - [ - -82.923112, - 22.068925 - ], - [ - -82.924014, - 22.068303 - ], - [ - -82.92521, - 22.067661 - ], - [ - -82.925776, - 22.067078 - ], - [ - -82.926258, - 22.066184 - ], - [ - -82.926803, - 22.066184 - ], - [ - -82.92695, - 22.066728 - ] - ], - [ - [ - -82.92544, - 22.066398 - ], - [ - -82.924706, - 22.067467 - ], - [ - -82.923826, - 22.067895 - ], - [ - -82.922945, - 22.068206 - ], - [ - -82.922483, - 22.068555 - ], - [ - -82.922022, - 22.068905 - ], - [ - -82.921099, - 22.069702 - ], - [ - -82.920449, - 22.069527 - ], - [ - -82.920407, - 22.070168 - ], - [ - -82.919317, - 22.070965 - ], - [ - -82.918478, - 22.071296 - ], - [ - -82.916528, - 22.072442 - ], - [ - -82.915919, - 22.072384 - ], - [ - -82.915731, - 22.071956 - ], - [ - -82.914766, - 22.071743 - ], - [ - -82.914116, - 22.071393 - ], - [ - -82.91441, - 22.070654 - ], - [ - -82.914472, - 22.06978 - ], - [ - -82.914137, - 22.06978 - ], - [ - -82.91292, - 22.069974 - ], - [ - -82.912962, - 22.068653 - ], - [ - -82.912459, - 22.068419 - ], - [ - -82.912145, - 22.067778 - ], - [ - -82.91162, - 22.066942 - ], - [ - -82.912501, - 22.066165 - ], - [ - -82.912543, - 22.065815 - ], - [ - -82.913067, - 22.065796 - ], - [ - -82.913151, - 22.066165 - ], - [ - -82.913634, - 22.066515 - ], - [ - -82.914095, - 22.066767 - ], - [ - -82.914661, - 22.066903 - ], - [ - -82.914619, - 22.067525 - ], - [ - -82.915311, - 22.067234 - ], - [ - -82.916087, - 22.067137 - ], - [ - -82.916779, - 22.06772 - ], - [ - -82.917366, - 22.067739 - ], - [ - -82.920281, - 22.067642 - ], - [ - -82.920533, - 22.068108 - ], - [ - -82.920785, - 22.067739 - ], - [ - -82.921162, - 22.067759 - ], - [ - -82.92133, - 22.06807 - ], - [ - -82.921644, - 22.068089 - ], - [ - -82.922358, - 22.067875 - ], - [ - -82.923092, - 22.067292 - ], - [ - -82.923993, - 22.067214 - ], - [ - -82.924664, - 22.06667 - ], - [ - -82.92544, - 22.066398 - ] - ], - [ - [ - -82.911977, - 22.068206 - ], - [ - -82.911474, - 22.068283 - ], - [ - -82.911348, - 22.068089 - ], - [ - -82.911432, - 22.067759 - ], - [ - -82.911851, - 22.067778 - ], - [ - -82.911977, - 22.068206 - ] - ], - [ - [ - -82.908654, - 22.065094 - ], - [ - -82.908654, - 22.065721 - ], - [ - -82.908342, - 22.06584 - ], - [ - -82.908353, - 22.066328 - ], - [ - -82.908117, - 22.066427 - ], - [ - -82.908127, - 22.06594 - ], - [ - -82.908503, - 22.065104 - ], - [ - -82.908654, - 22.065094 - ] - ], - [ - [ - -82.908511, - 22.064609 - ], - [ - -82.907827, - 22.065977 - ], - [ - -82.907464, - 22.0663 - ], - [ - -82.906149, - 22.066711 - ], - [ - -82.905988, - 22.067171 - ], - [ - -82.905048, - 22.067096 - ], - [ - -82.904579, - 22.066798 - ], - [ - -82.904055, - 22.067134 - ], - [ - -82.90325, - 22.067407 - ], - [ - -82.902431, - 22.067445 - ], - [ - -82.902029, - 22.067246 - ], - [ - -82.902042, - 22.066425 - ], - [ - -82.902391, - 22.065728 - ], - [ - -82.903384, - 22.064074 - ], - [ - -82.903371, - 22.06334 - ], - [ - -82.903411, - 22.06283 - ], - [ - -82.903129, - 22.062059 - ], - [ - -82.903156, - 22.060019 - ], - [ - -82.90321, - 22.059272 - ], - [ - -82.903612, - 22.059098 - ], - [ - -82.903827, - 22.059583 - ], - [ - -82.904109, - 22.059969 - ], - [ - -82.904203, - 22.060579 - ], - [ - -82.904444, - 22.060591 - ], - [ - -82.904525, - 22.061462 - ], - [ - -82.904673, - 22.061673 - ], - [ - -82.905062, - 22.061051 - ], - [ - -82.90533, - 22.061151 - ], - [ - -82.90533, - 22.062768 - ], - [ - -82.905814, - 22.06283 - ], - [ - -82.906122, - 22.062569 - ], - [ - -82.906619, - 22.062357 - ], - [ - -82.906686, - 22.063141 - ], - [ - -82.906981, - 22.063017 - ], - [ - -82.907263, - 22.062755 - ], - [ - -82.907733, - 22.06283 - ], - [ - -82.907706, - 22.063116 - ], - [ - -82.907679, - 22.064049 - ], - [ - -82.907813, - 22.064584 - ], - [ - -82.907545, - 22.065492 - ], - [ - -82.908001, - 22.064746 - ], - [ - -82.908511, - 22.064609 - ] - ], - [ - [ - -82.904324, - 22.058178 - ], - [ - -82.904283, - 22.058464 - ], - [ - -82.903934, - 22.058713 - ], - [ - -82.903532, - 22.058837 - ], - [ - -82.903317, - 22.058974 - ], - [ - -82.903223, - 22.058775 - ], - [ - -82.903411, - 22.058601 - ], - [ - -82.903921, - 22.058364 - ], - [ - -82.904324, - 22.058178 - ] - ], - [ - [ - -82.904193, - 22.058055 - ], - [ - -82.902935, - 22.058638 - ], - [ - -82.902908, - 22.059245 - ], - [ - -82.902908, - 22.060484 - ], - [ - -82.902882, - 22.06199 - ], - [ - -82.903118, - 22.063764 - ], - [ - -82.901388, - 22.066582 - ], - [ - -82.901126, - 22.06663 - ], - [ - -82.900182, - 22.066606 - ], - [ - -82.900208, - 22.067432 - ], - [ - -82.899579, - 22.067651 - ], - [ - -82.899265, - 22.068015 - ], - [ - -82.898557, - 22.06804 - ], - [ - -82.898137, - 22.068768 - ], - [ - -82.897246, - 22.068817 - ], - [ - -82.896276, - 22.070323 - ], - [ - -82.8957, - 22.071173 - ], - [ - -82.89528, - 22.070542 - ], - [ - -82.895097, - 22.070007 - ], - [ - -82.895411, - 22.069594 - ], - [ - -82.895359, - 22.067019 - ], - [ - -82.895123, - 22.066218 - ], - [ - -82.89549, - 22.065489 - ], - [ - -82.894336, - 22.065634 - ], - [ - -82.893734, - 22.064201 - ], - [ - -82.893864, - 22.062816 - ], - [ - -82.894022, - 22.061942 - ], - [ - -82.894363, - 22.060921 - ], - [ - -82.895595, - 22.060387 - ], - [ - -82.89646, - 22.05961 - ], - [ - -82.897063, - 22.059585 - ], - [ - -82.897351, - 22.059221 - ], - [ - -82.898006, - 22.058832 - ], - [ - -82.898164, - 22.058322 - ], - [ - -82.899002, - 22.057642 - ], - [ - -82.900418, - 22.057156 - ], - [ - -82.900366, - 22.058711 - ], - [ - -82.899815, - 22.059391 - ], - [ - -82.900313, - 22.059221 - ], - [ - -82.900392, - 22.059828 - ], - [ - -82.898504, - 22.060824 - ], - [ - -82.8984, - 22.061918 - ], - [ - -82.897902, - 22.062039 - ], - [ - -82.897718, - 22.062598 - ], - [ - -82.897351, - 22.062719 - ], - [ - -82.897351, - 22.063545 - ], - [ - -82.897902, - 22.062986 - ], - [ - -82.898452, - 22.062719 - ], - [ - -82.89798, - 22.063812 - ], - [ - -82.899107, - 22.063764 - ], - [ - -82.899107, - 22.065051 - ], - [ - -82.898583, - 22.066776 - ], - [ - -82.899448, - 22.06527 - ], - [ - -82.89971, - 22.063788 - ], - [ - -82.900811, - 22.063594 - ], - [ - -82.901545, - 22.062914 - ], - [ - -82.902201, - 22.060071 - ], - [ - -82.902148, - 22.059221 - ], - [ - -82.902787, - 22.05821 - ], - [ - -82.903747, - 22.057763 - ], - [ - -82.904193, - 22.058055 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToLand.json deleted file mode 100644 index ae03fa8d22..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToLand.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "type": "Feature", - "properties": { - "name": "gp-clip-ocean-inner-channel-islands.json" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -120.00091552734375, - 33.97553819495448 - ], - [ - -119.99576568603516, - 33.95959297365403 - ], - [ - -119.96246337890624, - 33.94392957889264 - ], - [ - -119.91199493408203, - 33.95133445208438 - ], - [ - -119.86255645751955, - 33.973260489231485 - ], - [ - -119.86633300781249, - 34.01197318692261 - ], - [ - -119.88899230957031, - 34.024209560512354 - ], - [ - -119.99679565429688, - 33.998881160274586 - ], - [ - -120.00091552734375, - 33.97553819495448 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToOcean.json deleted file mode 100644 index d6ff2c4dcf..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-inner-channel-islands.json/clipToOcean.json +++ /dev/null @@ -1,1743 +0,0 @@ -{ - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -120.00003926083207, - 33.98050307094961 - ], - [ - -119.999589, - 33.980591 - ], - [ - -119.998877, - 33.980709 - ], - [ - -119.997827, - 33.980936 - ], - [ - -119.997393, - 33.981087 - ], - [ - -119.997072, - 33.981222 - ], - [ - -119.996777, - 33.981361 - ], - [ - -119.996421, - 33.98162 - ], - [ - -119.996186, - 33.981743 - ], - [ - -119.996022, - 33.981811 - ], - [ - -119.995918, - 33.981772 - ], - [ - -119.995779, - 33.981895 - ], - [ - -119.995614, - 33.981796 - ], - [ - -119.995448, - 33.981847 - ], - [ - -119.995275, - 33.981854 - ], - [ - -119.994772, - 33.982067 - ], - [ - -119.994537, - 33.982102 - ], - [ - -119.993035, - 33.982065 - ], - [ - -119.992775, - 33.982038 - ], - [ - -119.992445, - 33.981969 - ], - [ - -119.992237, - 33.981899 - ], - [ - -119.991985, - 33.981926 - ], - [ - -119.991525, - 33.98205 - ], - [ - -119.990961, - 33.982224 - ], - [ - -119.990353, - 33.982376 - ], - [ - -119.989676, - 33.98258 - ], - [ - -119.988808, - 33.982768 - ], - [ - -119.987653, - 33.983082 - ], - [ - -119.98689, - 33.983327 - ], - [ - -119.98471, - 33.983482 - ], - [ - -119.98398, - 33.983541 - ], - [ - -119.983217, - 33.983563 - ], - [ - -119.982047, - 33.983376 - ], - [ - -119.981328, - 33.983278 - ], - [ - -119.980685, - 33.983109 - ], - [ - -119.977975, - 33.981556 - ], - [ - -119.977526, - 33.981333 - ], - [ - -119.977775, - 33.9807 - ], - [ - -119.978348, - 33.980233 - ], - [ - -119.978556, - 33.979852 - ], - [ - -119.978765, - 33.979511 - ], - [ - -119.978964, - 33.979292 - ], - [ - -119.97919, - 33.978985 - ], - [ - -119.97932, - 33.978756 - ], - [ - -119.979433, - 33.978441 - ], - [ - -119.979598, - 33.978104 - ], - [ - -119.97978, - 33.977482 - ], - [ - -119.979824, - 33.977114 - ], - [ - -119.97985, - 33.976655 - ], - [ - -119.979833, - 33.976497 - ], - [ - -119.979867, - 33.976327 - ], - [ - -119.979832, - 33.976143 - ], - [ - -119.979858, - 33.975945 - ], - [ - -119.979815, - 33.975793 - ], - [ - -119.979832, - 33.975627 - ], - [ - -119.979676, - 33.975301 - ], - [ - -119.979745, - 33.975086 - ], - [ - -119.979746, - 33.97494 - ], - [ - -119.979676, - 33.974758 - ], - [ - -119.979667, - 33.974636 - ], - [ - -119.979685, - 33.974411 - ], - [ - -119.979485, - 33.973613 - ], - [ - -119.979485, - 33.9732 - ], - [ - -119.979589, - 33.972847 - ], - [ - -119.97958, - 33.972594 - ], - [ - -119.979546, - 33.972424 - ], - [ - -119.97959, - 33.972189 - ], - [ - -119.979581, - 33.971686 - ], - [ - -119.979624, - 33.971117 - ], - [ - -119.979685, - 33.970914 - ], - [ - -119.979659, - 33.970634 - ], - [ - -119.979745, - 33.970194 - ], - [ - -119.979711, - 33.969984 - ], - [ - -119.979772, - 33.969442 - ], - [ - -119.979754, - 33.969207 - ], - [ - -119.979615, - 33.968818 - ], - [ - -119.979615, - 33.968568 - ], - [ - -119.979537, - 33.968399 - ], - [ - -119.979364, - 33.96814 - ], - [ - -119.979225, - 33.967822 - ], - [ - -119.978956, - 33.967434 - ], - [ - -119.978843, - 33.967362 - ], - [ - -119.978721, - 33.967257 - ], - [ - -119.97866, - 33.967235 - ], - [ - -119.978391, - 33.967389 - ], - [ - -119.978261, - 33.967415 - ], - [ - -119.978113, - 33.967416 - ], - [ - -119.977983, - 33.967352 - ], - [ - -119.977888, - 33.967279 - ], - [ - -119.977775, - 33.967114 - ], - [ - -119.977723, - 33.966955 - ], - [ - -119.977714, - 33.966741 - ], - [ - -119.977766, - 33.966508 - ], - [ - -119.977931, - 33.965996 - ], - [ - -119.977914, - 33.965594 - ], - [ - -119.978148, - 33.964624 - ], - [ - -119.978261, - 33.96337 - ], - [ - -119.9782, - 33.962818 - ], - [ - -119.978105, - 33.962534 - ], - [ - -119.977992, - 33.962268 - ], - [ - -119.977714, - 33.961812 - ], - [ - -119.977384, - 33.961347 - ], - [ - -119.977028, - 33.960881 - ], - [ - -119.976924, - 33.960578 - ], - [ - -119.976968, - 33.960242 - ], - [ - -119.97715, - 33.959223 - ], - [ - -119.977184, - 33.958759 - ], - [ - -119.977184, - 33.958264 - ], - [ - -119.97715, - 33.958006 - ], - [ - -119.977054, - 33.957533 - ], - [ - -119.976907, - 33.957071 - ], - [ - -119.976456, - 33.956353 - ], - [ - -119.976256, - 33.956116 - ], - [ - -119.9761, - 33.956004 - ], - [ - -119.975856, - 33.955928 - ], - [ - -119.975266, - 33.955848 - ], - [ - -119.974416, - 33.955518 - ], - [ - -119.97412, - 33.955331 - ], - [ - -119.973756, - 33.955135 - ], - [ - -119.973487, - 33.954955 - ], - [ - -119.9732, - 33.954797 - ], - [ - -119.972784, - 33.954469 - ], - [ - -119.972523, - 33.954208 - ], - [ - -119.972263, - 33.953822 - ], - [ - -119.971699, - 33.953137 - ], - [ - -119.971256, - 33.952504 - ], - [ - -119.971098, - 33.952269 - ], - [ - -119.970962, - 33.952051 - ], - [ - -119.97075, - 33.951662 - ], - [ - -119.970509, - 33.951575 - ], - [ - -119.970093, - 33.951198 - ], - [ - -119.970475, - 33.950991 - ], - [ - -119.970683, - 33.950847 - ], - [ - -119.9709, - 33.95058 - ], - [ - -119.970996, - 33.950294 - ], - [ - -119.971134, - 33.949968 - ], - [ - -119.971186, - 33.94976 - ], - [ - -119.971186, - 33.949571 - ], - [ - -119.97123, - 33.949297 - ], - [ - -119.971177, - 33.948811 - ], - [ - -119.971195, - 33.948372 - ], - [ - -119.97114941070832, - 33.9480149638631 - ], - [ - -119.96246337890624, - 33.94392957889264 - ], - [ - -119.91199493408203, - 33.95133445208438 - ], - [ - -119.86255645751955, - 33.973260489231485 - ], - [ - -119.86300377700329, - 33.977845876053365 - ], - [ - -119.863219, - 33.977982 - ], - [ - -119.863445, - 33.978089 - ], - [ - -119.863714, - 33.978191 - ], - [ - -119.863879, - 33.978371 - ], - [ - -119.864278, - 33.978636 - ], - [ - -119.864556, - 33.978719 - ], - [ - -119.865224, - 33.979182 - ], - [ - -119.865858, - 33.97946 - ], - [ - -119.866196, - 33.979584 - ], - [ - -119.866456, - 33.979712 - ], - [ - -119.8667, - 33.979853 - ], - [ - -119.867004, - 33.97998 - ], - [ - -119.867403, - 33.980083 - ], - [ - -119.867776, - 33.980212 - ], - [ - -119.868523, - 33.980357 - ], - [ - -119.868887, - 33.980362 - ], - [ - -119.869234, - 33.980337 - ], - [ - -119.869964, - 33.980416 - ], - [ - -119.870337, - 33.980469 - ], - [ - -119.871005, - 33.980639 - ], - [ - -119.871335, - 33.980695 - ], - [ - -119.87163, - 33.980686 - ], - [ - -119.871787, - 33.980587 - ], - [ - -119.872082, - 33.980274 - ], - [ - -119.872221, - 33.980185 - ], - [ - -119.872637, - 33.980424 - ], - [ - -119.872872, - 33.980454 - ], - [ - -119.873115, - 33.980407 - ], - [ - -119.873375, - 33.980321 - ], - [ - -119.87354, - 33.980219 - ], - [ - -119.873696, - 33.980077 - ], - [ - -119.873922, - 33.980003 - ], - [ - -119.874226, - 33.980169 - ], - [ - -119.87426, - 33.980318 - ], - [ - -119.874243, - 33.980471 - ], - [ - -119.874165, - 33.980692 - ], - [ - -119.874217, - 33.981054 - ], - [ - -119.874304, - 33.98123 - ], - [ - -119.874512, - 33.98153 - ], - [ - -119.874938, - 33.981967 - ], - [ - -119.875094, - 33.982206 - ], - [ - -119.875172, - 33.98242 - ], - [ - -119.875337, - 33.982766 - ], - [ - -119.875623, - 33.983186 - ], - [ - -119.875962, - 33.984006 - ], - [ - -119.876179, - 33.984622 - ], - [ - -119.876352, - 33.984899 - ], - [ - -119.876596, - 33.985236 - ], - [ - -119.876977, - 33.985895 - ], - [ - -119.876934, - 33.986401 - ], - [ - -119.876952, - 33.986598 - ], - [ - -119.877125, - 33.987201 - ], - [ - -119.87729, - 33.987645 - ], - [ - -119.877342, - 33.987847 - ], - [ - -119.877464, - 33.988143 - ], - [ - -119.877811, - 33.988706 - ], - [ - -119.877985, - 33.98892 - ], - [ - -119.878245, - 33.989148 - ], - [ - -119.878853, - 33.989607 - ], - [ - -119.878913, - 33.98978 - ], - [ - -119.878931, - 33.989884 - ], - [ - -119.879035, - 33.990031 - ], - [ - -119.879226, - 33.990126 - ], - [ - -119.879399, - 33.99018 - ], - [ - -119.879451, - 33.990273 - ], - [ - -119.879434, - 33.990372 - ], - [ - -119.879322, - 33.990473 - ], - [ - -119.879157, - 33.990509 - ], - [ - -119.879026, - 33.99058 - ], - [ - -119.879174, - 33.990735 - ], - [ - -119.879408, - 33.990835 - ], - [ - -119.879521, - 33.990956 - ], - [ - -119.879703, - 33.991251 - ], - [ - -119.879756, - 33.991369 - ], - [ - -119.87979, - 33.991517 - ], - [ - -119.879929, - 33.99166 - ], - [ - -119.880086, - 33.991718 - ], - [ - -119.880294, - 33.991685 - ], - [ - -119.880536, - 33.991614 - ], - [ - -119.880841, - 33.991618 - ], - [ - -119.880979, - 33.991736 - ], - [ - -119.881118, - 33.991812 - ], - [ - -119.881274, - 33.991949 - ], - [ - -119.88137, - 33.992129 - ], - [ - -119.881378, - 33.992244 - ], - [ - -119.881448, - 33.992393 - ], - [ - -119.881491, - 33.992711 - ], - [ - -119.88144, - 33.992825 - ], - [ - -119.881205, - 33.992993 - ], - [ - -119.880988, - 33.993102 - ], - [ - -119.880971, - 33.993259 - ], - [ - -119.881153, - 33.993296 - ], - [ - -119.881335, - 33.993201 - ], - [ - -119.881492, - 33.993178 - ], - [ - -119.881509, - 33.993388 - ], - [ - -119.88137, - 33.993445 - ], - [ - -119.881318, - 33.993649 - ], - [ - -119.881188, - 33.993632 - ], - [ - -119.881084, - 33.993533 - ], - [ - -119.880988, - 33.993519 - ], - [ - -119.880858, - 33.993613 - ], - [ - -119.880754, - 33.993745 - ], - [ - -119.88071, - 33.993875 - ], - [ - -119.880719, - 33.994028 - ], - [ - -119.880893, - 33.994378 - ], - [ - -119.881032, - 33.994532 - ], - [ - -119.881223, - 33.994672 - ], - [ - -119.881266, - 33.994759 - ], - [ - -119.881205, - 33.994831 - ], - [ - -119.880997, - 33.994916 - ], - [ - -119.880927, - 33.995093 - ], - [ - -119.881005, - 33.995295 - ], - [ - -119.881092, - 33.995437 - ], - [ - -119.881075, - 33.995615 - ], - [ - -119.881161, - 33.995795 - ], - [ - -119.881318, - 33.99593 - ], - [ - -119.881335, - 33.99611 - ], - [ - -119.881379, - 33.996208 - ], - [ - -119.881448, - 33.996298 - ], - [ - -119.881544, - 33.996857 - ], - [ - -119.881726, - 33.997103 - ], - [ - -119.881865, - 33.997232 - ], - [ - -119.882047, - 33.997352 - ], - [ - -119.882273, - 33.997448 - ], - [ - -119.882472, - 33.997507 - ], - [ - -119.882759, - 33.997652 - ], - [ - -119.882846, - 33.997762 - ], - [ - -119.882898, - 33.99789 - ], - [ - -119.882872, - 33.998065 - ], - [ - -119.88282, - 33.998169 - ], - [ - -119.882585, - 33.998395 - ], - [ - -119.882568, - 33.998508 - ], - [ - -119.882629, - 33.998629 - ], - [ - -119.882802, - 33.998649 - ], - [ - -119.883202, - 33.9986 - ], - [ - -119.883297, - 33.998621 - ], - [ - -119.883341, - 33.998773 - ], - [ - -119.883306, - 33.998968 - ], - [ - -119.883323, - 33.999122 - ], - [ - -119.883392, - 33.999374 - ], - [ - -119.883532, - 33.999537 - ], - [ - -119.88367, - 33.99964 - ], - [ - -119.883836, - 33.999682 - ], - [ - -119.883913, - 33.999759 - ], - [ - -119.883818, - 33.999853 - ], - [ - -119.883375, - 33.999903 - ], - [ - -119.88302, - 33.999894 - ], - [ - -119.882854, - 33.999903 - ], - [ - -119.882759, - 33.999996 - ], - [ - -119.882698, - 34.000138 - ], - [ - -119.882691, - 34.000451 - ], - [ - -119.88269, - 34.000519 - ], - [ - -119.882785, - 34.000694 - ], - [ - -119.882959, - 34.000836 - ], - [ - -119.883072, - 34.000972 - ], - [ - -119.883245, - 34.00113 - ], - [ - -119.883714, - 34.001252 - ], - [ - -119.883939, - 34.001287 - ], - [ - -119.884122, - 34.001438 - ], - [ - -119.884243, - 34.001669 - ], - [ - -119.884365, - 34.001701 - ], - [ - -119.884469, - 34.001772 - ], - [ - -119.884504, - 34.001885 - ], - [ - -119.884486, - 34.001998 - ], - [ - -119.884504, - 34.002102 - ], - [ - -119.884591, - 34.002198 - ], - [ - -119.884495, - 34.002365 - ], - [ - -119.884478, - 34.002498 - ], - [ - -119.884547, - 34.002596 - ], - [ - -119.884556, - 34.002689 - ], - [ - -119.884703, - 34.002814 - ], - [ - -119.884912, - 34.002905 - ], - [ - -119.885033, - 34.003018 - ], - [ - -119.885051, - 34.00308 - ], - [ - -119.884972, - 34.00315 - ], - [ - -119.884782, - 34.003224 - ], - [ - -119.884738, - 34.003286 - ], - [ - -119.884816, - 34.003374 - ], - [ - -119.884894, - 34.003423 - ], - [ - -119.885042, - 34.00363 - ], - [ - -119.885042, - 34.003729 - ], - [ - -119.885129, - 34.00385 - ], - [ - -119.885129, - 34.003958 - ], - [ - -119.885285, - 34.004194 - ], - [ - -119.885268, - 34.004266 - ], - [ - -119.885329, - 34.004414 - ], - [ - -119.885528, - 34.004548 - ], - [ - -119.885528, - 34.004642 - ], - [ - -119.885615, - 34.004708 - ], - [ - -119.885641, - 34.004997 - ], - [ - -119.885624, - 34.005086 - ], - [ - -119.885442, - 34.005192 - ], - [ - -119.885155, - 34.005291 - ], - [ - -119.885112, - 34.005396 - ], - [ - -119.885198, - 34.00547 - ], - [ - -119.885302, - 34.005601 - ], - [ - -119.885302, - 34.00575 - ], - [ - -119.885337, - 34.00587 - ], - [ - -119.885468, - 34.005907 - ], - [ - -119.88585, - 34.005673 - ], - [ - -119.885954, - 34.005676 - ], - [ - -119.886006, - 34.005804 - ], - [ - -119.886006, - 34.006309 - ], - [ - -119.885928, - 34.006392 - ], - [ - -119.885858, - 34.006532 - ], - [ - -119.885945, - 34.006602 - ], - [ - -119.88604, - 34.006841 - ], - [ - -119.886188, - 34.006922 - ], - [ - -119.886266, - 34.00689 - ], - [ - -119.886405, - 34.006661 - ], - [ - -119.886526, - 34.006569 - ], - [ - -119.886639, - 34.006642 - ], - [ - -119.886813, - 34.00689 - ], - [ - -119.886934, - 34.006938 - ], - [ - -119.887039, - 34.007063 - ], - [ - -119.887117, - 34.007238 - ], - [ - -119.887256, - 34.007325 - ], - [ - -119.887325, - 34.007478 - ], - [ - -119.887386, - 34.007748 - ], - [ - -119.887342, - 34.007922 - ], - [ - -119.887186, - 34.008139 - ], - [ - -119.887038, - 34.008296 - ], - [ - -119.887004, - 34.008434 - ], - [ - -119.886987, - 34.008641 - ], - [ - -119.886908, - 34.008801 - ], - [ - -119.8869, - 34.008902 - ], - [ - -119.887004, - 34.008982 - ], - [ - -119.887074, - 34.008999 - ], - [ - -119.886995, - 34.009149 - ], - [ - -119.886856, - 34.009248 - ], - [ - -119.886709, - 34.009428 - ], - [ - -119.886631, - 34.009443 - ], - [ - -119.8865, - 34.009325 - ], - [ - -119.886362, - 34.00925 - ], - [ - -119.885979, - 34.009161 - ], - [ - -119.88585, - 34.009099 - ], - [ - -119.885659, - 34.008921 - ], - [ - -119.885537, - 34.00885 - ], - [ - -119.885372, - 34.008803 - ], - [ - -119.884912, - 34.008936 - ], - [ - -119.884678, - 34.009047 - ], - [ - -119.884504, - 34.009144 - ], - [ - -119.884434, - 34.00923 - ], - [ - -119.884374, - 34.009463 - ], - [ - -119.884252, - 34.009694 - ], - [ - -119.883731, - 34.01024 - ], - [ - -119.88361, - 34.010439 - ], - [ - -119.88348, - 34.010709 - ], - [ - -119.882924, - 34.011288 - ], - [ - -119.882785, - 34.011498 - ], - [ - -119.882673, - 34.011829 - ], - [ - -119.882534, - 34.012044 - ], - [ - -119.882447, - 34.012233 - ], - [ - -119.882408, - 34.012331 - ], - [ - -119.882256, - 34.012715 - ], - [ - -119.88216, - 34.012909 - ], - [ - -119.882126, - 34.013041 - ], - [ - -119.882143, - 34.013298 - ], - [ - -119.882256, - 34.013472 - ], - [ - -119.88242, - 34.013542 - ], - [ - -119.882542, - 34.013635 - ], - [ - -119.882594, - 34.013805 - ], - [ - -119.882447, - 34.014203 - ], - [ - -119.882177, - 34.014493 - ], - [ - -119.882126, - 34.01465 - ], - [ - -119.882152, - 34.014754 - ], - [ - -119.882221, - 34.01488 - ], - [ - -119.882256, - 34.01514 - ], - [ - -119.882351, - 34.015552 - ], - [ - -119.882334, - 34.015694 - ], - [ - -119.88223, - 34.015856 - ], - [ - -119.882047, - 34.016011 - ], - [ - -119.8819, - 34.0161 - ], - [ - -119.881752, - 34.016164 - ], - [ - -119.881605, - 34.016137 - ], - [ - -119.881397, - 34.016193 - ], - [ - -119.881214, - 34.016274 - ], - [ - -119.881006, - 34.016298 - ], - [ - -119.880172, - 34.016874 - ], - [ - -119.879808, - 34.017232 - ], - [ - -119.879461, - 34.017804 - ], - [ - -119.879201, - 34.018339 - ], - [ - -119.879053, - 34.018682 - ], - [ - -119.8790030482019, - 34.018815204794954 - ], - [ - -119.88899230957031, - 34.024209560512354 - ], - [ - -119.99679565429688, - 33.998881160274586 - ], - [ - -120.00003926083207, - 33.98050307094961 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToLand.json deleted file mode 100644 index ecf4e6cb0d..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToLand.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "Feature", - "properties": { - "name": "gp-clip-ocean-no-land-eez.json" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -64.85990449042059, - 32.23756147854181 - ], - [ - -64.85930874141398, - 32.24136530490877 - ], - [ - -64.84073295619807, - 32.24287570663742 - ], - [ - -64.83552857489327, - 32.23843266647438 - ], - [ - -64.85990449042059, - 32.23756147854181 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToOcean.json deleted file mode 100644 index ecf4e6cb0d..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-no-land-eez.json/clipToOcean.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "Feature", - "properties": { - "name": "gp-clip-ocean-no-land-eez.json" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -64.85990449042059, - 32.23756147854181 - ], - [ - -64.85930874141398, - 32.24136530490877 - ], - [ - -64.84073295619807, - 32.24287570663742 - ], - [ - -64.83552857489327, - 32.23843266647438 - ], - [ - -64.85990449042059, - 32.23756147854181 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToLand.json deleted file mode 100644 index fe0a214ebc..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToLand.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -50.0537109375, - 15.072123545811683 - ], - [ - -60.13422961546577, - 8.283416579624516 - ], - [ - -59.78678698851251, - 8.184199738096492 - ], - [ - -50.09765625, - 14.944784875088372 - ], - [ - -50.0537109375, - 15.072123545811683 - ] - ] - ] - }, - "properties": { - "name": "gp-clip-ocean-north-zone-extend.json" - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToOcean.json deleted file mode 100644 index 776ebbfb8a..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone-extend.json/clipToOcean.json +++ /dev/null @@ -1,1643 +0,0 @@ -{ - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -59.90170532968549, - 8.440009636897917 - ], - [ - -59.901645, - 8.439825 - ], - [ - -59.900454, - 8.437288 - ], - [ - -59.897783, - 8.432258 - ], - [ - -59.895154, - 8.427726 - ], - [ - -59.893996, - 8.425932 - ], - [ - -59.892451, - 8.423364 - ], - [ - -59.891646, - 8.422494 - ], - [ - -59.89082, - 8.420997 - ], - [ - -59.890369, - 8.420276 - ], - [ - -59.889382, - 8.418185 - ], - [ - -59.888545, - 8.415946 - ], - [ - -59.887708, - 8.414354 - ], - [ - -59.886185, - 8.411053 - ], - [ - -59.885648, - 8.410023 - ], - [ - -59.885209, - 8.409726 - ], - [ - -59.884415, - 8.407847 - ], - [ - -59.883363, - 8.405905 - ], - [ - -59.882913, - 8.405088 - ], - [ - -59.882559, - 8.403952 - ], - [ - -59.882001, - 8.402477 - ], - [ - -59.880745, - 8.400354 - ], - [ - -59.879383, - 8.398157 - ], - [ - -59.87801, - 8.395228 - ], - [ - -59.877334, - 8.394559 - ], - [ - -59.876722, - 8.393307 - ], - [ - -59.875746, - 8.392341 - ], - [ - -59.874608, - 8.390685 - ], - [ - -59.8739, - 8.389762 - ], - [ - -59.873246, - 8.388679 - ], - [ - -59.872334, - 8.387533 - ], - [ - -59.871755, - 8.386705 - ], - [ - -59.871068, - 8.38611 - ], - [ - -59.869877, - 8.384497 - ], - [ - -59.86859, - 8.383457 - ], - [ - -59.867431, - 8.382438 - ], - [ - -59.865929, - 8.381079 - ], - [ - -59.864942, - 8.380134 - ], - [ - -59.863944, - 8.378373 - ], - [ - -59.863214, - 8.377343 - ], - [ - -59.863494, - 8.376696 - ], - [ - -59.863182, - 8.37625 - ], - [ - -59.86271, - 8.376207 - ], - [ - -59.862281, - 8.376292 - ], - [ - -59.86094, - 8.37557 - ], - [ - -59.859899, - 8.374796 - ], - [ - -59.859148, - 8.37419 - ], - [ - -59.8581, - 8.37311 - ], - [ - -59.857657, - 8.372641 - ], - [ - -59.85726, - 8.371962 - ], - [ - -59.855275, - 8.369934 - ], - [ - -59.85269, - 8.368257 - ], - [ - -59.849685, - 8.366314 - ], - [ - -59.84784, - 8.365317 - ], - [ - -59.847422, - 8.365752 - ], - [ - -59.84688, - 8.36578 - ], - [ - -59.84711, - 8.36468 - ], - [ - -59.846388, - 8.363674 - ], - [ - -59.846295, - 8.363544 - ], - [ - -59.844353, - 8.361782 - ], - [ - -59.842111, - 8.36019 - ], - [ - -59.840308, - 8.359532 - ], - [ - -59.83938, - 8.35936 - ], - [ - -59.838431, - 8.359245 - ], - [ - -59.838098, - 8.359447 - ], - [ - -59.83757, - 8.35988 - ], - [ - -59.83758, - 8.3604 - ], - [ - -59.83732, - 8.3604 - ], - [ - -59.836628, - 8.360158 - ], - [ - -59.83489, - 8.359659 - ], - [ - -59.833936, - 8.35933 - ], - [ - -59.831854, - 8.359086 - ], - [ - -59.831243, - 8.359288 - ], - [ - -59.83002, - 8.359988 - ], - [ - -59.829515, - 8.360349 - ], - [ - -59.828956, - 8.359767 - ], - [ - -59.828968, - 8.359457 - ], - [ - -59.828646, - 8.35933 - ], - [ - -59.827144, - 8.359065 - ], - [ - -59.8262, - 8.358874 - ], - [ - -59.825391, - 8.359436 - ], - [ - -59.823858, - 8.360513 - ], - [ - -59.823185, - 8.360137 - ], - [ - -59.822075, - 8.360638 - ], - [ - -59.821951, - 8.360519 - ], - [ - -59.82179, - 8.360338 - ], - [ - -59.821522, - 8.359457 - ], - [ - -59.82016, - 8.358343 - ], - [ - -59.819344, - 8.358598 - ], - [ - -59.81895, - 8.35821 - ], - [ - -59.81765, - 8.35822 - ], - [ - -59.817198, - 8.358226 - ], - [ - -59.816673, - 8.358438 - ], - [ - -59.816297, - 8.358629 - ], - [ - -59.815654, - 8.358555 - ], - [ - -59.815557, - 8.357515 - ], - [ - -59.814269, - 8.357183 - ], - [ - -59.813862, - 8.356836 - ], - [ - -59.813372, - 8.356324 - ], - [ - -59.812863, - 8.355857 - ], - [ - -59.811929, - 8.356196 - ], - [ - -59.810337, - 8.355645 - ], - [ - -59.810075, - 8.355259 - ], - [ - -59.809298, - 8.354881 - ], - [ - -59.808703, - 8.354732 - ], - [ - -59.807303, - 8.354011 - ], - [ - -59.807048, - 8.353777 - ], - [ - -59.807172, - 8.353354 - ], - [ - -59.806668, - 8.353301 - ], - [ - -59.806475, - 8.35346 - ], - [ - -59.805928, - 8.353258 - ], - [ - -59.804973, - 8.352738 - ], - [ - -59.804233, - 8.352929 - ], - [ - -59.803674, - 8.352504 - ], - [ - -59.802528, - 8.352355 - ], - [ - -59.801191, - 8.351676 - ], - [ - -59.800575, - 8.3514 - ], - [ - -59.799302, - 8.350827 - ], - [ - -59.797902, - 8.350204 - ], - [ - -59.783997, - 8.343112 - ], - [ - -59.782175, - 8.343999 - ], - [ - -59.780785, - 8.34466 - ], - [ - -59.781697, - 8.345976 - ], - [ - -59.782137, - 8.346857 - ], - [ - -59.782823, - 8.347876 - ], - [ - -59.782673, - 8.349108 - ], - [ - -59.782405, - 8.349543 - ], - [ - -59.78217, - 8.34998 - ], - [ - -59.781697, - 8.35104 - ], - [ - -59.780785, - 8.352038 - ], - [ - -59.778972, - 8.352929 - ], - [ - -59.77733, - 8.353258 - ], - [ - -59.77483, - 8.353237 - ], - [ - -59.768469, - 8.360476 - ], - [ - -59.76908, - 8.36114 - ], - [ - -59.772405, - 8.363674 - ], - [ - -59.774159, - 8.364697 - ], - [ - -59.779432, - 8.367663 - ], - [ - -59.782061, - 8.369218 - ], - [ - -59.784064, - 8.370344 - ], - [ - -59.785716, - 8.371374 - ], - [ - -59.787521, - 8.372529 - ], - [ - -59.7888, - 8.37336 - ], - [ - -59.791884, - 8.375229 - ], - [ - -59.793772, - 8.37646 - ], - [ - -59.79763, - 8.37897 - ], - [ - -59.799478, - 8.379694 - ], - [ - -59.801442, - 8.380655 - ], - [ - -59.802198, - 8.381186 - ], - [ - -59.803154, - 8.381703 - ], - [ - -59.80413, - 8.38242 - ], - [ - -59.804787, - 8.382812 - ], - [ - -59.80557, - 8.383423 - ], - [ - -59.80594, - 8.3838 - ], - [ - -59.80698, - 8.38431 - ], - [ - -59.807505, - 8.384645 - ], - [ - -59.808028, - 8.384986 - ], - [ - -59.809196, - 8.385718 - ], - [ - -59.809847, - 8.386224 - ], - [ - -59.810898, - 8.386734 - ], - [ - -59.811951, - 8.38743 - ], - [ - -59.813185, - 8.388385 - ], - [ - -59.814043, - 8.388932 - ], - [ - -59.814632, - 8.38965 - ], - [ - -59.815267, - 8.390112 - ], - [ - -59.815729, - 8.390696 - ], - [ - -59.815943, - 8.390791 - ], - [ - -59.816158, - 8.390887 - ], - [ - -59.815997, - 8.391407 - ], - [ - -59.81583, - 8.39197 - ], - [ - -59.815503, - 8.392075 - ], - [ - -59.815321, - 8.392298 - ], - [ - -59.814645, - 8.392891 - ], - [ - -59.814785, - 8.393345 - ], - [ - -59.815195, - 8.393154 - ], - [ - -59.815782, - 8.39302 - ], - [ - -59.8159, - 8.393052 - ], - [ - -59.816587, - 8.393275 - ], - [ - -59.816909, - 8.39336 - ], - [ - -59.817274, - 8.393731 - ], - [ - -59.817585, - 8.394453 - ], - [ - -59.817992, - 8.394559 - ], - [ - -59.81854, - 8.394432 - ], - [ - -59.818958, - 8.394432 - ], - [ - -59.819473, - 8.394347 - ], - [ - -59.819452, - 8.393816 - ], - [ - -59.819376, - 8.393275 - ], - [ - -59.819312, - 8.392956 - ], - [ - -59.819226, - 8.392479 - ], - [ - -59.81957, - 8.392309 - ], - [ - -59.82001, - 8.3925 - ], - [ - -59.820181, - 8.393137 - ], - [ - -59.820128, - 8.393965 - ], - [ - -59.82001, - 8.394644 - ], - [ - -59.819591, - 8.395196 - ], - [ - -59.818958, - 8.395451 - ], - [ - -59.818164, - 8.395737 - ], - [ - -59.817263, - 8.396204 - ], - [ - -59.816166, - 8.396275 - ], - [ - -59.815718, - 8.396541 - ], - [ - -59.815356, - 8.396589 - ], - [ - -59.813719, - 8.397194 - ], - [ - -59.812749, - 8.397814 - ], - [ - -59.812228, - 8.398 - ], - [ - -59.811818, - 8.398159 - ], - [ - -59.811431, - 8.398143 - ], - [ - -59.81083, - 8.398494 - ], - [ - -59.809872, - 8.398834 - ], - [ - -59.809526, - 8.399152 - ], - [ - -59.808636, - 8.399534 - ], - [ - -59.808162, - 8.399873 - ], - [ - -59.806702, - 8.400325 - ], - [ - -59.804849, - 8.400671 - ], - [ - -59.801152, - 8.401622 - ], - [ - -59.799325, - 8.401918 - ], - [ - -59.797373, - 8.402093 - ], - [ - -59.795057, - 8.402149 - ], - [ - -59.793459, - 8.40218 - ], - [ - -59.790761, - 8.402126 - ], - [ - -59.788967, - 8.402189 - ], - [ - -59.78798, - 8.40247 - ], - [ - -59.78777, - 8.40243 - ], - [ - -59.786525, - 8.402443 - ], - [ - -59.78551, - 8.402495 - ], - [ - -59.784465, - 8.402689 - ], - [ - -59.78366, - 8.402647 - ], - [ - -59.78336, - 8.402604 - ], - [ - -59.783134, - 8.40253 - ], - [ - -59.783006, - 8.402902 - ], - [ - -59.782823, - 8.403931 - ], - [ - -59.78263, - 8.40443 - ], - [ - -59.782802, - 8.404801 - ], - [ - -59.783242, - 8.405067 - ], - [ - -59.783488, - 8.405449 - ], - [ - -59.782974, - 8.405725 - ], - [ - -59.782941, - 8.406107 - ], - [ - -59.782834, - 8.40634 - ], - [ - -59.782244, - 8.406945 - ], - [ - -59.781466, - 8.407424 - ], - [ - -59.780598, - 8.407408 - ], - [ - -59.779058, - 8.407158 - ], - [ - -59.777985, - 8.407242 - ], - [ - -59.777051, - 8.407211 - ], - [ - -59.776118, - 8.406966 - ], - [ - -59.775807, - 8.406956 - ], - [ - -59.774815, - 8.406948 - ], - [ - -59.773908, - 8.406603 - ], - [ - -59.772459, - 8.406067 - ], - [ - -59.770765, - 8.405507 - ], - [ - -59.769484, - 8.405052 - ], - [ - -59.767306, - 8.404589 - ], - [ - -59.766126, - 8.404402 - ], - [ - -59.764643, - 8.403946 - ], - [ - -59.762046, - 8.403126 - ], - [ - -59.76038, - 8.402362 - ], - [ - -59.757859, - 8.401286 - ], - [ - -59.75434, - 8.39987 - ], - [ - -59.752741, - 8.399508 - ], - [ - -59.751032, - 8.39884 - ], - [ - -59.749039, - 8.397895 - ], - [ - -59.743197, - 8.395048 - ], - [ - -59.741545, - 8.394198 - ], - [ - -59.740017, - 8.393436 - ], - [ - -59.738497, - 8.392722 - ], - [ - -59.737847, - 8.392466 - ], - [ - -59.7367, - 8.391948 - ], - [ - -59.735466, - 8.391354 - ], - [ - -59.7342, - 8.39077 - ], - [ - -59.733213, - 8.390154 - ], - [ - -59.732001, - 8.389677 - ], - [ - -59.73125, - 8.38922 - ], - [ - -59.730992, - 8.389029 - ], - [ - -59.730467, - 8.388774 - ], - [ - -59.729812, - 8.388276 - ], - [ - -59.729158, - 8.387671 - ], - [ - -59.728535, - 8.386991 - ], - [ - -59.727752, - 8.386599 - ], - [ - -59.726971, - 8.386022 - ], - [ - -59.726701, - 8.385516 - ], - [ - -59.725993, - 8.38437 - ], - [ - -59.725349, - 8.383977 - ], - [ - -59.723922, - 8.383138 - ], - [ - -59.723375, - 8.382586 - ], - [ - -59.722495, - 8.381939 - ], - [ - -59.721841, - 8.382013 - ], - [ - -59.720696, - 8.382176 - ], - [ - -59.720696, - 8.381656 - ], - [ - -59.720542, - 8.381026 - ], - [ - -59.71992, - 8.380952 - ], - [ - -59.719191, - 8.380952 - ], - [ - -59.7186, - 8.380368 - ], - [ - -59.718268, - 8.379742 - ], - [ - -59.717774, - 8.379222 - ], - [ - -59.717109, - 8.379126 - ], - [ - -59.716702, - 8.377874 - ], - [ - -59.716348, - 8.377428 - ], - [ - -59.715908, - 8.377088 - ], - [ - -59.715382, - 8.37678 - ], - [ - -59.714674, - 8.376632 - ], - [ - -59.714674, - 8.37626 - ], - [ - -59.713805, - 8.374997 - ], - [ - -59.713408, - 8.374339 - ], - [ - -59.712528, - 8.373808 - ], - [ - -59.711822, - 8.37348 - ], - [ - -59.710396, - 8.372768 - ], - [ - -59.710146, - 8.372036 - ], - [ - -59.709921, - 8.37159 - ], - [ - -59.709288, - 8.371314 - ], - [ - -59.707529, - 8.370151 - ], - [ - -59.707183, - 8.369943 - ], - [ - -59.707131, - 8.36956 - ], - [ - -59.707239, - 8.369032 - ], - [ - -59.706992, - 8.368257 - ], - [ - -59.705327, - 8.367357 - ], - [ - -59.704094, - 8.367207 - ], - [ - -59.704094, - 8.366957 - ], - [ - -59.703708, - 8.366697 - ], - [ - -59.702914, - 8.366187 - ], - [ - -59.701928, - 8.365453 - ], - [ - -59.700921, - 8.365177 - ], - [ - -59.700454, - 8.364917 - ], - [ - -59.700024, - 8.36445 - ], - [ - -59.699352, - 8.363956 - ], - [ - -59.698676, - 8.363632 - ], - [ - -59.697963, - 8.363944 - ], - [ - -59.697609, - 8.363487 - ], - [ - -59.697063, - 8.362914 - ], - [ - -59.696814, - 8.362627 - ], - [ - -59.696443, - 8.362468 - ], - [ - -59.696294, - 8.362117 - ], - [ - -59.695285, - 8.361565 - ], - [ - -59.694344, - 8.361395 - ], - [ - -59.692995, - 8.360707 - ], - [ - -59.689814, - 8.359327 - ], - [ - -59.688822, - 8.358727 - ], - [ - -59.687262, - 8.357967 - ], - [ - -59.685945, - 8.357319 - ], - [ - -59.68558, - 8.356777 - ], - [ - -59.684148, - 8.356005 - ], - [ - -59.681775, - 8.354655 - ], - [ - -59.679684, - 8.353467 - ], - [ - -59.677979, - 8.352413 - ], - [ - -59.676541, - 8.351766 - ], - [ - -59.67558, - 8.351372 - ], - [ - -59.674453, - 8.350767 - ], - [ - -59.672614, - 8.350076 - ], - [ - -59.672094, - 8.349566 - ], - [ - -59.67077, - 8.348818 - ], - [ - -59.669874, - 8.348414 - ], - [ - -59.668765, - 8.348127 - ], - [ - -59.66774, - 8.347903 - ], - [ - -59.666773, - 8.347562 - ], - [ - -59.666003, - 8.347693 - ], - [ - -59.665223, - 8.347312 - ], - [ - -59.663893, - 8.346399 - ], - [ - -59.662744, - 8.345346 - ], - [ - -59.661457, - 8.344688 - ], - [ - -59.660455, - 8.344215 - ], - [ - -59.659639, - 8.343875 - ], - [ - -59.658762, - 8.343328 - ], - [ - -59.657861, - 8.342797 - ], - [ - -59.656552, - 8.341821 - ], - [ - -59.655236, - 8.341075 - ], - [ - -59.654796, - 8.34065 - ], - [ - -59.653466, - 8.33988 - ], - [ - -59.652489, - 8.339444 - ], - [ - -59.651747, - 8.338956 - ], - [ - -59.650565, - 8.338298 - ], - [ - -59.649116, - 8.337146 - ], - [ - -59.647476, - 8.336218 - ], - [ - -59.644762, - 8.334769 - ], - [ - -59.641988, - 8.333312 - ], - [ - -59.640052, - 8.332404 - ], - [ - -59.63814, - 8.331464 - ], - [ - -59.635762, - 8.330322 - ], - [ - -59.634529, - 8.329753 - ], - [ - -59.633218, - 8.328957 - ], - [ - -59.631673, - 8.328181 - ], - [ - -59.630339, - 8.327543 - ], - [ - -59.629368, - 8.326986 - ], - [ - -59.6284, - 8.326411 - ], - [ - -59.627419, - 8.325917 - ], - [ - -59.626149, - 8.32529 - ], - [ - -59.624669, - 8.324318 - ], - [ - -59.623784, - 8.323936 - ], - [ - -59.622341, - 8.322813 - ], - [ - -59.621848, - 8.322474 - ], - [ - -59.621129, - 8.322176 - ], - [ - -59.620292, - 8.321518 - ], - [ - -59.619541, - 8.32121 - ], - [ - -59.618683, - 8.320679 - ], - [ - -59.617284, - 8.319616 - ], - [ - -59.616204, - 8.318885 - ], - [ - -59.615204, - 8.318336 - ], - [ - -59.614509, - 8.317804 - ], - [ - -59.612793, - 8.316465 - ], - [ - -59.612095, - 8.315987 - ], - [ - -59.610754, - 8.315106 - ], - [ - -59.60907, - 8.314044 - ], - [ - -59.607934, - 8.313236 - ], - [ - -59.607053, - 8.312686 - ], - [ - -59.60643, - 8.312356 - ], - [ - -59.605755, - 8.311985 - ], - [ - -59.605143, - 8.31155 - ], - [ - -59.604661566497484, - 8.311277641612552 - ], - [ - -50.09765625, - 14.944784875088372 - ], - [ - -50.0537109375, - 15.072123545811683 - ], - [ - -59.90170532968549, - 8.440009636897917 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToLand.json deleted file mode 100644 index e1cf571eb7..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToLand.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -59.95020861937195, - 8.719398198558203 - ], - [ - -59.707136109606225, - 8.63387102144518 - ], - [ - -59.78678698851251, - 8.184199738096492 - ], - [ - -60.13422961546577, - 8.283416579624516 - ], - [ - -59.95020861937195, - 8.719398198558203 - ] - ] - ] - }, - "properties": { - "name": "gp-clip-ocean-north-zone.json" - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToOcean.json deleted file mode 100644 index 2d52a00e38..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-north-zone.json/clipToOcean.json +++ /dev/null @@ -1,1711 +0,0 @@ -{ - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -60.0133728404614, - 8.569749843458414 - ], - [ - -60.012045, - 8.568885 - ], - [ - -60.010071, - 8.567866 - ], - [ - -60.007539, - 8.566784 - ], - [ - -60.005565, - 8.56566 - ], - [ - -60.004642, - 8.565002 - ], - [ - -60.00432, - 8.564365 - ], - [ - -60.004792, - 8.564026 - ], - [ - -60.005436, - 8.563814 - ], - [ - -60.006702, - 8.563856 - ], - [ - -60.008376, - 8.56358 - ], - [ - -60.008247, - 8.563007 - ], - [ - -60.006788, - 8.561925 - ], - [ - -60.005586, - 8.560928 - ], - [ - -60.002797, - 8.55906 - ], - [ - -59.999127, - 8.557448 - ], - [ - -59.995544, - 8.555963 - ], - [ - -59.994192, - 8.555029 - ], - [ - -59.993763, - 8.554562 - ], - [ - -59.994171, - 8.55348 - ], - [ - -59.995522, - 8.553268 - ], - [ - -59.995737, - 8.55278 - ], - [ - -59.995329, - 8.551995 - ], - [ - -59.992433, - 8.550446 - ], - [ - -59.991918, - 8.549788 - ], - [ - -59.991939, - 8.548939 - ], - [ - -59.992282, - 8.548557 - ], - [ - -59.992411, - 8.547899 - ], - [ - -59.992132, - 8.546562 - ], - [ - -59.990394, - 8.544462 - ], - [ - -59.989536, - 8.542573 - ], - [ - -59.988184, - 8.541576 - ], - [ - -59.985116, - 8.53869 - ], - [ - -59.98121, - 8.533279 - ], - [ - -59.979382, - 8.530944 - ], - [ - -59.978668, - 8.530032 - ], - [ - -59.977316, - 8.528833 - ], - [ - -59.97576, - 8.526902 - ], - [ - -59.97503, - 8.526043 - ], - [ - -59.97502, - 8.52548 - ], - [ - -59.975342, - 8.524908 - ], - [ - -59.974955, - 8.523602 - ], - [ - -59.97385, - 8.521629 - ], - [ - -59.972016, - 8.520281 - ], - [ - -59.969645, - 8.518711 - ], - [ - -59.968024, - 8.517586 - ], - [ - -59.966758, - 8.51661 - ], - [ - -59.964881, - 8.513862 - ], - [ - -59.963443, - 8.512313 - ], - [ - -59.960439, - 8.509554 - ], - [ - -59.957435, - 8.507252 - ], - [ - -59.956298, - 8.505681 - ], - [ - -59.95556, - 8.504846 - ], - [ - -59.954484, - 8.504031 - ], - [ - -59.95382, - 8.503442 - ], - [ - -59.953165, - 8.502869 - ], - [ - -59.952618, - 8.502126 - ], - [ - -59.952017, - 8.501744 - ], - [ - -59.951137, - 8.501087 - ], - [ - -59.949721, - 8.499654 - ], - [ - -59.948616, - 8.499325 - ], - [ - -59.947747, - 8.498519 - ], - [ - -59.946664, - 8.497422 - ], - [ - -59.946116, - 8.496821 - ], - [ - -59.945365, - 8.49593 - ], - [ - -59.944818, - 8.495357 - ], - [ - -59.943842, - 8.493988 - ], - [ - -59.942758, - 8.493022 - ], - [ - -59.941771, - 8.492142 - ], - [ - -59.941138, - 8.49159 - ], - [ - -59.940312, - 8.491123 - ], - [ - -59.939486, - 8.490656 - ], - [ - -59.938552, - 8.489542 - ], - [ - -59.937994, - 8.488491 - ], - [ - -59.937018, - 8.486921 - ], - [ - -59.936203, - 8.486316 - ], - [ - -59.935173, - 8.485244 - ], - [ - -59.934411, - 8.484162 - ], - [ - -59.933639, - 8.483016 - ], - [ - -59.932812, - 8.482294 - ], - [ - -59.931675, - 8.481318 - ], - [ - -59.930935, - 8.480522 - ], - [ - -59.930377, - 8.479779 - ], - [ - -59.929841, - 8.479227 - ], - [ - -59.929208, - 8.478219 - ], - [ - -59.929122, - 8.478092 - ], - [ - -59.928371, - 8.477551 - ], - [ - -59.927834, - 8.476384 - ], - [ - -59.926525, - 8.474813 - ], - [ - -59.923564, - 8.470494 - ], - [ - -59.922609, - 8.470229 - ], - [ - -59.921348, - 8.470613 - ], - [ - -59.920428, - 8.469463 - ], - [ - -59.920418, - 8.468433 - ], - [ - -59.918817, - 8.466348 - ], - [ - -59.918056, - 8.465804 - ], - [ - -59.9171, - 8.464546 - ], - [ - -59.916353, - 8.46353 - ], - [ - -59.916536, - 8.462654 - ], - [ - -59.915046, - 8.460179 - ], - [ - -59.913887, - 8.458566 - ], - [ - -59.913329, - 8.457654 - ], - [ - -59.91187, - 8.455892 - ], - [ - -59.910593, - 8.454194 - ], - [ - -59.909831, - 8.452963 - ], - [ - -59.908769, - 8.45152 - ], - [ - -59.908018, - 8.450894 - ], - [ - -59.907428, - 8.450374 - ], - [ - -59.906763, - 8.449546 - ], - [ - -59.906001, - 8.44823 - ], - [ - -59.906098, - 8.447742 - ], - [ - -59.905175, - 8.446489 - ], - [ - -59.903845, - 8.444696 - ], - [ - -59.903233, - 8.44459 - ], - [ - -59.903512, - 8.444197 - ], - [ - -59.902954, - 8.44321 - ], - [ - -59.90275, - 8.442361 - ], - [ - -59.901978, - 8.441746 - ], - [ - -59.90186, - 8.440483 - ], - [ - -59.901645, - 8.439825 - ], - [ - -59.900454, - 8.437288 - ], - [ - -59.897783, - 8.432258 - ], - [ - -59.895154, - 8.427726 - ], - [ - -59.893996, - 8.425932 - ], - [ - -59.892451, - 8.423364 - ], - [ - -59.891646, - 8.422494 - ], - [ - -59.89082, - 8.420997 - ], - [ - -59.890369, - 8.420276 - ], - [ - -59.889382, - 8.418185 - ], - [ - -59.888545, - 8.415946 - ], - [ - -59.887708, - 8.414354 - ], - [ - -59.886185, - 8.411053 - ], - [ - -59.885648, - 8.410023 - ], - [ - -59.885209, - 8.409726 - ], - [ - -59.884415, - 8.407847 - ], - [ - -59.883363, - 8.405905 - ], - [ - -59.882913, - 8.405088 - ], - [ - -59.882559, - 8.403952 - ], - [ - -59.882001, - 8.402477 - ], - [ - -59.880745, - 8.400354 - ], - [ - -59.879383, - 8.398157 - ], - [ - -59.87801, - 8.395228 - ], - [ - -59.877334, - 8.394559 - ], - [ - -59.876722, - 8.393307 - ], - [ - -59.875746, - 8.392341 - ], - [ - -59.874608, - 8.390685 - ], - [ - -59.8739, - 8.389762 - ], - [ - -59.873246, - 8.388679 - ], - [ - -59.872334, - 8.387533 - ], - [ - -59.871755, - 8.386705 - ], - [ - -59.871068, - 8.38611 - ], - [ - -59.869877, - 8.384497 - ], - [ - -59.86859, - 8.383457 - ], - [ - -59.867431, - 8.382438 - ], - [ - -59.865929, - 8.381079 - ], - [ - -59.864942, - 8.380134 - ], - [ - -59.863944, - 8.378373 - ], - [ - -59.863214, - 8.377343 - ], - [ - -59.863494, - 8.376696 - ], - [ - -59.863182, - 8.37625 - ], - [ - -59.86271, - 8.376207 - ], - [ - -59.862281, - 8.376292 - ], - [ - -59.86094, - 8.37557 - ], - [ - -59.859899, - 8.374796 - ], - [ - -59.859148, - 8.37419 - ], - [ - -59.8581, - 8.37311 - ], - [ - -59.857657, - 8.372641 - ], - [ - -59.85726, - 8.371962 - ], - [ - -59.855275, - 8.369934 - ], - [ - -59.85269, - 8.368257 - ], - [ - -59.849685, - 8.366314 - ], - [ - -59.84784, - 8.365317 - ], - [ - -59.847422, - 8.365752 - ], - [ - -59.84688, - 8.36578 - ], - [ - -59.84711, - 8.36468 - ], - [ - -59.846388, - 8.363674 - ], - [ - -59.846295, - 8.363544 - ], - [ - -59.844353, - 8.361782 - ], - [ - -59.842111, - 8.36019 - ], - [ - -59.840308, - 8.359532 - ], - [ - -59.83938, - 8.35936 - ], - [ - -59.838431, - 8.359245 - ], - [ - -59.838098, - 8.359447 - ], - [ - -59.83757, - 8.35988 - ], - [ - -59.83758, - 8.3604 - ], - [ - -59.83732, - 8.3604 - ], - [ - -59.836628, - 8.360158 - ], - [ - -59.83489, - 8.359659 - ], - [ - -59.833936, - 8.35933 - ], - [ - -59.831854, - 8.359086 - ], - [ - -59.831243, - 8.359288 - ], - [ - -59.83002, - 8.359988 - ], - [ - -59.829515, - 8.360349 - ], - [ - -59.828956, - 8.359767 - ], - [ - -59.828968, - 8.359457 - ], - [ - -59.828646, - 8.35933 - ], - [ - -59.827144, - 8.359065 - ], - [ - -59.8262, - 8.358874 - ], - [ - -59.825391, - 8.359436 - ], - [ - -59.823858, - 8.360513 - ], - [ - -59.823185, - 8.360137 - ], - [ - -59.822075, - 8.360638 - ], - [ - -59.821951, - 8.360519 - ], - [ - -59.82179, - 8.360338 - ], - [ - -59.821522, - 8.359457 - ], - [ - -59.82016, - 8.358343 - ], - [ - -59.819344, - 8.358598 - ], - [ - -59.81895, - 8.35821 - ], - [ - -59.81765, - 8.35822 - ], - [ - -59.817198, - 8.358226 - ], - [ - -59.816673, - 8.358438 - ], - [ - -59.816297, - 8.358629 - ], - [ - -59.815654, - 8.358555 - ], - [ - -59.815557, - 8.357515 - ], - [ - -59.814269, - 8.357183 - ], - [ - -59.813862, - 8.356836 - ], - [ - -59.813372, - 8.356324 - ], - [ - -59.812863, - 8.355857 - ], - [ - -59.811929, - 8.356196 - ], - [ - -59.810337, - 8.355645 - ], - [ - -59.810075, - 8.355259 - ], - [ - -59.809298, - 8.354881 - ], - [ - -59.808703, - 8.354732 - ], - [ - -59.807303, - 8.354011 - ], - [ - -59.807048, - 8.353777 - ], - [ - -59.807172, - 8.353354 - ], - [ - -59.806668, - 8.353301 - ], - [ - -59.806475, - 8.35346 - ], - [ - -59.805928, - 8.353258 - ], - [ - -59.804973, - 8.352738 - ], - [ - -59.804233, - 8.352929 - ], - [ - -59.803674, - 8.352504 - ], - [ - -59.802528, - 8.352355 - ], - [ - -59.801191, - 8.351676 - ], - [ - -59.800575, - 8.3514 - ], - [ - -59.799302, - 8.350827 - ], - [ - -59.797902, - 8.350204 - ], - [ - -59.783997, - 8.343112 - ], - [ - -59.782175, - 8.343999 - ], - [ - -59.780785, - 8.34466 - ], - [ - -59.781697, - 8.345976 - ], - [ - -59.782137, - 8.346857 - ], - [ - -59.782823, - 8.347876 - ], - [ - -59.782673, - 8.349108 - ], - [ - -59.782405, - 8.349543 - ], - [ - -59.78217, - 8.34998 - ], - [ - -59.781697, - 8.35104 - ], - [ - -59.780785, - 8.352038 - ], - [ - -59.778972, - 8.352929 - ], - [ - -59.77733, - 8.353258 - ], - [ - -59.77483, - 8.353237 - ], - [ - -59.768469, - 8.360476 - ], - [ - -59.76908, - 8.36114 - ], - [ - -59.772405, - 8.363674 - ], - [ - -59.774159, - 8.364697 - ], - [ - -59.779432, - 8.367663 - ], - [ - -59.782061, - 8.369218 - ], - [ - -59.784064, - 8.370344 - ], - [ - -59.785716, - 8.371374 - ], - [ - -59.787521, - 8.372529 - ], - [ - -59.7888, - 8.37336 - ], - [ - -59.791884, - 8.375229 - ], - [ - -59.793772, - 8.37646 - ], - [ - -59.79763, - 8.37897 - ], - [ - -59.799478, - 8.379694 - ], - [ - -59.801442, - 8.380655 - ], - [ - -59.802198, - 8.381186 - ], - [ - -59.803154, - 8.381703 - ], - [ - -59.80413, - 8.38242 - ], - [ - -59.804787, - 8.382812 - ], - [ - -59.80557, - 8.383423 - ], - [ - -59.80594, - 8.3838 - ], - [ - -59.80698, - 8.38431 - ], - [ - -59.807505, - 8.384645 - ], - [ - -59.808028, - 8.384986 - ], - [ - -59.809196, - 8.385718 - ], - [ - -59.809847, - 8.386224 - ], - [ - -59.810898, - 8.386734 - ], - [ - -59.811951, - 8.38743 - ], - [ - -59.813185, - 8.388385 - ], - [ - -59.814043, - 8.388932 - ], - [ - -59.814632, - 8.38965 - ], - [ - -59.815267, - 8.390112 - ], - [ - -59.815729, - 8.390696 - ], - [ - -59.815943, - 8.390791 - ], - [ - -59.816158, - 8.390887 - ], - [ - -59.815997, - 8.391407 - ], - [ - -59.81583, - 8.39197 - ], - [ - -59.815503, - 8.392075 - ], - [ - -59.815321, - 8.392298 - ], - [ - -59.814645, - 8.392891 - ], - [ - -59.814785, - 8.393345 - ], - [ - -59.815195, - 8.393154 - ], - [ - -59.815782, - 8.39302 - ], - [ - -59.8159, - 8.393052 - ], - [ - -59.816587, - 8.393275 - ], - [ - -59.816909, - 8.39336 - ], - [ - -59.817274, - 8.393731 - ], - [ - -59.817585, - 8.394453 - ], - [ - -59.817992, - 8.394559 - ], - [ - -59.81854, - 8.394432 - ], - [ - -59.818958, - 8.394432 - ], - [ - -59.819473, - 8.394347 - ], - [ - -59.819452, - 8.393816 - ], - [ - -59.819376, - 8.393275 - ], - [ - -59.819312, - 8.392956 - ], - [ - -59.819226, - 8.392479 - ], - [ - -59.81957, - 8.392309 - ], - [ - -59.82001, - 8.3925 - ], - [ - -59.820181, - 8.393137 - ], - [ - -59.820128, - 8.393965 - ], - [ - -59.82001, - 8.394644 - ], - [ - -59.819591, - 8.395196 - ], - [ - -59.818958, - 8.395451 - ], - [ - -59.818164, - 8.395737 - ], - [ - -59.817263, - 8.396204 - ], - [ - -59.816166, - 8.396275 - ], - [ - -59.815718, - 8.396541 - ], - [ - -59.815356, - 8.396589 - ], - [ - -59.813719, - 8.397194 - ], - [ - -59.812749, - 8.397814 - ], - [ - -59.812228, - 8.398 - ], - [ - -59.811818, - 8.398159 - ], - [ - -59.811431, - 8.398143 - ], - [ - -59.81083, - 8.398494 - ], - [ - -59.809872, - 8.398834 - ], - [ - -59.809526, - 8.399152 - ], - [ - -59.808636, - 8.399534 - ], - [ - -59.808162, - 8.399873 - ], - [ - -59.806702, - 8.400325 - ], - [ - -59.804849, - 8.400671 - ], - [ - -59.801152, - 8.401622 - ], - [ - -59.799325, - 8.401918 - ], - [ - -59.797373, - 8.402093 - ], - [ - -59.795057, - 8.402149 - ], - [ - -59.793459, - 8.40218 - ], - [ - -59.790761, - 8.402126 - ], - [ - -59.788967, - 8.402189 - ], - [ - -59.78798, - 8.40247 - ], - [ - -59.78777, - 8.40243 - ], - [ - -59.786525, - 8.402443 - ], - [ - -59.78551, - 8.402495 - ], - [ - -59.784465, - 8.402689 - ], - [ - -59.78366, - 8.402647 - ], - [ - -59.78336, - 8.402604 - ], - [ - -59.783134, - 8.40253 - ], - [ - -59.783006, - 8.402902 - ], - [ - -59.782823, - 8.403931 - ], - [ - -59.78263, - 8.40443 - ], - [ - -59.782802, - 8.404801 - ], - [ - -59.783242, - 8.405067 - ], - [ - -59.783488, - 8.405449 - ], - [ - -59.782974, - 8.405725 - ], - [ - -59.782941, - 8.406107 - ], - [ - -59.782834, - 8.40634 - ], - [ - -59.782244, - 8.406945 - ], - [ - -59.781466, - 8.407424 - ], - [ - -59.780598, - 8.407408 - ], - [ - -59.779058, - 8.407158 - ], - [ - -59.777985, - 8.407242 - ], - [ - -59.777051, - 8.407211 - ], - [ - -59.776118, - 8.406966 - ], - [ - -59.775807, - 8.406956 - ], - [ - -59.774815, - 8.406948 - ], - [ - -59.773908, - 8.406603 - ], - [ - -59.772459, - 8.406067 - ], - [ - -59.770765, - 8.405507 - ], - [ - -59.769484, - 8.405052 - ], - [ - -59.767306, - 8.404589 - ], - [ - -59.766126, - 8.404402 - ], - [ - -59.764643, - 8.403946 - ], - [ - -59.762046, - 8.403126 - ], - [ - -59.76038, - 8.402362 - ], - [ - -59.757859, - 8.401286 - ], - [ - -59.75434, - 8.39987 - ], - [ - -59.752741, - 8.399508 - ], - [ - -59.751032, - 8.39884 - ], - [ - -59.749039, - 8.397895 - ], - [ - -59.74894313477861, - 8.397848281703986 - ], - [ - -59.707136109606225, - 8.63387102144518 - ], - [ - -59.95020861937195, - 8.719398198558203 - ], - [ - -60.011878516076656, - 8.573290189279284 - ], - [ - -60.011723, - 8.57324 - ], - [ - -60.010918, - 8.573102 - ], - [ - -60.010055, - 8.572768 - ], - [ - -60.009304, - 8.572333 - ], - [ - -60.006418, - 8.56959 - ], - [ - -60.00586, - 8.569325 - ], - [ - -60.005087, - 8.569007 - ], - [ - -60.004744, - 8.568959 - ], - [ - -60.004529, - 8.568778 - ], - [ - -60.004513, - 8.568545 - ], - [ - -60.004395, - 8.568333 - ], - [ - -60.004261, - 8.56836 - ], - [ - -60.004148, - 8.568344 - ], - [ - -60.003988, - 8.568423 - ], - [ - -60.003843, - 8.568333 - ], - [ - -60.003467, - 8.568126 - ], - [ - -60.002904, - 8.567909 - ], - [ - -60.002148, - 8.567511 - ], - [ - -60.002014, - 8.567325 - ], - [ - -60.002056, - 8.567203 - ], - [ - -60.00218, - 8.56715 - ], - [ - -60.002475, - 8.567256 - ], - [ - -60.002856, - 8.567527 - ], - [ - -60.003118, - 8.567527 - ], - [ - -60.00351, - 8.56767 - ], - [ - -60.003703, - 8.567792 - ], - [ - -60.004009, - 8.56793 - ], - [ - -60.004304, - 8.567898 - ], - [ - -60.004562, - 8.567802 - ], - [ - -60.004819, - 8.567802 - ], - [ - -60.005119, - 8.56785 - ], - [ - -60.006284, - 8.568238 - ], - [ - -60.007078, - 8.568545 - ], - [ - -60.00748, - 8.568832 - ], - [ - -60.007812, - 8.569261 - ], - [ - -60.00837, - 8.569728 - ], - [ - -60.008596, - 8.570099 - ], - [ - -60.009245, - 8.570434 - ], - [ - -60.009969, - 8.570667 - ], - [ - -60.010929, - 8.570884 - ], - [ - -60.012163, - 8.571001 - ], - [ - -60.01278913742823, - 8.571132749750523 - ], - [ - -60.0133728404614, - 8.569749843458414 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToLand.json b/packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToLand.json deleted file mode 100644 index ef93640c8f..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToLand.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "Feature", - "properties": { - "name": "gp-clip-ocean-surround-island.json" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -119.35575842857361, - 34.01721121101167 - ], - [ - -119.35623049736022, - 34.01778034866227 - ], - [ - -119.35746431350708, - 34.017575815258326 - ], - [ - -119.35879468917847, - 34.01683771235474 - ], - [ - -119.35766816139221, - 34.016215210941404 - ], - [ - -119.35638070106505, - 34.01642864051162 - ], - [ - -119.35575842857361, - 34.01721121101167 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToOcean.json b/packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToOcean.json deleted file mode 100644 index 857e939102..0000000000 --- a/packages/template-blank-project/examples/output/gp-clip-ocean-surround-island.json/clipToOcean.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -119.35879468917847, - 34.01683771235474 - ], - [ - -119.35766816139221, - 34.016215210941404 - ], - [ - -119.35638070106505, - 34.01642864051162 - ], - [ - -119.35575842857361, - 34.01721121101167 - ], - [ - -119.35623049736022, - 34.01778034866227 - ], - [ - -119.35746431350708, - 34.017575815258326 - ], - [ - -119.35879468917847, - 34.01683771235474 - ] - ], - [ - [ - -119.357992, - 34.016733 - ], - [ - -119.357979, - 34.016744 - ], - [ - -119.357959, - 34.016772 - ], - [ - -119.35788, - 34.016788 - ], - [ - -119.357754, - 34.016876 - ], - [ - -119.357695, - 34.016904 - ], - [ - -119.357622, - 34.016904 - ], - [ - -119.357596, - 34.016887 - ], - [ - -119.35753, - 34.016844 - ], - [ - -119.35749, - 34.01675 - ], - [ - -119.357352, - 34.016728 - ], - [ - -119.357286, - 34.01669 - ], - [ - -119.357233, - 34.016651 - ], - [ - -119.357233, - 34.016596 - ], - [ - -119.357418, - 34.016486 - ], - [ - -119.35753, - 34.016459 - ], - [ - -119.357576, - 34.016459 - ], - [ - -119.357589, - 34.016475 - ], - [ - -119.357596, - 34.016547 - ], - [ - -119.357622, - 34.016596 - ], - [ - -119.357636, - 34.016607 - ], - [ - -119.357682, - 34.016607 - ], - [ - -119.357741, - 34.016602 - ], - [ - -119.357833, - 34.016547 - ], - [ - -119.357847, - 34.016547 - ], - [ - -119.357932, - 34.016574 - ], - [ - -119.357965, - 34.016607 - ], - [ - -119.357985, - 34.016646 - ], - [ - -119.357992, - 34.016733 - ] - ], - [ - [ - -119.357174, - 34.016866 - ], - [ - -119.357174, - 34.016888 - ], - [ - -119.357095, - 34.017069 - ], - [ - -119.357035, - 34.017151 - ], - [ - -119.357022, - 34.017168 - ], - [ - -119.356996, - 34.01719 - ], - [ - -119.356745, - 34.017185 - ], - [ - -119.356692, - 34.01719 - ], - [ - -119.356527, - 34.017223 - ], - [ - -119.356422, - 34.017223 - ], - [ - -119.356356, - 34.017174 - ], - [ - -119.356329, - 34.017168 - ], - [ - -119.35627, - 34.017141 - ], - [ - -119.356204, - 34.017097 - ], - [ - -119.356191, - 34.017069 - ], - [ - -119.356197, - 34.017053 - ], - [ - -119.356217, - 34.017047 - ], - [ - -119.356382, - 34.016992 - ], - [ - -119.356534, - 34.017003 - ], - [ - -119.356646, - 34.01697 - ], - [ - -119.356679, - 34.016959 - ], - [ - -119.357101, - 34.016855 - ], - [ - -119.357154, - 34.016855 - ], - [ - -119.357174, - 34.016866 - ] - ] - ] - } -} \ No newline at end of file diff --git a/packages/template-blank-project/project/datasources.json b/packages/template-blank-project/project/datasources.json index 1f24950795..bca7e18c29 100644 --- a/packages/template-blank-project/project/datasources.json +++ b/packages/template-blank-project/project/datasources.json @@ -19,24 +19,6 @@ "url": "https://d3muy0hbwp5qkl.cloudfront.net", "precalc": false }, - { - "datasourceId": "global-eez-mr-v12", - "geo_type": "vector", - "formats": ["fgb", "json"], - "metadata": { - "name": "World EEZ v11", - "description": "World EEZ boundaries and disputed areas", - "version": "11.0", - "publisher": "Flanders Marine Institute (VLIZ)", - "publishDate": "2019118", - "publishLink": "https://marineregions.org/" - }, - "classKeys": [], - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/global-eez-mr-v12.fgb", - "idProperty": "GEONAME", - "nameProperty": "GEONAME", - "precalc": false - }, { "datasourceId": "world", "geo_type": "vector", @@ -54,88 +36,5 @@ "publishLink": "" }, "precalc": false - }, - { - "datasourceId": "bo-present-surface-ph", - "geo_type": "raster", - "formats": ["tif"], - "precalc": true, - "metadata": { - "name": "BioOracle Present Day Surface pH", - "description": "BioOracle Present Day Surface pH global raster", - "version": "2.2", - "publisher": "BioOracle", - "publishDate": "2021-09-24", - "publishLink": "https://www.bio-oracle.org/" - }, - "measurementType": "quantitative", - "band": 1, - "noDataValue": -3.3999999521443642e38, - "created": "2023-12-11T11:55:31.053Z", - "lastUpdated": "2023-12-11T12:52:22.966Z", - "src": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/bo-present-surface-ph.tif" - }, - { - "datasourceId": "bo-present-surface-temp-max", - "geo_type": "raster", - "formats": ["tif"], - "precalc": true, - "metadata": { - "name": "BioOracle Present Day Surface Temperature Maximum", - "description": "BioOracle Present Day Surface Temperature Maximum global raster", - "version": "2.2", - "publisher": "BioOracle", - "publishDate": "2021-09-24", - "publishLink": "https://www.bio-oracle.org/" - }, - "measurementType": "quantitative", - "band": 1, - "noDataValue": -1.7e308, - "created": "2023-12-11T11:56:47.117Z", - "lastUpdated": "2023-12-11T12:52:25.733Z", - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/bo-present-surface-temp-max.tif" - }, - { - "datasourceId": "bo-present-surface-temp-min", - "geo_type": "raster", - "formats": ["tif"], - "precalc": true, - "metadata": { - "name": "BioOracle Present Day Surface Temperature Minimum", - "description": "BioOracle Present Day Surface Temperature Minimum global raster", - "version": "2.2", - "publisher": "BioOracle", - "publishDate": "2021-09-24", - "publishLink": "https://www.bio-oracle.org/" - }, - "measurementType": "quantitative", - "band": 1, - "noDataValue": -1.7e308, - "created": "2023-12-11T11:58:59.485Z", - "lastUpdated": "2023-12-11T12:52:27.957Z", - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/bo-present-surface-temp-min.tif" - }, - { - "datasourceId": "meow-ecos", - "url": "https://gp-global-datasources-datasets.s3.us-west-1.amazonaws.com/meow-ecos.fgb", - "layerName": "meow_ecos", - "geo_type": "vector", - "formats": ["fgb"], - "classKeys": [], - "created": "2023-12-12T00:41:57.298Z", - "lastUpdated": "2023-12-12T00:41:57.298Z", - "propertiesToKeep": ["ECOREGION", "PROVINCE", "REALM", "Lat_Zone"], - "explodeMulti": false, - "precalc": true, - "idProperty": "ECOREGION", - "nameProperty": "ECOREGION", - "metadata": { - "name": "Marine Ecoregions of the World", - "description": "A biogeographic classification of the world's coastal and continental shelf waters following a nested hierarchy of realms, provinces and ecoregions", - "version": "20190911", - "publisher": "The Nature Conservancy", - "publishDate": "20190911", - "publishLink": "https://tnc.maps.arcgis.com/home/item.html?id=ed2be4cf8b7a451f84fd093c2e7660e3" - } } ] diff --git a/packages/template-blank-project/project/geoprocessing.json b/packages/template-blank-project/project/geoprocessing.json index c6a2fbda02..926871e9e2 100644 --- a/packages/template-blank-project/project/geoprocessing.json +++ b/packages/template-blank-project/project/geoprocessing.json @@ -15,11 +15,10 @@ } ], "preprocessingFunctions": [ + "src/functions/validatePolygon.ts", "src/functions/clipToLand.ts", - "src/functions/clipToOcean.ts" + "src/functions/clipToOcean.ts", + "src/functions/clipToOceanEez.ts" ], - "geoprocessingFunctions": [ - "src/functions/simpleFunction.ts", - "src/functions/blankFunction.ts" - ] + "geoprocessingFunctions": ["src/functions/simpleFunction.ts"] } diff --git a/packages/template-blank-project/src/clients/SimpleReport.tsx b/packages/template-blank-project/src/clients/SimpleReport.tsx index 9bccb68de3..b233b107b1 100644 --- a/packages/template-blank-project/src/clients/SimpleReport.tsx +++ b/packages/template-blank-project/src/clients/SimpleReport.tsx @@ -1,12 +1,14 @@ import React from "react"; import Translator from "../components/TranslatorAsync.js"; import { SimpleCard } from "../components/SimpleCard.js"; +import { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui"; // Named export loaded by storybook export const SimpleReport = () => { return ( + ); }; diff --git a/packages/template-blank-project/src/clients/TabReport.tsx b/packages/template-blank-project/src/clients/TabReport.tsx index 4d168542bb..568a8c5780 100644 --- a/packages/template-blank-project/src/clients/TabReport.tsx +++ b/packages/template-blank-project/src/clients/TabReport.tsx @@ -1,15 +1,18 @@ import React, { useState } from "react"; import { useTranslation } from "react-i18next"; -import { SegmentControl, ReportPage } from "@seasketch/geoprocessing/client-ui"; -import { ViabilityPage } from "../components/ViabilityPage.js"; +import { + SegmentControl, + ReportPage, + SketchAttributesCard, +} from "@seasketch/geoprocessing/client-ui"; import Translator from "../components/TranslatorAsync.js"; +import { SimpleCard } from "../components/SimpleCard.js"; const enableAllTabs = false; const BaseReport = () => { const { t } = useTranslation(); - const viabilityId = "viability"; - const segments = [{ id: viabilityId, label: t("Viability") }]; - const [tab, setTab] = useState(viabilityId); + const segments = [{ id: "OVERVIEW", label: t("Overview") }]; + const [tab, setTab] = useState("OVERVIEW"); return ( <> @@ -20,8 +23,9 @@ const BaseReport = () => { segments={segments} /> -

- 📐 - This sketch is{" "} - {{ area: Number.format(Math.round(data.area * 1e-6)) }}{" "} - square kilometers - -

-

- - The following ecoregions are nearby:{" "} - {data.nearbyEcoregions.join(", ")} - -

-

- - The present day sea surface temperature within this sketch is{" "} - - {{ minTemp: roundDecimal(data.minTemp, 1) }} -{" "} - {{ maxTemp: roundDecimal(data.maxTemp, 1) }} - °C - - . + This {{ sketchStr }} is {{ areaString }} square kilometers.

@@ -53,14 +36,3 @@ export const SimpleCard = () => { ); }; - -/** - * SimpleCard as a top-level report client - */ -export const SimpleCardReportClient = () => { - return ( - - - - ); -}; diff --git a/packages/template-blank-project/src/components/ViabilityPage.tsx b/packages/template-blank-project/src/components/ViabilityPage.tsx deleted file mode 100644 index 63b42a947d..0000000000 --- a/packages/template-blank-project/src/components/ViabilityPage.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from "react"; -import { SimpleCard } from "./SimpleCard.js"; -import { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui"; - -export const ViabilityPage = () => { - return ( - <> - - - - ); -}; diff --git a/packages/template-blank-project/src/functions/clipToLand.test.ts b/packages/template-blank-project/src/functions/clipToLand.test.ts new file mode 100644 index 0000000000..5a9576ea11 --- /dev/null +++ b/packages/template-blank-project/src/functions/clipToLand.test.ts @@ -0,0 +1,87 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { clipToLand } from "./clipToLand.js"; +import { area, featureCollection, polygon } from "@turf/turf"; + +const landFeature = polygon([ + [ + [0, 0], + [2, 0], + [2, 2], + [0, 2], + [0, 0], + ], +]); + +// fully outside landFeature +const outside = polygon([ + [ + [3, 3], + [4, 3], + [4, 4], + [3, 4], + [3, 3], + ], +]); + +// half inside landFeature +const halfInside = polygon([ + [ + [1, 1], + [3, 1], + [3, 2], + [1, 2], + [1, 1], + ], +]); + +// fully inside landFeature +const inside = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); + +describe("clipToLand", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + // Mock VectorDataSource fetchUnion method to return landFeature + // @ts-ignore + vi.mock(import("@seasketch/geoprocessing"), async (importOriginal) => { + const actual = await importOriginal(); + const VectorDataSource = vi.fn(); + VectorDataSource.prototype.fetchUnion = vi.fn(() => + featureCollection([landFeature]), + ); + return { ...actual, VectorDataSource }; + }); + + test("clipToLand - feature outside of land should throw", async () => { + try { + await clipToLand(outside); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToLand - feature inside of land boundary should return entire", async () => { + const result = await clipToLand(inside); + expect(result).toEqual(inside); + expect(area(result)).toBe(area(inside)); + }); + + test("clipToLand - feature partially inside of land boundary should return clipped", async () => { + const result = await clipToLand(halfInside); + // Expect half outside land to be clipped off and land-side polygon with approximately half the area to be returned + expect(area(result)).toBeCloseTo(area(inside)); + }); +}); diff --git a/packages/template-blank-project/src/functions/clipToLand.ts b/packages/template-blank-project/src/functions/clipToLand.ts index fe823ab48c..279c533cd5 100644 --- a/packages/template-blank-project/src/functions/clipToLand.ts +++ b/packages/template-blank-project/src/functions/clipToLand.ts @@ -4,58 +4,36 @@ import { Sketch, isPolygonFeature, ValidationError, + VectorDataSource, + FeatureClipOperation, clipToPolygonFeatures, - DatasourceClipOperation, } from "@seasketch/geoprocessing"; -import project from "../../project/projectClient.js"; -import { genClipLoader } from "@seasketch/geoprocessing/dataproviders"; - -interface ExtraParams { - /** Array of country ID's to clip to */ - countryIds?: string[]; -} +import { bbox } from "@turf/turf"; /** * Preprocessor takes a Polygon feature/sketch and returns the portion that - * overlaps with land. Optionally accepts array of country IDs to further filter - * feature/sketch to. + * is on land. */ -export async function clipToLand( - feature: Feature | Sketch, - extraParams: ExtraParams = {}, -): Promise { +export async function clipToLand(feature: Feature | Sketch): Promise { if (!isPolygonFeature(feature)) { throw new ValidationError("Input must be a polygon"); } + const featureBox = bbox(feature); - /** - * Subtract parts of feature/sketch that don't overlap with land. Uses global OSM land polygons - * unionProperty is specific to subdivided datasets. When defined, it will fetch - * and rebuild all subdivided land features overlapping with the feature/sketch - * with the same gid property (assigned one per country) into one feature before clipping. - * This is useful for preventing slivers from forming and possible for performance. - * unionProperty will optionally filter the land features by one or more country ID so you can - * constrain it to a specific country. - */ - const keepLand: DatasourceClipOperation = { - datasourceId: "global-clipping-osm-land", + // Get land polygons - osm land vector datasource + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + // one gid assigned per country, use to union subdivided pieces back together on fetch, prevents slivers + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); + + const keepLand: FeatureClipOperation = { operation: "intersection", - options: { - unionProperty: "gid", // gid is assigned per country - propertyFilter: { - property: "gid", - values: extraParams?.countryIds || [project.basic.planningAreaId] || [], - }, - }, + clipFeatures: landFC.features, }; - // Create a function that will perform the clip operations in order - const clipLoader = genClipLoader(project, [keepLand]); - - // Wrap clip function into preprocessing function with additional clip options - return clipToPolygonFeatures(feature, clipLoader, { - maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM - enforceMaxSize: false, + // Execute one or more clip operations in order against feature + return clipToPolygonFeatures(feature, [keepLand], { ensurePolygon: true, }); } @@ -64,6 +42,5 @@ export default new PreprocessingHandler(clipToLand, { title: "clipToLand", description: "Clips portion of feature or sketch not overlapping land", timeout: 40, - requiresProperties: [], - memory: 4096, + memory: 1024, }); diff --git a/packages/template-blank-project/src/functions/clipToLandSmoke.test.ts b/packages/template-blank-project/src/functions/clipToLandSmoke.test.ts index 4cb770fdd7..d664a52bd2 100644 --- a/packages/template-blank-project/src/functions/clipToLandSmoke.test.ts +++ b/packages/template-blank-project/src/functions/clipToLandSmoke.test.ts @@ -1,10 +1,11 @@ -/** - * @vitest-environment node - */ import handler, { clipToLand } from "./clipToLand.js"; -import { polygonPreprocessorSmokeTest } from "@seasketch/geoprocessing/scripts/testing"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; -// polygonPreprocessorSmokeTest(clipToLand, handler.options.title, { -// timeout: 60000, -// debug: true, -// }); +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(clipToLand, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-blank-project/src/functions/clipToOcean.test.ts b/packages/template-blank-project/src/functions/clipToOcean.test.ts new file mode 100644 index 0000000000..09f5b0242b --- /dev/null +++ b/packages/template-blank-project/src/functions/clipToOcean.test.ts @@ -0,0 +1,91 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { clipToOcean } from "./clipToOcean.js"; +import { area, featureCollection, polygon } from "@turf/turf"; + +const landFeature = polygon([ + [ + [0, 0], + [2, 0], + [2, 2], + [0, 2], + [0, 0], + ], +]); + +// half inside and half outside clipFeature +const halfInsideOutside = polygon([ + [ + [1, 1], + [3, 1], + [3, 2], + [1, 2], + [1, 1], + ], +]); + +// fully outside half clipFeature +const outsideLand = polygon([ + [ + [2, 1], + [3, 1], + [3, 2], + [2, 2], + [2, 1], + ], +]); + +// fully inside half clipFeature +const insideLand = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); + +/** + * clipToOcean uses land vector datasource to remove portion of feature that is within land feature + */ + +describe("clipToOcean", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + // Mock VectorDataSource fetchUnion method to return clipFeature + // @ts-ignore + vi.mock(import("@seasketch/geoprocessing"), async (importOriginal) => { + const actual = await importOriginal(); + const VectorDataSource = vi.fn(); + VectorDataSource.prototype.fetchUnion = vi.fn(() => + featureCollection([landFeature]), + ); + return { ...actual, VectorDataSource }; + }); + + test("clipToOcean - feature inside of land feature should throw", async () => { + try { + await clipToOcean(insideLand); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToOcean - feature outside of land feature should return entire", async () => { + const result = await clipToOcean(outsideLand); + expect(result).toEqual(outsideLand); + expect(area(result)).toBe(area(outsideLand)); + }); + + test("clipToOcean - feature partially outside of land feature should return clipped", async () => { + const result = await clipToOcean(halfInsideOutside); + // Expect half inside land to be clipped off and ocean-side polygon with approximately half the area to be returned + expect(area(result)).toBeCloseTo(area(insideLand)); + }); +}); diff --git a/packages/template-blank-project/src/functions/clipToOcean.ts b/packages/template-blank-project/src/functions/clipToOcean.ts index 68c73a9b80..54c8b18eaa 100644 --- a/packages/template-blank-project/src/functions/clipToOcean.ts +++ b/packages/template-blank-project/src/functions/clipToOcean.ts @@ -2,53 +2,41 @@ import { PreprocessingHandler, Feature, Sketch, - isPolygonFeature, - ValidationError, clipToPolygonFeatures, - DatasourceClipOperation, + FeatureClipOperation, + VectorDataSource, + ensureValidPolygon, } from "@seasketch/geoprocessing"; -import project from "../../project/projectClient.js"; -import { genClipLoader } from "@seasketch/geoprocessing/dataproviders"; - -interface ExtraParams { - /** Array of EEZ's to clip to */ - eezs?: string[]; -} +import { bbox } from "@turf/turf"; /** * Preprocessor takes a Polygon feature/sketch and returns the portion that - * is in the ocean (not on land). Optionally accepts array of eez IDs to further - * filter feature/sketch to. + * is in the ocean (not on land). If results in multiple polygons then returns the largest. */ -export async function clipToOcean( - feature: Feature | Sketch, - extraParams: ExtraParams = {}, // eslint-disable-line @typescript-eslint/no-unused-vars -): Promise { - if (!isPolygonFeature(feature)) { - throw new ValidationError("Input must be a polygon"); - } +export async function clipToOcean(feature: Feature | Sketch): Promise { + // throws if not valid with specific message + ensureValidPolygon(feature, { + minSize: 1, + enforceMinSize: false, + maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, + }); - /** - * Subtract parts of feature/sketch that overlap with land. Uses global OSM land polygons - * unionProperty is specific to subdivided datasets. When defined, it will fetch - * and rebuild all subdivided land features overlapping with the feature/sketch - * with the same gid property (assigned one per country) into one feature before clipping - */ - const removeLand: DatasourceClipOperation = { - datasourceId: "global-clipping-osm-land", + // Get land polygons - osm land vector datasource + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + const featureBox = bbox(feature); + // one gid assigned per country, use to union subdivided pieces back together on fetch, prevents slivers + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); + + const eraseLand: FeatureClipOperation = { operation: "difference", - options: { - unionProperty: "gid", // gid is assigned per country - }, + clipFeatures: landFC.features, }; - // Create a function that will perform the clip operations in order - const clipLoader = genClipLoader(project, [removeLand]); - - // Wrap clip function into preprocessing function with additional clip options - return clipToPolygonFeatures(feature, clipLoader, { - maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM - enforceMaxSize: false, + // Execute one or more clip operations in order against feature + return clipToPolygonFeatures(feature, [eraseLand], { ensurePolygon: true, }); } @@ -57,6 +45,5 @@ export default new PreprocessingHandler(clipToOcean, { title: "clipToOcean", description: "Clips feature or sketch to ocean, removing land", timeout: 40, - requiresProperties: [], - memory: 4096, + memory: 1024, }); diff --git a/packages/template-blank-project/src/functions/clipToOceanEez.test.ts b/packages/template-blank-project/src/functions/clipToOceanEez.test.ts new file mode 100644 index 0000000000..9cb79e8d62 --- /dev/null +++ b/packages/template-blank-project/src/functions/clipToOceanEez.test.ts @@ -0,0 +1,119 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { clipToOceanEez } from "./clipToOceanEez.js"; +import { area, featureCollection, polygon } from "@turf/turf"; +import { BBox } from "@seasketch/geoprocessing"; + +const landFeature = polygon([ + [ + [0, 0], + [2, 0], + [2, 2], + [0, 2], + [0, 0], + ], +]); + +const eezFeature = polygon([ + [ + [0, 0], + [3, 0], + [3, 3], + [0, 3], + [0, 0], + ], +]); + +// fully inside half clipFeature +const insideLand = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); + +// third inside land, third outside eez, this inside eez +const thirdEach = polygon([ + [ + [1, 1], + [4, 1], + [4, 2], + [1, 2], + [1, 1], + ], +]); + +// fully outside eez +const outsideEez = polygon([ + [ + [3, 1], + [4, 1], + [4, 2], + [3, 2], + [3, 1], + ], +]); + +/** + * clipToOceanEez uses land vector datasource and eez with land vector datasource + * to remove portion of feature that is within land feature (difference), and keep + * the portion of feature that is inside the eez (intersection) + */ + +describe("clipToOceanEez", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + // Mock VectorDataSource fetchUnion method to return clipFeature + // @ts-ignore + vi.mock(import("@seasketch/geoprocessing"), async (importOriginal) => { + const actual = await importOriginal(); + const VectorDataSource = vi.fn(); + VectorDataSource.prototype.fetchUnion = vi.fn( + (bbox: BBox, unionProperty?: string) => { + if (unionProperty === "gid") { + return featureCollection([landFeature]); + } else if (unionProperty === "UNION") { + return featureCollection([eezFeature]); + } + }, + ); + + VectorDataSource.prototype.fetchBundle = vi.fn(); + VectorDataSource.prototype.fetchBundleIndex = vi.fn(); + return { ...actual, VectorDataSource }; + }); + + test("clipToOceanEez - feature inside of land feature should throw", async () => { + try { + await clipToOceanEez(insideLand); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToOceanEez - feature outside of eez and land should throw", async () => { + try { + await clipToOceanEez(outsideEez); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToOceanEez - feature spanning land and outside eez should have middle third remain", async () => { + const result = await clipToOceanEez(thirdEach); + // Expect half inside land to be clipped off and ocean-side polygon with approximately half the area to be returned + expect(area(result)).toBeCloseTo(area(thirdEach) / 3); + }); +}); diff --git a/packages/template-blank-project/src/functions/clipToOceanEez.ts b/packages/template-blank-project/src/functions/clipToOceanEez.ts new file mode 100644 index 0000000000..9154db3c07 --- /dev/null +++ b/packages/template-blank-project/src/functions/clipToOceanEez.ts @@ -0,0 +1,63 @@ +import { + PreprocessingHandler, + Feature, + Sketch, + ensureValidPolygon, + FeatureClipOperation, + VectorDataSource, + clipToPolygonFeatures, +} from "@seasketch/geoprocessing"; +import { bbox } from "@turf/turf"; + +/** + * Preprocessor takes a Polygon feature/sketch and returns the portion that + * is in the ocean (not on land) and within one or more EEZ boundaries. + */ +export async function clipToOceanEez( + feature: Feature | Sketch, +): Promise { + // throws if not valid with specific message + ensureValidPolygon(feature, { + minSize: 1, + enforceMinSize: false, + maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, + }); + + const featureBox = bbox(feature); + + // Erase portion of sketch over land + + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); + const eraseLand: FeatureClipOperation = { + operation: "difference", + clipFeatures: landFC.features, + }; + + // Keep portion of sketch within EEZ + + const eezDatasource = new VectorDataSource( + "https://d3muy0hbwp5qkl.cloudfront.net", + ); + const eezFC = await eezDatasource.fetchUnion(featureBox, "UNION"); + // Optionally filter to single EEZ polygon by UNION name + const keepInsideEez: FeatureClipOperation = { + operation: "intersection", + clipFeatures: eezFC.features, + }; + + return clipToPolygonFeatures(feature, [eraseLand, keepInsideEez], { + ensurePolygon: true, + }); +} + +export default new PreprocessingHandler(clipToOceanEez, { + title: "clipToOceanEez", + description: "Example-description", + timeout: 40, + requiresProperties: [], + memory: 1024, +}); diff --git a/packages/template-blank-project/src/functions/clipToOceanEezSmoke.test.ts b/packages/template-blank-project/src/functions/clipToOceanEezSmoke.test.ts new file mode 100644 index 0000000000..b3bf0c7bee --- /dev/null +++ b/packages/template-blank-project/src/functions/clipToOceanEezSmoke.test.ts @@ -0,0 +1,11 @@ +import handler, { clipToOceanEez } from "./clipToOceanEez.js"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; + +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(clipToOceanEez, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-blank-project/src/functions/clipToOceanSmoke.test.ts b/packages/template-blank-project/src/functions/clipToOceanSmoke.test.ts index f0c0e29d1b..105cc843d0 100644 --- a/packages/template-blank-project/src/functions/clipToOceanSmoke.test.ts +++ b/packages/template-blank-project/src/functions/clipToOceanSmoke.test.ts @@ -1,10 +1,11 @@ -/** - * @vitest-environment node - */ import handler, { clipToOcean } from "./clipToOcean.js"; -import { polygonPreprocessorSmokeTest } from "@seasketch/geoprocessing/scripts/testing"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; -// polygonPreprocessorSmokeTest(clipToOcean, handler.options.title, { -// timeout: 60000, -// debug: true, -// }); +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(clipToOcean, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-blank-project/src/functions/simpleFunction.ts b/packages/template-blank-project/src/functions/simpleFunction.ts index 044c7fe33a..5dccb36301 100644 --- a/packages/template-blank-project/src/functions/simpleFunction.ts +++ b/packages/template-blank-project/src/functions/simpleFunction.ts @@ -4,93 +4,28 @@ import { Polygon, MultiPolygon, GeoprocessingHandler, - getFirstFromParam, - DefaultExtraParams, - splitSketchAntimeridian, - rasterStats, } from "@seasketch/geoprocessing"; -import { bbox, area as turfArea } from "@turf/turf"; -import project from "../../project/projectClient.js"; -import { clipToGeography } from "../util/clipToGeography.js"; -import { getFeatures, loadCog } from "@seasketch/geoprocessing/dataproviders"; +import { area } from "@turf/turf"; export interface SimpleResults { /** area of sketch within geography in square meters */ area: number; - /** list of ecoregions within bounding box of sketch */ - nearbyEcoregions: string[]; - /** minimum surface temperature within sketch */ - minTemp: number; - /** maximum surface temperature within sketch */ - maxTemp: number; } +/** + * Simple geoprocessing function with custom result payload + */ async function simpleFunction( sketch: | Sketch | SketchCollection, - extraParams: DefaultExtraParams = {}, ): Promise { - // Use caller-provided geographyId if provided - const geographyId = getFirstFromParam("geographyIds", extraParams); - // Get geography features, falling back to geography assigned to default-boundary group - const curGeography = project.getGeographyById(geographyId, { - fallbackGroup: "default-boundary", - }); - // Support sketches crossing antimeridian - const splitSketch = splitSketchAntimeridian(sketch); - // Clip to portion of sketch within current geography - const clippedSketch = await clipToGeography(splitSketch, curGeography); - - // Vector example - create list of country EEZ's nearby to the sketch (overlapping with sketch bounding box) - - // Fetch eez features overlapping sketch bbox - const ds = project.getExternalVectorDatasourceById("meow-ecos"); - const url = project.getDatasourceUrl(ds); - const eezFeatures = await getFeatures(ds, url, { - bbox: clippedSketch.bbox || bbox(clippedSketch), - }); - - // Reduce to list of ecoregion names - const regionNames = eezFeatures.reduce>( - (regionsSoFar, curFeat) => { - if (curFeat.properties && ds.idProperty) { - const regionName = curFeat.properties[ds.idProperty]; - return { ...regionsSoFar, [regionName]: regionName }; - } else { - return { ...regionsSoFar, unknown: "unknown" }; - } - }, - {}, - ); - - // Raster example - get minimum and maximum surface temperature within sketch for present day - - const minDs = project.getRasterDatasourceById("bo-present-surface-temp-min"); - const minUrl = project.getDatasourceUrl(minDs); - const minRaster = await loadCog(minUrl); - const minResult = await rasterStats(minRaster, { - feature: clippedSketch, - stats: ["min"], - }); - const minTemp = minResult[0].min; // extract value from band 1 - - const maxDs = project.getRasterDatasourceById("bo-present-surface-temp-max"); - const maxUrl = project.getDatasourceUrl(maxDs); - const maxRaster = await loadCog(maxUrl); - const maxResult = await rasterStats(maxRaster, { - feature: clippedSketch, - stats: ["max"], - }); - const maxTemp = maxResult[0].max; // extract value from band 1 - - if (!minTemp || !maxTemp) throw new Error("Missing minTemp or maxTemp"); + // Add analysis code + const sketchArea = area(sketch); + // Custom return type return { - area: turfArea(clippedSketch), - nearbyEcoregions: Object.keys(regionNames), - minTemp, - maxTemp, + area: sketchArea, }; } @@ -100,6 +35,4 @@ export default new GeoprocessingHandler(simpleFunction, { timeout: 60, // seconds memory: 1024, // megabytes executionMode: "async", - // Specify any Sketch Class form attributes that are required - requiresProperties: [], }); diff --git a/packages/template-blank-project/src/functions/simpleFunctionSmoke.test.ts b/packages/template-blank-project/src/functions/simpleFunctionSmoke.test.ts index 08eba208de..0f615dc2be 100644 --- a/packages/template-blank-project/src/functions/simpleFunctionSmoke.test.ts +++ b/packages/template-blank-project/src/functions/simpleFunctionSmoke.test.ts @@ -1,6 +1,3 @@ -/** - * @vitest-environment node - */ import Handler from "./simpleFunction.js"; import { getExamplePolygonSketchAll, diff --git a/packages/template-blank-project/src/functions/validatePolygon.test.ts b/packages/template-blank-project/src/functions/validatePolygon.test.ts new file mode 100644 index 0000000000..4327578f05 --- /dev/null +++ b/packages/template-blank-project/src/functions/validatePolygon.test.ts @@ -0,0 +1,94 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { area, polygon } from "@turf/turf"; +import { validatePolygon } from "./validatePolygon.js"; + +const valid = polygon([ + [ + [0, 0], + [0.1, 0], + [0.1, 0.1], + [0, 0.1], + [0, 0], + ], +]); + +const bowtie = polygon([ + [ + [0, 0], + [1, 1], + [1, 0], + [0, 1], + [0, 0], + ], +]); + +const tiny = polygon([ + [ + [0.000_001, 0.000_001], + [0.000_002, 0.000_001], + [0.000_002, 0.000_002], + [0.000_001, 0.000_002], + [0.000_001, 0.000_001], + ], +]); + +const world = polygon([ + [ + [-180, 90], + [-180, -90], + [180, -90], + [180, 90], + [-180, 90], + ], +]); + +describe("validatePolygon", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + test("validatePolygon - invalid polygon should throw", async () => { + try { + await validatePolygon(bowtie); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Your sketch polygon crosses itself"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("validatePolygon - tiny polygon should throw", async () => { + try { + await validatePolygon(tiny); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe( + "Shapes should be at least 100 square meters in size", + ); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("validatePolygon - world polygon should throw", async () => { + try { + await validatePolygon(world); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe( + "Shapes should be no more than 1,000,000 square km in size", + ); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("validatePolygon - valid polygon", async () => { + const validatedPolygon = await validatePolygon(valid); + expect(validatedPolygon).toEqual(valid); + }); +}); diff --git a/packages/template-blank-project/src/functions/validatePolygon.ts b/packages/template-blank-project/src/functions/validatePolygon.ts new file mode 100644 index 0000000000..3f9e7e7fe9 --- /dev/null +++ b/packages/template-blank-project/src/functions/validatePolygon.ts @@ -0,0 +1,37 @@ +import { + PreprocessingHandler, + Feature, + Sketch, + isPolygonFeature, + ValidationError, + ensureValidPolygon, +} from "@seasketch/geoprocessing"; + +/** + * Preprocessor takes a Polygon feature/sketch and throws an error if it's invalid. + * Otherwise returns the feature without modification to the geometry. + */ +export async function validatePolygon( + feature: Feature | Sketch, +): Promise { + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + ensureValidPolygon(feature, { + allowSelfCrossing: false, + minSize: 0.0001, // square kilometers, 100 square meters + enforceMinSize: true, + maxSize: 1_000_000, // square kilometers + enforceMaxSize: true, + }); + + return feature; +} + +export default new PreprocessingHandler(validatePolygon, { + title: "validatePolygon", + description: + "Verifies that input is a valid polygon and within size guidelines", + timeout: 40, + memory: 1024, +}); diff --git a/packages/template-blank-project/src/functions/validatePolygonSmoke.test.ts b/packages/template-blank-project/src/functions/validatePolygonSmoke.test.ts new file mode 100644 index 0000000000..69b21471b9 --- /dev/null +++ b/packages/template-blank-project/src/functions/validatePolygonSmoke.test.ts @@ -0,0 +1,11 @@ +import handler, { validatePolygon } from "./validatePolygon.js"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; + +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(validatePolygon, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-ocean-eez/examples/output/fsm-east-west/clipToLand.json b/packages/template-ocean-eez/examples/output/fsm-east-west/clipToLand.json index 0114c23bb4..74a0c001a3 100644 --- a/packages/template-ocean-eez/examples/output/fsm-east-west/clipToLand.json +++ b/packages/template-ocean-eez/examples/output/fsm-east-west/clipToLand.json @@ -1,32 +1,2885 @@ { "type": "Feature", - "properties": { - "name": "fsm-east-west", - "id": "abc123" - }, + "properties": {}, "geometry": { "type": "Polygon", "coordinates": [ [ [ - 149.3793667126688, - 7.033915089905491 + 151.592168, + 7.386367 ], [ - 167.1102326219892, - 7.196404501212555 + 151.592462, + 7.385742 ], [ - 167.0449537138265, - 7.671995147373664 + 151.592605, + 7.385535 ], [ - 149.3384476090506, - 7.40755063883897 + 151.592912, + 7.385359 ], [ - 149.3793667126688, - 7.033915089905491 + 151.593466, + 7.385161 + ], + [ + 151.593599, + 7.385213 + ], + [ + 151.593794, + 7.385165 + ], + [ + 151.593904, + 7.38507 + ], + [ + 151.594089, + 7.38503 + ], + [ + 151.59435, + 7.385031 + ], + [ + 151.594247, + 7.384883 + ], + [ + 151.594222, + 7.384747 + ], + [ + 151.594256, + 7.384576 + ], + [ + 151.59445, + 7.38453 + ], + [ + 151.594574, + 7.384398 + ], + [ + 151.594685, + 7.384378 + ], + [ + 151.594906, + 7.383971 + ], + [ + 151.595304, + 7.383995 + ], + [ + 151.595823, + 7.384282 + ], + [ + 151.59616, + 7.384282 + ], + [ + 151.596366, + 7.383947 + ], + [ + 151.59651, + 7.38317 + ], + [ + 151.596848, + 7.382667 + ], + [ + 151.597307, + 7.382488 + ], + [ + 151.597681, + 7.38238 + ], + [ + 151.598224, + 7.381805 + ], + [ + 151.598441, + 7.381494 + ], + [ + 151.598356, + 7.381267 + ], + [ + 151.598174, + 7.380722 + ], + [ + 151.597977, + 7.380442 + ], + [ + 151.597935, + 7.380098 + ], + [ + 151.597866, + 7.379782 + ], + [ + 151.598353, + 7.379588 + ], + [ + 151.598967, + 7.379342 + ], + [ + 151.599848, + 7.37853 + ], + [ + 151.60025, + 7.374845 + ], + [ + 151.600648, + 7.374756 + ], + [ + 151.601248, + 7.37462 + ], + [ + 151.601446, + 7.374456 + ], + [ + 151.601912, + 7.37407 + ], + [ + 151.602388, + 7.374273 + ], + [ + 151.603891, + 7.374249 + ], + [ + 151.604422, + 7.374809 + ], + [ + 151.605181, + 7.374632 + ], + [ + 151.605444, + 7.373859 + ], + [ + 151.604884, + 7.373406 + ], + [ + 151.605492, + 7.372652 + ], + [ + 151.60673, + 7.370359 + ], + [ + 151.608037, + 7.3705 + ], + [ + 151.608284, + 7.370834 + ], + [ + 151.608603, + 7.371086 + ], + [ + 151.609683, + 7.371664 + ], + [ + 151.6101, + 7.372281 + ], + [ + 151.610942, + 7.370926 + ], + [ + 151.610612, + 7.370552 + ], + [ + 151.610342, + 7.370624 + ], + [ + 151.610228, + 7.370488 + ], + [ + 151.610171, + 7.370246 + ], + [ + 151.610135, + 7.369763 + ], + [ + 151.610242, + 7.3693 + ], + [ + 151.610465, + 7.369194 + ], + [ + 151.610888, + 7.369073 + ], + [ + 151.611635, + 7.368955 + ], + [ + 151.611628, + 7.368084 + ], + [ + 151.611622, + 7.36734 + ], + [ + 151.612079, + 7.36714 + ], + [ + 151.612106, + 7.366903 + ], + [ + 151.611922, + 7.366519 + ], + [ + 151.61197, + 7.365975 + ], + [ + 151.61229, + 7.365379 + ], + [ + 151.612455, + 7.364875 + ], + [ + 151.612637, + 7.36433 + ], + [ + 151.612939, + 7.36363 + ], + [ + 151.612748, + 7.362953 + ], + [ + 151.612825, + 7.362372 + ], + [ + 151.612812, + 7.362011 + ], + [ + 151.612804, + 7.361784 + ], + [ + 151.612326, + 7.360817 + ], + [ + 151.611914, + 7.360169 + ], + [ + 151.611626, + 7.359718 + ], + [ + 151.610853, + 7.35949 + ], + [ + 151.610305, + 7.359149 + ], + [ + 151.609706, + 7.358754 + ], + [ + 151.609816, + 7.358006 + ], + [ + 151.609952, + 7.357471 + ], + [ + 151.609557, + 7.357134 + ], + [ + 151.609311, + 7.357207 + ], + [ + 151.609253, + 7.357224 + ], + [ + 151.60925, + 7.357225 + ], + [ + 151.608898, + 7.357324 + ], + [ + 151.60851, + 7.357311 + ], + [ + 151.608404, + 7.357187 + ], + [ + 151.607907, + 7.356786 + ], + [ + 151.607792, + 7.356694 + ], + [ + 151.607229, + 7.356645 + ], + [ + 151.607164, + 7.356365 + ], + [ + 151.606591, + 7.355916 + ], + [ + 151.605982, + 7.35573 + ], + [ + 151.605306, + 7.355144 + ], + [ + 151.6048, + 7.354679 + ], + [ + 151.6047, + 7.354542 + ], + [ + 151.604398, + 7.354127 + ], + [ + 151.604444, + 7.353736 + ], + [ + 151.604648, + 7.353615 + ], + [ + 151.604849, + 7.353638 + ], + [ + 151.604902, + 7.353223 + ], + [ + 151.604902, + 7.352965 + ], + [ + 151.605027, + 7.352818 + ], + [ + 151.605247, + 7.352687 + ], + [ + 151.605484, + 7.352658 + ], + [ + 151.60564, + 7.352671 + ], + [ + 151.605859, + 7.352214 + ], + [ + 151.606368, + 7.351947 + ], + [ + 151.606613, + 7.35184 + ], + [ + 151.606758, + 7.351685 + ], + [ + 151.606997, + 7.351545 + ], + [ + 151.60742, + 7.351351 + ], + [ + 151.607598, + 7.351266 + ], + [ + 151.607841, + 7.351148 + ], + [ + 151.608299, + 7.352003 + ], + [ + 151.608724, + 7.352223 + ], + [ + 151.608817, + 7.352693 + ], + [ + 151.60937, + 7.353089 + ], + [ + 151.609719, + 7.35334 + ], + [ + 151.610434, + 7.35316 + ], + [ + 151.610763, + 7.352815 + ], + [ + 151.611103, + 7.352506 + ], + [ + 151.611262, + 7.35292 + ], + [ + 151.611525, + 7.353604 + ], + [ + 151.611783, + 7.353862 + ], + [ + 151.612394, + 7.35364 + ], + [ + 151.612892, + 7.353238 + ], + [ + 151.61336, + 7.352837 + ], + [ + 151.613525, + 7.352377 + ], + [ + 151.613607, + 7.351936 + ], + [ + 151.613671, + 7.351365 + ], + [ + 151.61347, + 7.350646 + ], + [ + 151.613372, + 7.350392 + ], + [ + 151.61327, + 7.350088 + ], + [ + 151.612886, + 7.349893 + ], + [ + 151.612988, + 7.349368 + ], + [ + 151.613024, + 7.349286 + ], + [ + 151.613159, + 7.348979 + ], + [ + 151.613133, + 7.348649 + ], + [ + 151.613441, + 7.347727 + ], + [ + 151.613612, + 7.34678 + ], + [ + 151.61298, + 7.346441 + ], + [ + 151.612732, + 7.346356 + ], + [ + 151.612186, + 7.346458 + ], + [ + 151.611427, + 7.346576 + ], + [ + 151.611243, + 7.346351 + ], + [ + 151.610889, + 7.346365 + ], + [ + 151.610691, + 7.346084 + ], + [ + 151.610334, + 7.345741 + ], + [ + 151.609884, + 7.345635 + ], + [ + 151.609771, + 7.344821 + ], + [ + 151.609275, + 7.344287 + ], + [ + 151.609204, + 7.343388 + ], + [ + 151.609346, + 7.342532 + ], + [ + 151.609219, + 7.341605 + ], + [ + 151.608978, + 7.340679 + ], + [ + 151.60919, + 7.339934 + ], + [ + 151.609318, + 7.339345 + ], + [ + 151.609091, + 7.339008 + ], + [ + 151.60885, + 7.338432 + ], + [ + 151.608865, + 7.33773 + ], + [ + 151.608978, + 7.337098 + ], + [ + 151.60885, + 7.336368 + ], + [ + 151.608907, + 7.336115 + ], + [ + 151.60844, + 7.336031 + ], + [ + 151.608001, + 7.335778 + ], + [ + 151.607647, + 7.335287 + ], + [ + 151.607548, + 7.334585 + ], + [ + 151.607576, + 7.333855 + ], + [ + 151.60684, + 7.333167 + ], + [ + 151.606387, + 7.332591 + ], + [ + 151.606019, + 7.332451 + ], + [ + 151.60541, + 7.332408 + ], + [ + 151.604816, + 7.332029 + ], + [ + 151.604334, + 7.331664 + ], + [ + 151.604589, + 7.33071 + ], + [ + 151.603981, + 7.329642 + ], + [ + 151.60391, + 7.328238 + ], + [ + 151.604303, + 7.327934 + ], + [ + 151.60394, + 7.326995 + ], + [ + 151.603891, + 7.32672 + ], + [ + 151.603837, + 7.326361 + ], + [ + 151.603952, + 7.325715 + ], + [ + 151.604078, + 7.32523 + ], + [ + 151.604256, + 7.32536 + ], + [ + 151.604306, + 7.32484 + ], + [ + 151.604356, + 7.324231 + ], + [ + 151.604561, + 7.323896 + ], + [ + 151.604748, + 7.32313 + ], + [ + 151.604971, + 7.322663 + ], + [ + 151.605321, + 7.32234 + ], + [ + 151.605558, + 7.321999 + ], + [ + 151.605719, + 7.321765 + ], + [ + 151.605882, + 7.321454 + ], + [ + 151.606205, + 7.321242 + ], + [ + 151.606872, + 7.320688 + ], + [ + 151.607578, + 7.320251 + ], + [ + 151.608151, + 7.319814 + ], + [ + 151.608591, + 7.319438 + ], + [ + 151.609448, + 7.318576 + ], + [ + 151.609749, + 7.31863 + ], + [ + 151.610117, + 7.318821 + ], + [ + 151.610672, + 7.319144 + ], + [ + 151.61163, + 7.319712 + ], + [ + 151.612132, + 7.320347 + ], + [ + 151.612923, + 7.320479 + ], + [ + 151.613635, + 7.321083 + ], + [ + 151.613876, + 7.321023 + ], + [ + 151.614401, + 7.321185 + ], + [ + 151.614666, + 7.321406 + ], + [ + 151.615167, + 7.321508 + ], + [ + 151.615511, + 7.321424 + ], + [ + 151.615746, + 7.321209 + ], + [ + 151.616096, + 7.321358 + ], + [ + 151.616609, + 7.321478 + ], + [ + 151.617074, + 7.321466 + ], + [ + 151.617466, + 7.321526 + ], + [ + 151.618051, + 7.321813 + ], + [ + 151.619203, + 7.322274 + ], + [ + 151.619523, + 7.322286 + ], + [ + 151.620036, + 7.322178 + ], + [ + 151.620368, + 7.3221 + ], + [ + 151.620814, + 7.322334 + ], + [ + 151.620915, + 7.322576 + ], + [ + 151.621399, + 7.323046 + ], + [ + 151.622286, + 7.32365 + ], + [ + 151.623149, + 7.324051 + ], + [ + 151.623306, + 7.324428 + ], + [ + 151.623728, + 7.324596 + ], + [ + 151.623931, + 7.324523 + ], + [ + 151.624275, + 7.324438 + ], + [ + 151.62478, + 7.324907 + ], + [ + 151.625387, + 7.325458 + ], + [ + 151.625675, + 7.325774 + ], + [ + 151.626031, + 7.325861 + ], + [ + 151.626452, + 7.326028 + ], + [ + 151.626979, + 7.326089 + ], + [ + 151.627531, + 7.326417 + ], + [ + 151.628185, + 7.326765 + ], + [ + 151.628708, + 7.327046 + ], + [ + 151.629024, + 7.327353 + ], + [ + 151.62934, + 7.327279 + ], + [ + 151.630038, + 7.327099 + ], + [ + 151.630467, + 7.327707 + ], + [ + 151.630666, + 7.328222 + ], + [ + 151.630786, + 7.328216 + ], + [ + 151.630924, + 7.327711 + ], + [ + 151.63105, + 7.327752 + ], + [ + 151.630927, + 7.328261 + ], + [ + 151.631011, + 7.328292 + ], + [ + 151.631473, + 7.32846 + ], + [ + 151.631968, + 7.328566 + ], + [ + 151.632802, + 7.328563 + ], + [ + 151.633206, + 7.328587 + ], + [ + 151.633635, + 7.328573 + ], + [ + 151.634552, + 7.328442 + ], + [ + 151.635928, + 7.328129 + ], + [ + 151.635998, + 7.32805 + ], + [ + 151.636038, + 7.32801 + ], + [ + 151.636097, + 7.327979 + ], + [ + 151.63617, + 7.327978 + ], + [ + 151.636246, + 7.327994 + ], + [ + 151.636397, + 7.328036 + ], + [ + 151.636397, + 7.32795 + ], + [ + 151.636426, + 7.327867 + ], + [ + 151.636452, + 7.32777 + ], + [ + 151.636482, + 7.327726 + ], + [ + 151.636537, + 7.327696 + ], + [ + 151.63667, + 7.327646 + ], + [ + 151.636827, + 7.327632 + ], + [ + 151.636943, + 7.327646 + ], + [ + 151.637051, + 7.327648 + ], + [ + 151.637075, + 7.327638 + ], + [ + 151.6371, + 7.327637 + ], + [ + 151.637139, + 7.32764 + ], + [ + 151.637158, + 7.327656 + ], + [ + 151.63717, + 7.327663 + ], + [ + 151.637187, + 7.327666 + ], + [ + 151.63721, + 7.32766 + ], + [ + 151.637229, + 7.327647 + ], + [ + 151.63723, + 7.32762 + ], + [ + 151.637217, + 7.327583 + ], + [ + 151.637197, + 7.32755 + ], + [ + 151.637162, + 7.32753 + ], + [ + 151.637148, + 7.327506 + ], + [ + 151.637144, + 7.327469 + ], + [ + 151.637117, + 7.327432 + ], + [ + 151.637113, + 7.327397 + ], + [ + 151.63711, + 7.327374 + ], + [ + 151.637116, + 7.327357 + ], + [ + 151.637133, + 7.327344 + ], + [ + 151.637163, + 7.327339 + ], + [ + 151.637312, + 7.327618 + ], + [ + 151.637332, + 7.327723 + ], + [ + 151.637394, + 7.327937 + ], + [ + 151.638043, + 7.328118 + ], + [ + 151.638709, + 7.328429 + ], + [ + 151.638912, + 7.328598 + ], + [ + 151.639094, + 7.328817 + ], + [ + 151.639245, + 7.329311 + ], + [ + 151.639082, + 7.330005 + ], + [ + 151.63898, + 7.330199 + ], + [ + 151.638708, + 7.330717 + ], + [ + 151.638684, + 7.330998 + ], + [ + 151.637957, + 7.331942 + ], + [ + 151.637405, + 7.332678 + ], + [ + 151.637232, + 7.33305 + ], + [ + 151.637057, + 7.333185 + ], + [ + 151.636908, + 7.333211 + ], + [ + 151.636835, + 7.333342 + ], + [ + 151.636886, + 7.333638 + ], + [ + 151.636375, + 7.334125 + ], + [ + 151.636353, + 7.334446 + ], + [ + 151.636242, + 7.334561 + ], + [ + 151.636008, + 7.334861 + ], + [ + 151.635705, + 7.335335 + ], + [ + 151.635385, + 7.335792 + ], + [ + 151.635274, + 7.335847 + ], + [ + 151.63492, + 7.335936 + ], + [ + 151.634813, + 7.336126 + ], + [ + 151.634596, + 7.336426 + ], + [ + 151.634468, + 7.336676 + ], + [ + 151.634489, + 7.336951 + ], + [ + 151.634301, + 7.337268 + ], + [ + 151.634084, + 7.337531 + ], + [ + 151.633986, + 7.337776 + ], + [ + 151.633776, + 7.338026 + ], + [ + 151.633597, + 7.338098 + ], + [ + 151.633337, + 7.338094 + ], + [ + 151.633111, + 7.33836 + ], + [ + 151.632962, + 7.338792 + ], + [ + 151.632979, + 7.339219 + ], + [ + 151.632865, + 7.33988 + ], + [ + 151.632822, + 7.340565 + ], + [ + 151.632659, + 7.340916 + ], + [ + 151.632868, + 7.341267 + ], + [ + 151.632928, + 7.341643 + ], + [ + 151.633099, + 7.34269 + ], + [ + 151.632951, + 7.342777 + ], + [ + 151.632793, + 7.342714 + ], + [ + 151.632767, + 7.342785 + ], + [ + 151.634615, + 7.343576 + ], + [ + 151.634566, + 7.343684 + ], + [ + 151.633068, + 7.343031 + ], + [ + 151.633114, + 7.343205 + ], + [ + 151.633174, + 7.343504 + ], + [ + 151.632788, + 7.34354 + ], + [ + 151.632414, + 7.343744 + ], + [ + 151.632196, + 7.343444 + ], + [ + 151.631629, + 7.343696 + ], + [ + 151.631569, + 7.343959 + ], + [ + 151.631424, + 7.344282 + ], + [ + 151.631123, + 7.344533 + ], + [ + 151.63099, + 7.344952 + ], + [ + 151.631074, + 7.345275 + ], + [ + 151.63105, + 7.345862 + ], + [ + 151.630749, + 7.346005 + ], + [ + 151.630314, + 7.34634 + ], + [ + 151.630289, + 7.346836 + ], + [ + 151.63017, + 7.347308 + ], + [ + 151.629967, + 7.347452 + ], + [ + 151.629755, + 7.34805 + ], + [ + 151.629428, + 7.348568 + ], + [ + 151.628941, + 7.34899 + ], + [ + 151.628513, + 7.349546 + ], + [ + 151.627828, + 7.350325 + ], + [ + 151.627606, + 7.350481 + ], + [ + 151.627128, + 7.350818 + ], + [ + 151.626404, + 7.351171 + ], + [ + 151.625654, + 7.351276 + ], + [ + 151.62465, + 7.351121 + ], + [ + 151.623925, + 7.350936 + ], + [ + 151.6236, + 7.350957 + ], + [ + 151.623595, + 7.351025 + ], + [ + 151.623633, + 7.351366 + ], + [ + 151.623684, + 7.351398 + ], + [ + 151.623692, + 7.351456 + ], + [ + 151.623763, + 7.351465 + ], + [ + 151.623872, + 7.351613 + ], + [ + 151.623867, + 7.351638 + ], + [ + 151.623752, + 7.351492 + ], + [ + 151.623639, + 7.351498 + ], + [ + 151.623602, + 7.351479 + ], + [ + 151.623526, + 7.350943 + ], + [ + 151.623409, + 7.350934 + ], + [ + 151.623192, + 7.351005 + ], + [ + 151.622758, + 7.351136 + ], + [ + 151.622319, + 7.351424 + ], + [ + 151.621951, + 7.351836 + ], + [ + 151.621563, + 7.352143 + ], + [ + 151.622174, + 7.352588 + ], + [ + 151.622407, + 7.353121 + ], + [ + 151.622543, + 7.354044 + ], + [ + 151.621964, + 7.355082 + ], + [ + 151.621373, + 7.35607 + ], + [ + 151.620801, + 7.356786 + ], + [ + 151.620154, + 7.35717 + ], + [ + 151.619672, + 7.357529 + ], + [ + 151.619551, + 7.357841 + ], + [ + 151.620758, + 7.3579 + ], + [ + 151.621385, + 7.357852 + ], + [ + 151.621711, + 7.357577 + ], + [ + 151.622518, + 7.35734 + ], + [ + 151.622793, + 7.356786 + ], + [ + 151.622857, + 7.356656 + ], + [ + 151.623316, + 7.356117 + ], + [ + 151.624346, + 7.355845 + ], + [ + 151.625995, + 7.355687 + ], + [ + 151.628065, + 7.355374 + ], + [ + 151.628275, + 7.354574 + ], + [ + 151.628299, + 7.35431 + ], + [ + 151.628178, + 7.3537 + ], + [ + 151.628891, + 7.353246 + ], + [ + 151.629617, + 7.352487 + ], + [ + 151.630723, + 7.351847 + ], + [ + 151.631885, + 7.350997 + ], + [ + 151.632916, + 7.350561 + ], + [ + 151.633974, + 7.349995 + ], + [ + 151.634852, + 7.349132 + ], + [ + 151.635604, + 7.348568 + ], + [ + 151.636678, + 7.348282 + ], + [ + 151.637403, + 7.348197 + ], + [ + 151.637977, + 7.348023 + ], + [ + 151.638633, + 7.348634 + ], + [ + 151.638898, + 7.350371 + ], + [ + 151.638111, + 7.351294 + ], + [ + 151.637773, + 7.351668 + ], + [ + 151.637492, + 7.352166 + ], + [ + 151.637506, + 7.352618 + ], + [ + 151.637739, + 7.352735 + ], + [ + 151.637824, + 7.352955 + ], + [ + 151.637662, + 7.35331 + ], + [ + 151.637466, + 7.353391 + ], + [ + 151.637274, + 7.353615 + ], + [ + 151.637341, + 7.353812 + ], + [ + 151.63715, + 7.353949 + ], + [ + 151.63698, + 7.35397 + ], + [ + 151.636822, + 7.353949 + ], + [ + 151.63669, + 7.353797 + ], + [ + 151.636591, + 7.353983 + ], + [ + 151.636519, + 7.354292 + ], + [ + 151.636451, + 7.354482 + ], + [ + 151.636344, + 7.354656 + ], + [ + 151.636233, + 7.354778 + ], + [ + 151.636109, + 7.354884 + ], + [ + 151.636219, + 7.35505 + ], + [ + 151.636219, + 7.355363 + ], + [ + 151.636221, + 7.355628 + ], + [ + 151.636223, + 7.355957 + ], + [ + 151.636115, + 7.356579 + ], + [ + 151.636031, + 7.356786 + ], + [ + 151.635896, + 7.357118 + ], + [ + 151.635853, + 7.357457 + ], + [ + 151.635794, + 7.357859 + ], + [ + 151.63576, + 7.358057 + ], + [ + 151.635586, + 7.358418 + ], + [ + 151.635405, + 7.358734 + ], + [ + 151.635525, + 7.358878 + ], + [ + 151.635568, + 7.359077 + ], + [ + 151.635521, + 7.35931 + ], + [ + 151.635333, + 7.359703 + ], + [ + 151.635128, + 7.359843 + ], + [ + 151.635038, + 7.359949 + ], + [ + 151.635098, + 7.36008 + ], + [ + 151.63532, + 7.360164 + ], + [ + 151.635418, + 7.36019 + ], + [ + 151.635525, + 7.360126 + ], + [ + 151.63555, + 7.36005 + ], + [ + 151.635738, + 7.360025 + ], + [ + 151.635939, + 7.359746 + ], + [ + 151.636118, + 7.359703 + ], + [ + 151.636152, + 7.360088 + ], + [ + 151.635913, + 7.360262 + ], + [ + 151.635994, + 7.360351 + ], + [ + 151.636096, + 7.360532 + ], + [ + 151.636152, + 7.360758 + ], + [ + 151.636404, + 7.361033 + ], + [ + 151.636529, + 7.361259 + ], + [ + 151.636691, + 7.361395 + ], + [ + 151.636774, + 7.361556 + ], + [ + 151.636624, + 7.361772 + ], + [ + 151.636078, + 7.3621 + ], + [ + 151.636178, + 7.362314 + ], + [ + 151.63637, + 7.362301 + ], + [ + 151.636578, + 7.362053 + ], + [ + 151.63663, + 7.361908 + ], + [ + 151.636796, + 7.361802 + ], + [ + 151.636911, + 7.361771 + ], + [ + 151.637013, + 7.361778 + ], + [ + 151.637159, + 7.362022 + ], + [ + 151.637351, + 7.361971 + ], + [ + 151.637504, + 7.361954 + ], + [ + 151.637619, + 7.36206 + ], + [ + 151.637027, + 7.362557 + ], + [ + 151.636586, + 7.36267 + ], + [ + 151.636339, + 7.362585 + ], + [ + 151.636108, + 7.362653 + ], + [ + 151.636126, + 7.362856 + ], + [ + 151.636339, + 7.363059 + ], + [ + 151.63646, + 7.363283 + ], + [ + 151.636493, + 7.363439 + ], + [ + 151.636466, + 7.363538 + ], + [ + 151.636424, + 7.363628 + ], + [ + 151.636262, + 7.364058 + ], + [ + 151.636296, + 7.364447 + ], + [ + 151.636399, + 7.364464 + ], + [ + 151.636748, + 7.36443 + ], + [ + 151.637124, + 7.364388 + ], + [ + 151.637514, + 7.364696 + ], + [ + 151.637815, + 7.365191 + ], + [ + 151.637864, + 7.365515 + ], + [ + 151.637951, + 7.3657 + ], + [ + 151.63814, + 7.365923 + ], + [ + 151.638304, + 7.366412 + ], + [ + 151.638433, + 7.366809 + ], + [ + 151.638562, + 7.367023 + ], + [ + 151.638734, + 7.367384 + ], + [ + 151.638742, + 7.367845 + ], + [ + 151.638581, + 7.368536 + ], + [ + 151.638469, + 7.368699 + ], + [ + 151.638449, + 7.368972 + ], + [ + 151.638374, + 7.369211 + ], + [ + 151.638267, + 7.369448 + ], + [ + 151.638085, + 7.369606 + ], + [ + 151.637998, + 7.369718 + ], + [ + 151.637879, + 7.369726 + ], + [ + 151.637745, + 7.369688 + ], + [ + 151.637633, + 7.369779 + ], + [ + 151.63745, + 7.369811 + ], + [ + 151.637166, + 7.369865 + ], + [ + 151.637128, + 7.369935 + ], + [ + 151.637047, + 7.369962 + ], + [ + 151.636975, + 7.36992 + ], + [ + 151.636854, + 7.370011 + ], + [ + 151.636856, + 7.37012 + ], + [ + 151.636805, + 7.370164 + ], + [ + 151.636724, + 7.370208 + ], + [ + 151.636572, + 7.370213 + ], + [ + 151.636342, + 7.370148 + ], + [ + 151.636156, + 7.370369 + ], + [ + 151.635797, + 7.370448 + ], + [ + 151.635519, + 7.370543 + ], + [ + 151.635438, + 7.37067 + ], + [ + 151.63529, + 7.370783 + ], + [ + 151.635105, + 7.370882 + ], + [ + 151.63491, + 7.370964 + ], + [ + 151.634793, + 7.370996 + ], + [ + 151.634752, + 7.371089 + ], + [ + 151.634615, + 7.371208 + ], + [ + 151.634426, + 7.371238 + ], + [ + 151.634104, + 7.371402 + ], + [ + 151.633882, + 7.371505 + ], + [ + 151.633744, + 7.371522 + ], + [ + 151.633613, + 7.371583 + ], + [ + 151.633098, + 7.371684 + ], + [ + 151.632619, + 7.371614 + ], + [ + 151.632253, + 7.371268 + ], + [ + 151.631901, + 7.371318 + ], + [ + 151.632038, + 7.371889 + ], + [ + 151.631208, + 7.372524 + ], + [ + 151.630413, + 7.372861 + ], + [ + 151.630018, + 7.372786 + ], + [ + 151.629398, + 7.373498 + ], + [ + 151.629215, + 7.373709 + ], + [ + 151.629048, + 7.374041 + ], + [ + 151.628865, + 7.374406 + ], + [ + 151.628286, + 7.374851 + ], + [ + 151.627671, + 7.374706 + ], + [ + 151.627375, + 7.375208 + ], + [ + 151.62703, + 7.375608 + ], + [ + 151.62651, + 7.375878 + ], + [ + 151.626102, + 7.375931 + ], + [ + 151.62558, + 7.376048 + ], + [ + 151.625367, + 7.376564 + ], + [ + 151.625213, + 7.377105 + ], + [ + 151.624923, + 7.377503 + ], + [ + 151.624556, + 7.377841 + ], + [ + 151.623648, + 7.378403 + ], + [ + 151.62351, + 7.378457 + ], + [ + 151.623289, + 7.378462 + ], + [ + 151.623018, + 7.378317 + ], + [ + 151.622272, + 7.37895 + ], + [ + 151.621333, + 7.379123 + ], + [ + 151.619956, + 7.379392 + ], + [ + 151.619605, + 7.379291 + ], + [ + 151.619105, + 7.379244 + ], + [ + 151.618853, + 7.37908 + ], + [ + 151.618688, + 7.379114 + ], + [ + 151.618335, + 7.379233 + ], + [ + 151.617907, + 7.379144 + ], + [ + 151.617592, + 7.378889 + ], + [ + 151.617048, + 7.378688 + ], + [ + 151.61704, + 7.378501 + ], + [ + 151.617065, + 7.378307 + ], + [ + 151.617219, + 7.378121 + ], + [ + 151.617381, + 7.377723 + ], + [ + 151.617072, + 7.377569 + ], + [ + 151.616969, + 7.377687 + ], + [ + 151.61693, + 7.377755 + ], + [ + 151.616704, + 7.378175 + ], + [ + 151.616125, + 7.378071 + ], + [ + 151.61591, + 7.377971 + ], + [ + 151.615964, + 7.377812 + ], + [ + 151.615948, + 7.377721 + ], + [ + 151.615868, + 7.377714 + ], + [ + 151.615693, + 7.377832 + ], + [ + 151.6155, + 7.377775 + ], + [ + 151.615429, + 7.377646 + ], + [ + 151.615301, + 7.377672 + ], + [ + 151.615198, + 7.377726 + ], + [ + 151.614797, + 7.377376 + ], + [ + 151.61443, + 7.3773 + ], + [ + 151.614082, + 7.377207 + ], + [ + 151.613938, + 7.377219 + ], + [ + 151.613567, + 7.377322 + ], + [ + 151.613239, + 7.377624 + ], + [ + 151.613188, + 7.378078 + ], + [ + 151.613354, + 7.378422 + ], + [ + 151.613883, + 7.378938 + ], + [ + 151.613908, + 7.379302 + ], + [ + 151.614041, + 7.379689 + ], + [ + 151.614156, + 7.379962 + ], + [ + 151.614019, + 7.380342 + ], + [ + 151.613772, + 7.380977 + ], + [ + 151.61357, + 7.382088 + ], + [ + 151.613012, + 7.383262 + ], + [ + 151.612533, + 7.383631 + ], + [ + 151.612142, + 7.384226 + ], + [ + 151.611669, + 7.384441 + ], + [ + 151.611144, + 7.384776 + ], + [ + 151.611033, + 7.384937 + ], + [ + 151.610504, + 7.3847 + ], + [ + 151.610214, + 7.384742 + ], + [ + 151.609876, + 7.385068 + ], + [ + 151.610116, + 7.385759 + ], + [ + 151.61006, + 7.385973 + ], + [ + 151.610028, + 7.386153 + ], + [ + 151.609548, + 7.386781 + ], + [ + 151.609113, + 7.386993 + ], + [ + 151.608823, + 7.386891 + ], + [ + 151.608507, + 7.38679 + ], + [ + 151.608516, + 7.386942 + ], + [ + 151.608644, + 7.387128 + ], + [ + 151.608874, + 7.387314 + ], + [ + 151.609006, + 7.387648 + ], + [ + 151.608811, + 7.387862 + ], + [ + 151.608791, + 7.388142 + ], + [ + 151.609043, + 7.388679 + ], + [ + 151.608924, + 7.389561 + ], + [ + 151.609221, + 7.390373 + ], + [ + 151.609253, + 7.391138 + ], + [ + 151.60866, + 7.391974 + ], + [ + 151.608174, + 7.39272 + ], + [ + 151.607668, + 7.393278 + ], + [ + 151.607048, + 7.393454 + ], + [ + 151.606421, + 7.393579 + ], + [ + 151.605806, + 7.393852 + ], + [ + 151.605439, + 7.393916 + ], + [ + 151.605298, + 7.393878 + ], + [ + 151.605034, + 7.393801 + ], + [ + 151.604846, + 7.393708 + ], + [ + 151.604692, + 7.393311 + ], + [ + 151.604479, + 7.393226 + ], + [ + 151.604164, + 7.393268 + ], + [ + 151.603976, + 7.393344 + ], + [ + 151.603852, + 7.393412 + ], + [ + 151.603878, + 7.393505 + ], + [ + 151.604007, + 7.393682 + ], + [ + 151.603961, + 7.3939 + ], + [ + 151.603884, + 7.393971 + ], + [ + 151.603707, + 7.394021 + ], + [ + 151.603582, + 7.394036 + ], + [ + 151.603438, + 7.394123 + ], + [ + 151.603219, + 7.394032 + ], + [ + 151.603012, + 7.394151 + ], + [ + 151.602621, + 7.394169 + ], + [ + 151.602214, + 7.393876 + ], + [ + 151.601995, + 7.394127 + ], + [ + 151.601563, + 7.394114 + ], + [ + 151.601456, + 7.39392 + ], + [ + 151.600931, + 7.393994 + ], + [ + 151.6005, + 7.394021 + ], + [ + 151.599633, + 7.394022 + ], + [ + 151.59874, + 7.394152 + ], + [ + 151.597224, + 7.394569 + ], + [ + 151.596298, + 7.394713 + ], + [ + 151.595898, + 7.394792 + ], + [ + 151.595426, + 7.394866 + ], + [ + 151.59519, + 7.394937 + ], + [ + 151.594956, + 7.394796 + ], + [ + 151.594854, + 7.394646 + ], + [ + 151.594658, + 7.394477 + ], + [ + 151.594254, + 7.39419 + ], + [ + 151.593434, + 7.393616 + ], + [ + 151.592958, + 7.393317 + ], + [ + 151.59268, + 7.393147 + ], + [ + 151.592465, + 7.39291 + ], + [ + 151.592444, + 7.392608 + ], + [ + 151.592632, + 7.392185 + ], + [ + 151.592716, + 7.391857 + ], + [ + 151.592699, + 7.391716 + ], + [ + 151.5925, + 7.391158 + ], + [ + 151.592471, + 7.390816 + ], + [ + 151.592466, + 7.390692 + ], + [ + 151.592407, + 7.390665 + ], + [ + 151.592383, + 7.390556 + ], + [ + 151.592444, + 7.390508 + ], + [ + 151.592449, + 7.390343 + ], + [ + 151.59253, + 7.390123 + ], + [ + 151.592585, + 7.389477 + ], + [ + 151.592626, + 7.388548 + ], + [ + 151.592443, + 7.387694 + ], + [ + 151.59217, + 7.386418 + ], + [ + 151.592168, + 7.386367 ] ] ] diff --git a/packages/template-ocean-eez/examples/output/fsm-east-west/clipToOceanEez.json b/packages/template-ocean-eez/examples/output/fsm-east-west/clipToOceanEez.json index e1066f2bbf..8f697232f1 100644 --- a/packages/template-ocean-eez/examples/output/fsm-east-west/clipToOceanEez.json +++ b/packages/template-ocean-eez/examples/output/fsm-east-west/clipToOceanEez.json @@ -13,6 +13,10 @@ 149.3793667126688, 7.033915089905491 ], + [ + 164.35549318251987, + 7.171159485424103 + ], [ 167.1102326219892, 7.196404501212555 @@ -21,6 +25,10 @@ 167.0449537138265, 7.671995147373664 ], + [ + 163.7168238292056, + 7.62228993356862 + ], [ 151.89989919159765, 7.445805605734972 diff --git a/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToLand.json b/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToLand.json index eaf767e262..1911f32751 100644 --- a/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToLand.json +++ b/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToLand.json @@ -1,32 +1,2101 @@ { "type": "Feature", - "properties": { - "name": "fsm-land-to-int", - "id": "abc123" - }, + "properties": {}, "geometry": { "type": "Polygon", "coordinates": [ [ + [ + 158.19293548174312, + 6.928861050063027 + ], [ 158.20369776990452, 6.90548095103928 ], [ - 166.98012722916735, - 19.178380367966966 + 158.224593, + 6.934700699052486 ], [ - 166.68945365646283, - 19.33759123476956 + 158.2245967907417, + 6.934706 ], [ - 158.19293548174312, - 6.928861050063027 + 158.23893770245004, + 6.954760233644836 ], [ - 158.20369776990452, - 6.90548095103928 + 158.238906, + 6.954745 + ], + [ + 158.238864, + 6.954708 + ], + [ + 158.238852, + 6.954666 + ], + [ + 158.238808, + 6.954671 + ], + [ + 158.238761, + 6.954687 + ], + [ + 158.23872, + 6.954679 + ], + [ + 158.238706, + 6.954663 + ], + [ + 158.238689, + 6.954656 + ], + [ + 158.238628, + 6.954592 + ], + [ + 158.23858, + 6.954511 + ], + [ + 158.238554, + 6.954518 + ], + [ + 158.23856, + 6.954542 + ], + [ + 158.238568, + 6.954576 + ], + [ + 158.238594, + 6.954599 + ], + [ + 158.238619, + 6.954625 + ], + [ + 158.238644, + 6.954626 + ], + [ + 158.238674, + 6.954686 + ], + [ + 158.23869, + 6.954744 + ], + [ + 158.238684, + 6.954797 + ], + [ + 158.238666, + 6.954846 + ], + [ + 158.238626, + 6.954922 + ], + [ + 158.238625, + 6.954982 + ], + [ + 158.238584, + 6.955062 + ], + [ + 158.238548, + 6.955086 + ], + [ + 158.238543, + 6.955131 + ], + [ + 158.238497, + 6.955172 + ], + [ + 158.238444, + 6.955252 + ], + [ + 158.238362, + 6.955278 + ], + [ + 158.238368, + 6.955319 + ], + [ + 158.238411, + 6.955366 + ], + [ + 158.238423, + 6.955467 + ], + [ + 158.238428, + 6.95562 + ], + [ + 158.238417, + 6.955752 + ], + [ + 158.238389, + 6.955804 + ], + [ + 158.238382, + 6.955887 + ], + [ + 158.238447, + 6.955889 + ], + [ + 158.238509, + 6.955916 + ], + [ + 158.238562, + 6.956035 + ], + [ + 158.238615, + 6.956121 + ], + [ + 158.238645, + 6.956247 + ], + [ + 158.238684, + 6.956273 + ], + [ + 158.238726, + 6.956369 + ], + [ + 158.238736, + 6.956484 + ], + [ + 158.23878, + 6.956508 + ], + [ + 158.238802, + 6.956553 + ], + [ + 158.238806, + 6.956611 + ], + [ + 158.238896, + 6.956746 + ], + [ + 158.238888, + 6.956844 + ], + [ + 158.238949, + 6.956838 + ], + [ + 158.239024, + 6.956873 + ], + [ + 158.23909, + 6.956939 + ], + [ + 158.239136, + 6.957053 + ], + [ + 158.23911, + 6.957101 + ], + [ + 158.239181, + 6.9573 + ], + [ + 158.239261, + 6.957423 + ], + [ + 158.239311, + 6.957427 + ], + [ + 158.239368, + 6.957475 + ], + [ + 158.239407, + 6.957534 + ], + [ + 158.239417, + 6.957613 + ], + [ + 158.23945, + 6.957685 + ], + [ + 158.239454, + 6.957744 + ], + [ + 158.239488, + 6.957743 + ], + [ + 158.239506, + 6.957775 + ], + [ + 158.239532, + 6.957828 + ], + [ + 158.239541, + 6.957874 + ], + [ + 158.239566, + 6.957929 + ], + [ + 158.23956, + 6.957988 + ], + [ + 158.239604, + 6.95808 + ], + [ + 158.239623, + 6.958233 + ], + [ + 158.239622, + 6.958346 + ], + [ + 158.239605, + 6.95838 + ], + [ + 158.239624, + 6.958411 + ], + [ + 158.239602, + 6.958542 + ], + [ + 158.239573, + 6.958626 + ], + [ + 158.239554, + 6.958702 + ], + [ + 158.239511, + 6.958776 + ], + [ + 158.239513, + 6.958839 + ], + [ + 158.239481, + 6.958898 + ], + [ + 158.239373, + 6.959027 + ], + [ + 158.239369, + 6.95909 + ], + [ + 158.23929, + 6.959202 + ], + [ + 158.239204, + 6.959336 + ], + [ + 158.239154, + 6.959446 + ], + [ + 158.239078, + 6.959498 + ], + [ + 158.239016, + 6.9595 + ], + [ + 158.239025, + 6.95955 + ], + [ + 158.239058, + 6.959578 + ], + [ + 158.239071, + 6.959683 + ], + [ + 158.238989, + 6.959792 + ], + [ + 158.238924, + 6.959892 + ], + [ + 158.238679, + 6.96004 + ], + [ + 158.238502, + 6.960108 + ], + [ + 158.238408, + 6.960126 + ], + [ + 158.238303, + 6.960166 + ], + [ + 158.238363, + 6.960323 + ], + [ + 158.238329, + 6.96072 + ], + [ + 158.238216, + 6.960878 + ], + [ + 158.238107, + 6.960872 + ], + [ + 158.238039, + 6.961523 + ], + [ + 158.237839, + 6.961777 + ], + [ + 158.237754, + 6.962148 + ], + [ + 158.237941, + 6.962677 + ], + [ + 158.237967, + 6.962795 + ], + [ + 158.237853, + 6.962992 + ], + [ + 158.237632, + 6.963268 + ], + [ + 158.236775, + 6.963552 + ], + [ + 158.236485, + 6.963742 + ], + [ + 158.23675, + 6.963959 + ], + [ + 158.236587, + 6.964346 + ], + [ + 158.236076, + 6.965035 + ], + [ + 158.235803, + 6.965135 + ], + [ + 158.235315, + 6.965524 + ], + [ + 158.235076, + 6.96591 + ], + [ + 158.23479, + 6.966164 + ], + [ + 158.234546, + 6.966748 + ], + [ + 158.234413, + 6.966656 + ], + [ + 158.234117, + 6.966861 + ], + [ + 158.233615, + 6.967013 + ], + [ + 158.23362, + 6.967157 + ], + [ + 158.233266, + 6.967444 + ], + [ + 158.233143, + 6.967495 + ], + [ + 158.232735, + 6.967766 + ], + [ + 158.232462, + 6.967888 + ], + [ + 158.232478, + 6.968268 + ], + [ + 158.232021, + 6.968598 + ], + [ + 158.231687, + 6.968534 + ], + [ + 158.231083, + 6.968596 + ], + [ + 158.230596, + 6.968795 + ], + [ + 158.230441, + 6.96873 + ], + [ + 158.230475, + 6.969009 + ], + [ + 158.230079, + 6.969487 + ], + [ + 158.22979, + 6.969584 + ], + [ + 158.229604, + 6.969691 + ], + [ + 158.229648, + 6.969944 + ], + [ + 158.229486, + 6.970177 + ], + [ + 158.229183, + 6.970435 + ], + [ + 158.228879, + 6.970571 + ], + [ + 158.228713, + 6.970819 + ], + [ + 158.228781, + 6.971043 + ], + [ + 158.228776, + 6.971232 + ], + [ + 158.228478, + 6.971694 + ], + [ + 158.228125, + 6.972205 + ], + [ + 158.227944, + 6.972423 + ], + [ + 158.227449, + 6.972647 + ], + [ + 158.22714, + 6.972637 + ], + [ + 158.227106, + 6.972842 + ], + [ + 158.22692, + 6.973056 + ], + [ + 158.226827, + 6.973303 + ], + [ + 158.226582, + 6.973415 + ], + [ + 158.226513, + 6.973556 + ], + [ + 158.226425, + 6.973833 + ], + [ + 158.226401, + 6.974004 + ], + [ + 158.226185, + 6.974247 + ], + [ + 158.225788, + 6.97465 + ], + [ + 158.225548, + 6.974825 + ], + [ + 158.225225, + 6.975253 + ], + [ + 158.225024, + 6.975545 + ], + [ + 158.22495041364024, + 6.9756172204876385 + ], + [ + 158.224593, + 6.9750952361482925 + ], + [ + 158.2225867134147, + 6.972165157214989 + ], + [ + 158.222941, + 6.97118 + ], + [ + 158.223265, + 6.970381 + ], + [ + 158.223282, + 6.970014 + ], + [ + 158.223124, + 6.969912 + ], + [ + 158.223128, + 6.969752 + ], + [ + 158.223295, + 6.969633 + ], + [ + 158.223307, + 6.969464 + ], + [ + 158.222716, + 6.968805 + ], + [ + 158.222135, + 6.968117 + ], + [ + 158.220804, + 6.967317 + ], + [ + 158.220469, + 6.966852 + ], + [ + 158.220211, + 6.966594 + ], + [ + 158.219544, + 6.966134 + ], + [ + 158.219467, + 6.965906 + ], + [ + 158.218905, + 6.965382 + ], + [ + 158.218918, + 6.965006 + ], + [ + 158.219786, + 6.963099 + ], + [ + 158.220374, + 6.962132 + ], + [ + 158.220727, + 6.96124 + ], + [ + 158.22123, + 6.960669 + ], + [ + 158.221871, + 6.960542 + ], + [ + 158.223018, + 6.960874 + ], + [ + 158.223286, + 6.960905 + ], + [ + 158.223441, + 6.960865 + ], + [ + 158.223533, + 6.960791 + ], + [ + 158.223605, + 6.960822 + ], + [ + 158.22374, + 6.960757 + ], + [ + 158.223809, + 6.960771 + ], + [ + 158.223867, + 6.960665 + ], + [ + 158.223942, + 6.96066 + ], + [ + 158.22397, + 6.960577 + ], + [ + 158.224065, + 6.960557 + ], + [ + 158.224116, + 6.960572 + ], + [ + 158.22418, + 6.960485 + ], + [ + 158.224227, + 6.960409 + ], + [ + 158.224177, + 6.960286 + ], + [ + 158.22414, + 6.960189 + ], + [ + 158.224174, + 6.960034 + ], + [ + 158.224252, + 6.959888 + ], + [ + 158.224195, + 6.959852 + ], + [ + 158.224248, + 6.959598 + ], + [ + 158.224244, + 6.959323 + ], + [ + 158.224302, + 6.959202 + ], + [ + 158.224364, + 6.959142 + ], + [ + 158.224359, + 6.959061 + ], + [ + 158.224309, + 6.959022 + ], + [ + 158.224304, + 6.958942 + ], + [ + 158.224353, + 6.958839 + ], + [ + 158.224435, + 6.958722 + ], + [ + 158.224319, + 6.95862 + ], + [ + 158.224351, + 6.9585 + ], + [ + 158.224374, + 6.958393 + ], + [ + 158.224418, + 6.958276 + ], + [ + 158.224479, + 6.958203 + ], + [ + 158.224563, + 6.958189 + ], + [ + 158.224593, + 6.958195 + ], + [ + 158.224658, + 6.958207 + ], + [ + 158.224839, + 6.958169 + ], + [ + 158.224927, + 6.958062 + ], + [ + 158.224943, + 6.957947 + ], + [ + 158.225024, + 6.957849 + ], + [ + 158.225192, + 6.957797 + ], + [ + 158.225272, + 6.957822 + ], + [ + 158.225359, + 6.957811 + ], + [ + 158.225451, + 6.957694 + ], + [ + 158.225508, + 6.957668 + ], + [ + 158.225518, + 6.957588 + ], + [ + 158.225583, + 6.957591 + ], + [ + 158.225602, + 6.957545 + ], + [ + 158.225516, + 6.957517 + ], + [ + 158.225502, + 6.957481 + ], + [ + 158.225506, + 6.95745 + ], + [ + 158.225586, + 6.957405 + ], + [ + 158.225628, + 6.957252 + ], + [ + 158.225696, + 6.957242 + ], + [ + 158.22572, + 6.957204 + ], + [ + 158.225785, + 6.957196 + ], + [ + 158.225825, + 6.957095 + ], + [ + 158.225962, + 6.956982 + ], + [ + 158.22614, + 6.956896 + ], + [ + 158.226263, + 6.956732 + ], + [ + 158.22632, + 6.956592 + ], + [ + 158.226186, + 6.956518 + ], + [ + 158.226145, + 6.956449 + ], + [ + 158.226234, + 6.956354 + ], + [ + 158.226279, + 6.956205 + ], + [ + 158.226549, + 6.955906 + ], + [ + 158.226782, + 6.955319 + ], + [ + 158.22683, + 6.955198 + ], + [ + 158.227275, + 6.954473 + ], + [ + 158.227362, + 6.95435 + ], + [ + 158.22823, + 6.95346 + ], + [ + 158.229158, + 6.952821 + ], + [ + 158.229675, + 6.952607 + ], + [ + 158.229999, + 6.952577 + ], + [ + 158.23013, + 6.95236 + ], + [ + 158.230317, + 6.952377 + ], + [ + 158.230411, + 6.952215 + ], + [ + 158.230574, + 6.952098 + ], + [ + 158.230692, + 6.952159 + ], + [ + 158.230903, + 6.952126 + ], + [ + 158.23104, + 6.95191 + ], + [ + 158.231307, + 6.951719 + ], + [ + 158.231579, + 6.951535 + ], + [ + 158.231578, + 6.951479 + ], + [ + 158.231397, + 6.951476 + ], + [ + 158.231243, + 6.95148 + ], + [ + 158.230928, + 6.951364 + ], + [ + 158.230678, + 6.951087 + ], + [ + 158.230478, + 6.950722 + ], + [ + 158.230268, + 6.950476 + ], + [ + 158.230112, + 6.950321 + ], + [ + 158.229993, + 6.95015 + ], + [ + 158.229917, + 6.949987 + ], + [ + 158.229848, + 6.949687 + ], + [ + 158.229882, + 6.949205 + ], + [ + 158.229862, + 6.948354 + ], + [ + 158.229774, + 6.947914 + ], + [ + 158.229768, + 6.947422 + ], + [ + 158.229763, + 6.947188 + ], + [ + 158.229695, + 6.946969 + ], + [ + 158.229671, + 6.946588 + ], + [ + 158.229675, + 6.94625 + ], + [ + 158.229587, + 6.945812 + ], + [ + 158.229504, + 6.945715 + ], + [ + 158.229403, + 6.945559 + ], + [ + 158.229413, + 6.94543 + ], + [ + 158.229379, + 6.94532 + ], + [ + 158.229219, + 6.945057 + ], + [ + 158.229246, + 6.944919 + ], + [ + 158.229226, + 6.944878 + ], + [ + 158.229204, + 6.944858 + ], + [ + 158.229174, + 6.944869 + ], + [ + 158.229156, + 6.944885 + ], + [ + 158.22911, + 6.944877 + ], + [ + 158.229038, + 6.94483 + ], + [ + 158.229015, + 6.944784 + ], + [ + 158.229004, + 6.944723 + ], + [ + 158.228927, + 6.944623 + ], + [ + 158.228863, + 6.944482 + ], + [ + 158.228907, + 6.94437 + ], + [ + 158.228821, + 6.944348 + ], + [ + 158.228743, + 6.944162 + ], + [ + 158.228623, + 6.943919 + ], + [ + 158.228593, + 6.943682 + ], + [ + 158.228456, + 6.943585 + ], + [ + 158.228348, + 6.943436 + ], + [ + 158.22825, + 6.943275 + ], + [ + 158.228245, + 6.94321 + ], + [ + 158.228304, + 6.943181 + ], + [ + 158.228223, + 6.943045 + ], + [ + 158.228083, + 6.942912 + ], + [ + 158.228052, + 6.942807 + ], + [ + 158.227841, + 6.942661 + ], + [ + 158.227666, + 6.942512 + ], + [ + 158.227498, + 6.942384 + ], + [ + 158.227239, + 6.942515 + ], + [ + 158.226866, + 6.942648 + ], + [ + 158.226558, + 6.942719 + ], + [ + 158.226156, + 6.942632 + ], + [ + 158.226014, + 6.942491 + ], + [ + 158.225906, + 6.942282 + ], + [ + 158.225838, + 6.941752 + ], + [ + 158.22571, + 6.94161 + ], + [ + 158.225696, + 6.941319 + ], + [ + 158.225613, + 6.941249 + ], + [ + 158.225626, + 6.941071 + ], + [ + 158.225644, + 6.940645 + ], + [ + 158.225632, + 6.940302 + ], + [ + 158.225423, + 6.939757 + ], + [ + 158.22521, + 6.939744 + ], + [ + 158.225337, + 6.940161 + ], + [ + 158.22551, + 6.940725 + ], + [ + 158.225522, + 6.940932 + ], + [ + 158.22553, + 6.941259 + ], + [ + 158.225583, + 6.941537 + ], + [ + 158.225558, + 6.941693 + ], + [ + 158.22552, + 6.94197 + ], + [ + 158.225593, + 6.942248 + ], + [ + 158.225696, + 6.942445 + ], + [ + 158.225999, + 6.94271 + ], + [ + 158.226293, + 6.942831 + ], + [ + 158.226478, + 6.943004 + ], + [ + 158.22669, + 6.942943 + ], + [ + 158.227053, + 6.942724 + ], + [ + 158.227479, + 6.942795 + ], + [ + 158.227624, + 6.942778 + ], + [ + 158.227748, + 6.942902 + ], + [ + 158.227665, + 6.943094 + ], + [ + 158.227542, + 6.943197 + ], + [ + 158.227391, + 6.94324 + ], + [ + 158.227145, + 6.943302 + ], + [ + 158.226915, + 6.9434 + ], + [ + 158.226656, + 6.943599 + ], + [ + 158.226612, + 6.943746 + ], + [ + 158.226552, + 6.943981 + ], + [ + 158.226686, + 6.944004 + ], + [ + 158.226781, + 6.943907 + ], + [ + 158.226864, + 6.944006 + ], + [ + 158.226973, + 6.944024 + ], + [ + 158.226821, + 6.944492 + ], + [ + 158.226922, + 6.944492 + ], + [ + 158.22699, + 6.944584 + ], + [ + 158.227068, + 6.944564 + ], + [ + 158.227126, + 6.94455 + ], + [ + 158.227089, + 6.944362 + ], + [ + 158.227123, + 6.944206 + ], + [ + 158.227258, + 6.944155 + ], + [ + 158.227435, + 6.944153 + ], + [ + 158.227464, + 6.944071 + ], + [ + 158.227653, + 6.94398 + ], + [ + 158.2278, + 6.94394 + ], + [ + 158.227998, + 6.943978 + ], + [ + 158.228196, + 6.944006 + ], + [ + 158.228304, + 6.944108 + ], + [ + 158.228419, + 6.944302 + ], + [ + 158.22848, + 6.944433 + ], + [ + 158.228476, + 6.94457 + ], + [ + 158.228395, + 6.944769 + ], + [ + 158.228313, + 6.944833 + ], + [ + 158.228226, + 6.944949 + ], + [ + 158.228027, + 6.944927 + ], + [ + 158.227926, + 6.944903 + ], + [ + 158.227771, + 6.94496 + ], + [ + 158.227775, + 6.945029 + ], + [ + 158.228066, + 6.945053 + ], + [ + 158.228176, + 6.945131 + ], + [ + 158.228291, + 6.945354 + ], + [ + 158.228322, + 6.945491 + ], + [ + 158.22835, + 6.945649 + ], + [ + 158.228274, + 6.945815 + ], + [ + 158.228188, + 6.945893 + ], + [ + 158.22819, + 6.945953 + ], + [ + 158.228112, + 6.946034 + ], + [ + 158.228009, + 6.946129 + ], + [ + 158.227957, + 6.946349 + ], + [ + 158.227873, + 6.946398 + ], + [ + 158.227802, + 6.946473 + ], + [ + 158.227705, + 6.946517 + ], + [ + 158.227665, + 6.946566 + ], + [ + 158.227552, + 6.946583 + ], + [ + 158.227458, + 6.946519 + ], + [ + 158.227455, + 6.9464 + ], + [ + 158.227408, + 6.946364 + ], + [ + 158.227364, + 6.946422 + ], + [ + 158.22738, + 6.946498 + ], + [ + 158.227318, + 6.946524 + ], + [ + 158.227302, + 6.946641 + ], + [ + 158.227253, + 6.946772 + ], + [ + 158.22713, + 6.946848 + ], + [ + 158.227028, + 6.946882 + ], + [ + 158.226828, + 6.946925 + ], + [ + 158.226855, + 6.946993 + ], + [ + 158.227268, + 6.947243 + ], + [ + 158.227421, + 6.947243 + ], + [ + 158.22769, + 6.947382 + ], + [ + 158.227882, + 6.947555 + ], + [ + 158.228088, + 6.947764 + ], + [ + 158.228079, + 6.947847 + ], + [ + 158.22828, + 6.94794 + ], + [ + 158.228255, + 6.948013 + ], + [ + 158.228359, + 6.948008 + ], + [ + 158.228457, + 6.948164 + ], + [ + 158.228354, + 6.948218 + ], + [ + 158.228589, + 6.94852 + ], + [ + 158.228754, + 6.948731 + ], + [ + 158.228771, + 6.949027 + ], + [ + 158.228776, + 6.949275 + ], + [ + 158.228813, + 6.94952 + ], + [ + 158.228805, + 6.949763 + ], + [ + 158.228881, + 6.949835 + ], + [ + 158.228835, + 6.949968 + ], + [ + 158.228884, + 6.950162 + ], + [ + 158.22886, + 6.95027 + ], + [ + 158.228928, + 6.950426 + ], + [ + 158.228958, + 6.950587 + ], + [ + 158.228904, + 6.950923 + ], + [ + 158.228786, + 6.951308 + ], + [ + 158.228659, + 6.95153 + ], + [ + 158.228466, + 6.951802 + ], + [ + 158.228281, + 6.951973 + ], + [ + 158.22825, + 6.952068 + ], + [ + 158.227842, + 6.952254 + ], + [ + 158.227699, + 6.952393 + ], + [ + 158.227595, + 6.952516 + ], + [ + 158.22745, + 6.952722 + ], + [ + 158.227194, + 6.953107 + ], + [ + 158.226808, + 6.953358 + ], + [ + 158.226616, + 6.953444 + ], + [ + 158.226416, + 6.953474 + ], + [ + 158.226265, + 6.95342 + ], + [ + 158.226064, + 6.953233 + ], + [ + 158.225867, + 6.953284 + ], + [ + 158.225756, + 6.953344 + ], + [ + 158.225784, + 6.953452 + ], + [ + 158.226758, + 6.953962 + ], + [ + 158.226719, + 6.954035 + ], + [ + 158.226684, + 6.9541 + ], + [ + 158.225662, + 6.95358 + ], + [ + 158.225484, + 6.95362 + ], + [ + 158.225138, + 6.953642 + ], + [ + 158.224908, + 6.954114 + ], + [ + 158.224705, + 6.954576 + ], + [ + 158.224593, + 6.954682 + ], + [ + 158.22398, + 6.955268 + ], + [ + 158.223597, + 6.955644 + ], + [ + 158.223324, + 6.95597 + ], + [ + 158.222938, + 6.95638 + ], + [ + 158.222739, + 6.956928 + ], + [ + 158.222094, + 6.95695 + ], + [ + 158.221821, + 6.957284 + ], + [ + 158.220959, + 6.958091 + ], + [ + 158.220093, + 6.958163 + ], + [ + 158.219705, + 6.9581 + ], + [ + 158.219296, + 6.957668 + ], + [ + 158.21905, + 6.957292 + ], + [ + 158.219016, + 6.956849 + ], + [ + 158.218747, + 6.956181 + ], + [ + 158.217432, + 6.955057 + ], + [ + 158.217368, + 6.955078 + ], + [ + 158.217295, + 6.955103 + ], + [ + 158.218556, + 6.956396 + ], + [ + 158.218807, + 6.956916 + ], + [ + 158.21885, + 6.957559 + ], + [ + 158.219156, + 6.958028 + ], + [ + 158.219245, + 6.958446 + ], + [ + 158.2183, + 6.959625 + ], + [ + 158.218177, + 6.960378 + ], + [ + 158.218028, + 6.960682 + ], + [ + 158.218053, + 6.961088 + ], + [ + 158.217539, + 6.961911 + ], + [ + 158.217342, + 6.962132 + ], + [ + 158.217125, + 6.962195 + ], + [ + 158.217061, + 6.962525 + ], + [ + 158.217172, + 6.96263 + ], + [ + 158.216989, + 6.963298 + ], + [ + 158.21681, + 6.963247 + ], + [ + 158.216623, + 6.962842 + ], + [ + 158.216563, + 6.962466 + ], + [ + 158.216627, + 6.961827 + ], + [ + 158.21664, + 6.961434 + ], + [ + 158.216393, + 6.961198 + ], + [ + 158.216291, + 6.961193 + ], + [ + 158.216486, + 6.961413 + ], + [ + 158.216529, + 6.961466 + ], + [ + 158.21655, + 6.961586 + ], + [ + 158.216461, + 6.962085 + ], + [ + 158.216406, + 6.962542 + ], + [ + 158.216456, + 6.962742 + ], + [ + 158.216503, + 6.962796 + ], + [ + 158.21654, + 6.963031 + ], + [ + 158.216691, + 6.963421 + ], + [ + 158.21681, + 6.963543 + ], + [ + 158.216828, + 6.963633 + ], + [ + 158.216777, + 6.963667 + ], + [ + 158.21676439406593, + 6.963661957626368 + ], + [ + 158.19962996470764, + 6.938638 + ], + [ + 158.19293548174312, + 6.928861050063027 ] ] ] diff --git a/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToOceanEez.json b/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToOceanEez.json index 22ef4e808e..6554c1af2f 100644 --- a/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToOceanEez.json +++ b/packages/template-ocean-eez/examples/output/fsm-land-to-int/clipToOceanEez.json @@ -642,132 +642,408 @@ 6.954760233644836 ], [ - 166.98012722916735, - 19.178380367966966 + 159.39457010631185, + 8.57078874744658 ], [ - 166.68945365646283, - 19.33759123476956 + 163.80429098321187, + 14.737312506354083 ], [ - 166.6536142445636, - 19.285249606929664 + 163.802738, + 14.736587 ], [ - 166.653643, - 19.282506 + 163.802175, + 14.736323 ], [ - 166.654079, - 19.278249 + 163.801049, + 14.735796 ], [ - 166.654497, - 19.276796 + 163.800486, + 14.735532 ], [ - 166.654793, - 19.275948 + 163.795982, + 14.733417 ], [ - 166.655259, - 19.274481 + 163.795419, + 14.733153 ], [ - 166.655694, - 19.273564 + 163.794294, + 14.732623 ], [ - 166.656201, - 19.272495 + 163.793732, + 14.732358 ], [ - 166.656781, - 19.27073 + 163.791483, + 14.731297 ], [ - 166.657351, - 19.270462 + 163.790921, + 14.731032 ], [ - 166.657381, - 19.270318 + 163.789797, + 14.730501 ], [ - 166.657293, - 19.270188 + 163.789236, + 14.730235 ], [ - 166.657096, - 19.270109 + 163.778985, + 14.725376 ], [ - 166.656305, - 19.270044 + 163.778345, + 14.725073 ], [ - 166.65615, - 19.269982 + 163.777066, + 14.724465 ], [ - 166.655906, - 19.269988 + 163.776427, + 14.724161 ], [ - 166.655679, - 19.270046 + 163.773868, + 14.722941 ], [ - 166.654865, - 19.270478 + 163.773228, + 14.722636 ], [ - 166.653663, - 19.271207 + 163.77195, + 14.722025 ], [ - 166.653376, - 19.271344 + 163.771311, + 14.72172 ], [ - 166.652958, - 19.271483 + 163.766288, + 14.719314 ], [ - 166.652459, - 19.271602 + 163.765526, + 14.718948 ], [ - 166.652043, - 19.271752 + 163.764002, + 14.718216 ], [ - 166.651461, - 19.271987 + 163.763241, + 14.717849 ], [ - 166.650278, - 19.272658 + 163.760262, + 14.716224 ], [ - 166.649777, - 19.272845 + 163.759491, + 14.71588 ], [ - 166.649195, - 19.273142 + 163.75796, + 14.715165 ], [ - 166.647977, - 19.273694 + 163.757152, + 14.7148 ], [ - 166.647317, - 19.274002 + 163.756495, + 14.714461 ], [ - 166.64616099837153, - 19.27436452211069 + 163.756138, + 14.714296 + ], + [ + 163.755104, + 14.7138 + ], + [ + 163.750001, + 14.711345 + ], + [ + 163.749313, + 14.711013 + ], + [ + 163.747946, + 14.710355 + ], + [ + 163.747263, + 14.710026 + ], + [ + 163.74453, + 14.708707 + ], + [ + 163.743847, + 14.708377 + ], + [ + 163.742481, + 14.707717 + ], + [ + 163.741798, + 14.707387 + ], + [ + 163.739905, + 14.706471 + ], + [ + 163.739345, + 14.7062 + ], + [ + 163.738227, + 14.705658 + ], + [ + 163.737669, + 14.705383 + ], + [ + 163.735447, + 14.704267 + ], + [ + 163.734892, + 14.703988 + ], + [ + 163.733781, + 14.70343 + ], + [ + 163.733226, + 14.703151 + ], + [ + 163.728783, + 14.700915 + ], + [ + 163.728229, + 14.700635 + ], + [ + 163.727119, + 14.700076 + ], + [ + 163.726564, + 14.699796 + ], + [ + 163.724491, + 14.698729 + ], + [ + 163.723657, + 14.699113 + ], + [ + 163.720524, + 14.700615 + ], + [ + 163.718646, + 14.701512 + ], + [ + 163.714887, + 14.703301 + ], + [ + 163.713007, + 14.704192 + ], + [ + 163.705477, + 14.707747 + ], + [ + 163.703594, + 14.708633 + ], + [ + 163.699824, + 14.710399 + ], + [ + 163.697937, + 14.711279 + ], + [ + 163.693898, + 14.713157 + ], + [ + 163.692632, + 14.713744 + ], + [ + 163.690731, + 14.714625 + ], + [ + 163.683691, + 14.717837 + ], + [ + 163.678691, + 14.720087 + ], + [ + 163.671751, + 14.723273 + ], + [ + 163.670836, + 14.723692 + ], + [ + 163.669005, + 14.724529 + ], + [ + 163.66809, + 14.724946 + ], + [ + 163.661823, + 14.727801 + ], + [ + 163.659969, + 14.728641 + ], + [ + 163.656259, + 14.730318 + ], + [ + 163.654403, + 14.731153 + ], + [ + 163.653302, + 14.731647 + ], + [ + 163.652377, + 14.732061 + ], + [ + 163.650528, + 14.732887 + ], + [ + 163.649603, + 14.733299 + ], + [ + 163.646913, + 14.734495 + ], + [ + 163.64621, + 14.734808 + ], + [ + 163.644802, + 14.735432 + ], + [ + 163.644099, + 14.735743 + ], + [ + 163.643592, + 14.735967 + ], + [ + 163.642167, + 14.736596 + ], + [ + 163.639315, + 14.737849 + ], + [ + 163.638785, + 14.738081 + ], + [ + 163.636363, + 14.739181 + ], + [ + 163.622969, + 14.745178 + ], + [ + 163.616256, + 14.748141 + ], + [ + 163.602057, + 14.754319 + ], + [ + 163.598504, + 14.755853 + ], + [ + 163.591387, + 14.758901 + ], + [ + 163.587825, + 14.760416 + ], + [ + 163.574048, + 14.766227 + ], + [ + 163.572326, + 14.76695 + ], + [ + 163.568879, + 14.768393 + ], + [ + 163.567154, + 14.769112 + ], + [ + 163.5626119255257, + 14.770998829315223 + ], + [ + 159.34680775999365, + 8.614032490174239 ], [ 158.22495041364024, diff --git a/packages/template-ocean-eez/examples/output/samoa-east-west-coll/blankFunction.json b/packages/template-ocean-eez/examples/output/samoa-east-west-coll/blankFunction.json new file mode 100644 index 0000000000..9f898a862b --- /dev/null +++ b/packages/template-ocean-eez/examples/output/samoa-east-west-coll/blankFunction.json @@ -0,0 +1,3 @@ +{ + "metrics": [] +} \ No newline at end of file diff --git a/packages/template-ocean-eez/examples/output/samoa-east-west-coll/boundaryAreaOverlap.json b/packages/template-ocean-eez/examples/output/samoa-east-west-coll/boundaryAreaOverlap.json index 28fdcaf632..73d1aa7787 100644 --- a/packages/template-ocean-eez/examples/output/samoa-east-west-coll/boundaryAreaOverlap.json +++ b/packages/template-ocean-eez/examples/output/samoa-east-west-coll/boundaryAreaOverlap.json @@ -34,73 +34,5 @@ "sketchName": "east-west-overlap" } } - ], - "sketch": { - "type": "FeatureCollection", - "properties": { - "id": "653ffbadddf3924f37da4f3a", - "name": "samoa-east-west-coll", - "updatedAt": "2023-10-30T18:57:57.203Z", - "createdAt": "2023-10-30T18:53:33.401Z", - "sketchClassId": "609d8723c33f915a397225d3", - "isCollection": true, - "userAttributes": [] - }, - "features": [ - { - "type": "Feature", - "properties": { - "id": "653ffb93ddf3924f37da4f39", - "name": "samoa-east-west-sketch", - "updatedAt": "2023-10-30T18:55:05.437Z", - "createdAt": "2023-10-30T18:53:07.522Z", - "sketchClassId": "609d871ec33f915a397225cb", - "isCollection": false, - "userAttributes": [ - { - "label": "Notes", - "fieldType": "TextArea", - "exportId": "NOTES", - "value": "" - } - ] - }, - "id": "1", - "bbox": [ - -174.46084275741336, - -13.581531056748378, - -170.8125460750056, - -13.30975871309944 - ], - "geometry": null - }, - { - "type": "Feature", - "properties": { - "id": "653ffc8eddf3924f37da4f43", - "name": "east-west-overlap", - "updatedAt": "2023-10-30T18:57:57.206Z", - "createdAt": "2023-10-30T18:57:18.069Z", - "sketchClassId": "609d871ec33f915a397225cb", - "isCollection": false, - "userAttributes": [ - { - "label": "Notes", - "fieldType": "TextArea", - "exportId": "NOTES", - "value": "" - } - ] - }, - "id": "2", - "bbox": [ - -174.20780746416608, - -13.455436820597226, - -172.60851200820449, - -13.336730055966433 - ], - "geometry": null - } - ] - } + ] } \ No newline at end of file diff --git a/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/blankFunction.json b/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/blankFunction.json new file mode 100644 index 0000000000..9f898a862b --- /dev/null +++ b/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/blankFunction.json @@ -0,0 +1,3 @@ +{ + "metrics": [] +} \ No newline at end of file diff --git a/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/boundaryAreaOverlap.json b/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/boundaryAreaOverlap.json index fad6d1f6fb..bcf0336b1f 100644 --- a/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/boundaryAreaOverlap.json +++ b/packages/template-ocean-eez/examples/output/samoa-north-south-sketch/boundaryAreaOverlap.json @@ -11,32 +11,5 @@ "sketchName": "samoa-north-south-sketch" } } - ], - "sketch": { - "type": "Feature", - "properties": { - "id": "653ffbf7ddf3924f37da4f3c", - "name": "samoa-north-south-sketch", - "updatedAt": "2023-10-30T18:54:47.189Z", - "createdAt": "2023-10-30T18:54:47.189Z", - "sketchClassId": "609d871ec33f915a397225cb", - "isCollection": false, - "userAttributes": [ - { - "label": "Notes", - "fieldType": "TextArea", - "exportId": "NOTES", - "value": "" - } - ] - }, - "id": "1", - "bbox": [ - -172.2969765148304, - -15.548920319504546, - -172.1681106784462, - -13.886258102223346 - ], - "geometry": null - } + ] } \ No newline at end of file diff --git a/packages/template-blank-project/src/components/BlankCard.example-stories.ts b/packages/template-ocean-eez/src/components/BlankCard.example-stories.ts similarity index 100% rename from packages/template-blank-project/src/components/BlankCard.example-stories.ts rename to packages/template-ocean-eez/src/components/BlankCard.example-stories.ts diff --git a/packages/template-blank-project/src/components/BlankCard.tsx b/packages/template-ocean-eez/src/components/BlankCard.tsx similarity index 61% rename from packages/template-blank-project/src/components/BlankCard.tsx rename to packages/template-ocean-eez/src/components/BlankCard.tsx index 96fe2cb560..629fb98c37 100644 --- a/packages/template-blank-project/src/components/BlankCard.tsx +++ b/packages/template-ocean-eez/src/components/BlankCard.tsx @@ -21,20 +21,16 @@ export const BlankCard: React.FunctionComponent = (props) => { return ( {(data: ReportResult) => { + const sketchStr = isCollection ? t("sketch collection") : t("sketch"); + const dataStr = JSON.stringify(data); + return (

- {isCollection ? ( - - This is a blank sketch collection report for geography{" "} - {curGeography.display} with result {JSON.stringify(data)}. - - ) : ( - - This is a blank sketch report for geography{" "} - {curGeography.display} with result {JSON.stringify(data)}. - - )} + + This is a blank {sketchStr} for geography {curGeography.display}{" "} + with result {dataStr}. +

); diff --git a/packages/template-ocean-eez/src/components/OverlapCard.tsx b/packages/template-ocean-eez/src/components/OverlapCard.tsx index d9f0ff95ad..fe6b620f12 100644 --- a/packages/template-ocean-eez/src/components/OverlapCard.tsx +++ b/packages/template-ocean-eez/src/components/OverlapCard.tsx @@ -13,9 +13,9 @@ import { Metric, MetricGroup, ReportResult, + SketchProperties, flattenBySketchAllClass, metricsWithSketchId, - toNullSketchArray, toPercentMetric, } from "@seasketch/geoprocessing/client-core"; import project from "../../project/projectClient.js"; @@ -28,7 +28,7 @@ import project from "../../project/projectClient.js"; */ export const OverlapCard: React.FunctionComponent = (props) => { const { t } = useTranslation(); - const [{ isCollection }] = useSketchProperties(); + const [{ isCollection, id, childProperties }] = useSketchProperties(); const curGeography = project.getGeographyById(props.geographyId, { fallbackGroup: "default-boundary", }); @@ -59,7 +59,7 @@ export const OverlapCard: React.FunctionComponent = (props) => { const valueMetrics = metricsWithSketchId( data.metrics.filter((m) => m.metricId === metricGroup.metricId), - [data.sketch.properties.id], + [id], ); const percentMetrics = toPercentMetric(valueMetrics, precalcMetrics, { metricIdOverride: percMetricIdName, @@ -79,8 +79,7 @@ export const OverlapCard: React.FunctionComponent = (props) => {

- This report summarizes this plan's overlap with OverlapCard - data. + This report summarizes this plan's overlap with the data.

@@ -123,9 +122,14 @@ export const OverlapCard: React.FunctionComponent = (props) => { ]} /> - {isCollection && ( + {isCollection && childProperties && ( - {genSketchTable(data, metricGroup, precalcMetrics)} + {genSketchTable( + data, + metricGroup, + precalcMetrics, + childProperties, + )} )} @@ -154,10 +158,12 @@ const genSketchTable = ( data: ReportResult, metricGroup: MetricGroup, precalcMetrics: Metric[], + childProperties: SketchProperties[], ) => { + const childSketchIds = childProperties + ? childProperties.map((skp) => skp.id) + : []; // Build agg metric objects for each child sketch in collection with percValue for each class - const childSketches = toNullSketchArray(data.sketch); - const childSketchIds = childSketches.map((sk) => sk.properties.id); const childSketchMetrics = toPercentMetric( metricsWithSketchId( data.metrics.filter((m) => m.metricId === metricGroup.metricId), @@ -168,7 +174,7 @@ const genSketchTable = ( const sketchRows = flattenBySketchAllClass( childSketchMetrics, metricGroup.classes, - childSketches, + childProperties, ); return ( diff --git a/packages/template-ocean-eez/src/components/RepresentationPage.tsx b/packages/template-ocean-eez/src/components/RepresentationPage.tsx index cb8e49ac74..2226c9873c 100644 --- a/packages/template-ocean-eez/src/components/RepresentationPage.tsx +++ b/packages/template-ocean-eez/src/components/RepresentationPage.tsx @@ -1,7 +1,7 @@ import React from "react"; -const ReportPage = () => { +const RepresentationPage = () => { return <>; }; -export default ReportPage; +export default RepresentationPage; diff --git a/packages/template-ocean-eez/src/components/SizeCard.tsx b/packages/template-ocean-eez/src/components/SizeCard.tsx index 713f559517..1f24e686e6 100644 --- a/packages/template-ocean-eez/src/components/SizeCard.tsx +++ b/packages/template-ocean-eez/src/components/SizeCard.tsx @@ -3,13 +3,13 @@ import { ReportResult, percentWithEdge, keyBy, - toNullSketchArray, nestMetrics, valueFormatter, toPercentMetric, sortMetricsDisplayOrder, MetricGroup, GeogProp, + SketchProperties, } from "@seasketch/geoprocessing/client-core"; import { ClassTable, @@ -70,7 +70,8 @@ const TableStyled = styled(ReportTableStyled)` `; export const SizeCard: React.FunctionComponent = (props) => { - const [{ isCollection }] = useSketchProperties(); + const [{ isCollection, id: sketchId, childProperties }] = + useSketchProperties(); const { t } = useTranslation(); const curGeography = project.getGeographyById(props.geographyId, { @@ -121,10 +122,22 @@ export const SizeCard: React.FunctionComponent = (props) => { targets for each boundary.

- {genSingleSizeTable(data, precalcMetrics, metricGroup, t)} - {isCollection && ( + {genSingleSizeTable( + sketchId, + data, + precalcMetrics, + metricGroup, + t, + )} + {isCollection && childProperties && ( - {genNetworkSizeTable(data, precalcMetrics, metricGroup, t)} + {genNetworkSizeTable( + data, + precalcMetrics, + metricGroup, + childProperties, + t, + )} )} @@ -161,6 +174,7 @@ export const SizeCard: React.FunctionComponent = (props) => { }; const genSingleSizeTable = ( + sketchId: string, data: ReportResult, precalcMetrics: Metric[], mg: MetricGroup, @@ -171,9 +185,7 @@ const genSingleSizeTable = ( const mapLabel = t("Map"); const sqKmLabel = t("km²"); - const singleMetrics = data.metrics.filter( - (m) => m.sketchId === data.sketch.properties.id, - ); + const singleMetrics = data.metrics.filter((m) => m.sketchId === sketchId); const finalMetrics = sortMetricsDisplayOrder( [ @@ -206,7 +218,8 @@ const genSingleSizeTable = ( Number.format( Math.round( squareMeterToKilometer( - typeof val === "string" ? Number.parseInt(val) : val, + // eslint-disable-next-line unicorn/prefer-number-properties + typeof val === "string" ? parseInt(val) : val, ), ), ), @@ -253,11 +266,13 @@ const genNetworkSizeTable = ( data: ReportResult, precalcMetrics: Metric[], mg: MetricGroup, + childProperties: SketchProperties[], t: TFunction, ) => { - const sketches = toNullSketchArray(data.sketch); - const sketchesById = keyBy(sketches, (sk) => sk.properties.id); - const sketchIds = new Set(sketches.map((sk) => sk.properties.id)); + const sketchIds = new Set( + childProperties ? childProperties.map((skp) => skp.id) : [], + ); + const sketchPropertiesById = keyBy(childProperties, (skp) => skp.id); const sketchMetrics = data.metrics.filter( (m) => m.sketchId && sketchIds.has(m.sketchId), ); @@ -318,7 +333,7 @@ const genNetworkSizeTable = ( const columns: Column[] = [ { Header: " ", - accessor: (row) => {sketchesById[row.sketchId].properties.name}, + accessor: (row) => {sketchPropertiesById[row.sketchId].name}, }, ...(classColumns as Column[]), ]; diff --git a/packages/template-ocean-eez/src/components/ViabilityPage.tsx b/packages/template-ocean-eez/src/components/ViabilityPage.tsx index 0161e87684..5c201d7dc5 100644 --- a/packages/template-ocean-eez/src/components/ViabilityPage.tsx +++ b/packages/template-ocean-eez/src/components/ViabilityPage.tsx @@ -2,7 +2,7 @@ import React from "react"; import { SizeCard } from "./SizeCard.js"; import { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui"; -const ReportPage = () => { +const ViabilityPage = () => { return ( <> @@ -11,4 +11,4 @@ const ReportPage = () => { ); }; -export default ReportPage; +export default ViabilityPage; diff --git a/packages/template-blank-project/src/functions/blankFunction.ts b/packages/template-ocean-eez/src/functions/blankFunction.ts similarity index 53% rename from packages/template-blank-project/src/functions/blankFunction.ts rename to packages/template-ocean-eez/src/functions/blankFunction.ts index 3eeedd79ce..d1f07c62f5 100644 --- a/packages/template-blank-project/src/functions/blankFunction.ts +++ b/packages/template-ocean-eez/src/functions/blankFunction.ts @@ -4,49 +4,44 @@ import { Polygon, MultiPolygon, GeoprocessingHandler, - getFirstFromParam, + Metric, DefaultExtraParams, - splitSketchAntimeridian, + getFirstFromParam, } from "@seasketch/geoprocessing"; -import project from "../../project/projectClient.js"; import { ReportResult, rekeyMetrics, sortMetrics, - toNullSketch, } from "@seasketch/geoprocessing/client-core"; +import project from "../../project/projectClient.js"; import { clipToGeography } from "../util/clipToGeography.js"; +import { bbox } from "@turf/turf"; +/** + * blankFunction for use with create:report command + */ export async function blankFunction( sketch: | Sketch | SketchCollection, extraParams: DefaultExtraParams = {}, ): Promise { - // Use caller-provided geographyId if provided + // Check for client-provided geography, fallback to first geography assigned as default-boundary in metrics.json const geographyId = getFirstFromParam("geographyIds", extraParams); - - // Get geography features, falling back to geography assigned to default-boundary group const curGeography = project.getGeographyById(geographyId, { fallbackGroup: "default-boundary", }); + // Clip portion of sketch outside geography features + const clippedSketch = await clipToGeography(sketch, curGeography); + const sketchBox = clippedSketch.bbox || bbox(clippedSketch); - // Support sketches crossing antimeridian - const splitSketch = splitSketchAntimeridian(sketch); - - // Clip to portion of sketch within current geography - const clippedSketch = await clipToGeography(splitSketch, curGeography); - - // Get bounding box of sketch remainder - // const sketchBox = clippedSketch.bbox || bbox(clippedSketch); + // Fetch data and run analysis. Or if it's time consuming, start a worker to do it in a separate process - // Add functionality here to return in (most common) Metric[] format - // Or create new type to return to component + // Return ReportResult with Metric[] or create your own return type + const metrics: Metric[] = []; - // Return a report result with metrics and a null sketch return { - metrics: sortMetrics(rekeyMetrics([])), - sketch: toNullSketch(clippedSketch, true), + metrics: sortMetrics(rekeyMetrics(metrics)), // sort and rekey for consistent ordering of output }; } @@ -56,6 +51,4 @@ export default new GeoprocessingHandler(blankFunction, { timeout: 60, // seconds memory: 1024, // megabytes executionMode: "async", - // Specify any Sketch Class form attributes that are required - requiresProperties: [], }); diff --git a/packages/template-blank-project/src/functions/blankFunctionSmoke.test.ts b/packages/template-ocean-eez/src/functions/blankFunctionSmoke.test.ts similarity index 100% rename from packages/template-blank-project/src/functions/blankFunctionSmoke.test.ts rename to packages/template-ocean-eez/src/functions/blankFunctionSmoke.test.ts diff --git a/packages/template-ocean-eez/src/functions/boundaryAreaOverlap.ts b/packages/template-ocean-eez/src/functions/boundaryAreaOverlap.ts index 9cdaa3f4b9..722bc2eb43 100644 --- a/packages/template-ocean-eez/src/functions/boundaryAreaOverlap.ts +++ b/packages/template-ocean-eez/src/functions/boundaryAreaOverlap.ts @@ -6,7 +6,6 @@ import { Polygon, ReportResult, SketchCollection, - toNullSketch, overlapFeatures, rekeyMetrics, sortMetrics, @@ -15,8 +14,8 @@ import { DefaultExtraParams, splitSketchAntimeridian, isVectorDatasource, + getFeatures, } from "@seasketch/geoprocessing"; -import { getFeatures } from "@seasketch/geoprocessing/dataproviders"; import { bbox } from "@turf/turf"; import project from "../../project/projectClient.js"; import { clipToGeography } from "../util/clipToGeography.js"; @@ -96,7 +95,6 @@ export async function boundaryAreaOverlap( return { metrics: sortMetrics(rekeyMetrics(metrics)), - sketch: toNullSketch(sketch, true), }; } diff --git a/packages/template-ocean-eez/src/functions/boundaryAreaOverlapSmoke.test.ts b/packages/template-ocean-eez/src/functions/boundaryAreaOverlapSmoke.test.ts index 43a886ef89..ce1f978ddb 100644 --- a/packages/template-ocean-eez/src/functions/boundaryAreaOverlapSmoke.test.ts +++ b/packages/template-ocean-eez/src/functions/boundaryAreaOverlapSmoke.test.ts @@ -1,6 +1,3 @@ -/** - * @vitest-environment node - */ import { boundaryAreaOverlap } from "./boundaryAreaOverlap.js"; import { getExamplePolygonSketchAll, diff --git a/packages/template-ocean-eez/src/functions/clipToLand.test.ts b/packages/template-ocean-eez/src/functions/clipToLand.test.ts new file mode 100644 index 0000000000..57b46e4583 --- /dev/null +++ b/packages/template-ocean-eez/src/functions/clipToLand.test.ts @@ -0,0 +1,86 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { clipToLand } from "./clipToLand.js"; +import { area, featureCollection, polygon } from "@turf/turf"; + +const landFeature = polygon([ + [ + [0, 0], + [2, 0], + [2, 2], + [0, 2], + [0, 0], + ], +]); + +// fully outside landFeature +const outside = polygon([ + [ + [3, 3], + [4, 3], + [4, 4], + [3, 4], + [3, 3], + ], +]); + +// half inside landFeature +const halfInside = polygon([ + [ + [1, 1], + [3, 1], + [3, 2], + [1, 2], + [1, 1], + ], +]); + +// fully inside landFeature +const inside = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); + +describe("clipToLand", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + // Mock VectorDataSource fetchUnion method to return landFeature + vi.mock(import("@seasketch/geoprocessing"), async (importOriginal) => { + const actual = await importOriginal(); + const VectorDataSource = vi.fn(); + VectorDataSource.prototype.fetchUnion = vi.fn(() => + featureCollection([landFeature]), + ); + return { ...actual, VectorDataSource }; + }); + + test("clipToLand - feature outside of land should throw", async () => { + try { + await clipToLand(outside); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToLand - feature inside of land boundary should return entire", async () => { + const result = await clipToLand(inside); + expect(result).toEqual(inside); + expect(area(result)).toBe(area(inside)); + }); + + test("clipToLand - feature partially inside of land boundary should return clipped", async () => { + const result = await clipToLand(halfInside); + // Expect half outside land to be clipped off and land-side polygon with approximately half the area to be returned + expect(area(result)).toBeCloseTo(area(inside)); + }); +}); diff --git a/packages/template-ocean-eez/src/functions/clipToLand.ts b/packages/template-ocean-eez/src/functions/clipToLand.ts index cbbf84ed77..279c533cd5 100644 --- a/packages/template-ocean-eez/src/functions/clipToLand.ts +++ b/packages/template-ocean-eez/src/functions/clipToLand.ts @@ -4,53 +4,36 @@ import { Sketch, isPolygonFeature, ValidationError, + VectorDataSource, + FeatureClipOperation, clipToPolygonFeatures, - DatasourceClipOperation, - DefaultExtraParams, } from "@seasketch/geoprocessing"; -import project from "../../project/projectClient.js"; -import { genClipLoader } from "@seasketch/geoprocessing/dataproviders"; +import { bbox } from "@turf/turf"; /** * Preprocessor takes a Polygon feature/sketch and returns the portion that - * overlaps with land. If results in multiple polygons then returns the largest. + * is on land. */ -export async function clipToLand( - feature: Feature | Sketch, - extraParams: DefaultExtraParams = {}, -): Promise { +export async function clipToLand(feature: Feature | Sketch): Promise { if (!isPolygonFeature(feature)) { throw new ValidationError("Input must be a polygon"); } + const featureBox = bbox(feature); - /** - * Subtract parts of feature/sketch that don't overlap with land. Uses global OSM land polygons - * unionProperty is specific to subdivided datasets. When defined, it will fetch - * and rebuild all subdivided land features overlapping with the feature/sketch - * with the same gid property (assigned one per country) into one feature before clipping. - * This is useful for preventing slivers from forming and possible for performance. - * unionProperty will optionally filter the land features by one or more country ID so you can - * constrain it to a specific country. - */ - const keepLand: DatasourceClipOperation = { - datasourceId: "global-clipping-osm-land", + // Get land polygons - osm land vector datasource + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + // one gid assigned per country, use to union subdivided pieces back together on fetch, prevents slivers + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); + + const keepLand: FeatureClipOperation = { operation: "intersection", - options: { - unionProperty: "gid", // gid is assigned per country - propertyFilter: { - property: "gid", - values: extraParams?.countryIds || [project.basic.planningAreaId] || [], - }, - }, + clipFeatures: landFC.features, }; - // Create a function that will perform the clip operations in order - const clipLoader = genClipLoader(project, [keepLand]); - - // Wrap clip function into preprocessing function with additional clip options - return clipToPolygonFeatures(feature, clipLoader, { - maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM - enforceMaxSize: false, + // Execute one or more clip operations in order against feature + return clipToPolygonFeatures(feature, [keepLand], { ensurePolygon: true, }); } @@ -59,6 +42,5 @@ export default new PreprocessingHandler(clipToLand, { title: "clipToLand", description: "Clips portion of feature or sketch not overlapping land", timeout: 40, - requiresProperties: [], - memory: 4096, + memory: 1024, }); diff --git a/packages/template-ocean-eez/src/functions/clipToLandSmoke.test.ts b/packages/template-ocean-eez/src/functions/clipToLandSmoke.test.ts index 517be81506..d664a52bd2 100644 --- a/packages/template-ocean-eez/src/functions/clipToLandSmoke.test.ts +++ b/packages/template-ocean-eez/src/functions/clipToLandSmoke.test.ts @@ -1,10 +1,11 @@ -/** - * @vitest-environment node - */ import handler, { clipToLand } from "./clipToLand.js"; -import { polygonPreprocessorSmokeTest } from "@seasketch/geoprocessing/scripts/testing"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; -// polygonPreprocessorSmokeTest(clipToLand, handler.options.title, { -// timeout: 30000, -// debug: true, -// }); +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(clipToLand, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-ocean-eez/src/functions/clipToOcean.test.ts b/packages/template-ocean-eez/src/functions/clipToOcean.test.ts new file mode 100644 index 0000000000..2b8b7f196c --- /dev/null +++ b/packages/template-ocean-eez/src/functions/clipToOcean.test.ts @@ -0,0 +1,90 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { clipToOcean } from "./clipToOcean.js"; +import { area, featureCollection, polygon } from "@turf/turf"; + +const landFeature = polygon([ + [ + [0, 0], + [2, 0], + [2, 2], + [0, 2], + [0, 0], + ], +]); + +// half inside and half outside clipFeature +const halfInsideOutside = polygon([ + [ + [1, 1], + [3, 1], + [3, 2], + [1, 2], + [1, 1], + ], +]); + +// fully outside half clipFeature +const outsideLand = polygon([ + [ + [2, 1], + [3, 1], + [3, 2], + [2, 2], + [2, 1], + ], +]); + +// fully inside half clipFeature +const insideLand = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); + +/** + * clipToOcean uses land vector datasource to remove portion of feature that is within land feature + */ + +describe("clipToOcean", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + // Mock VectorDataSource fetchUnion method to return clipFeature + vi.mock(import("@seasketch/geoprocessing"), async (importOriginal) => { + const actual = await importOriginal(); + const VectorDataSource = vi.fn(); + VectorDataSource.prototype.fetchUnion = vi.fn(() => + featureCollection([landFeature]), + ); + return { ...actual, VectorDataSource }; + }); + + test("clipToOcean - feature inside of land feature should throw", async () => { + try { + await clipToOcean(insideLand); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToOcean - feature outside of land feature should return entire", async () => { + const result = await clipToOcean(outsideLand); + expect(result).toEqual(outsideLand); + expect(area(result)).toBe(area(outsideLand)); + }); + + test("clipToOcean - feature partially outside of land feature should return clipped", async () => { + const result = await clipToOcean(halfInsideOutside); + // Expect half inside land to be clipped off and ocean-side polygon with approximately half the area to be returned + expect(area(result)).toBeCloseTo(area(insideLand)); + }); +}); diff --git a/packages/template-ocean-eez/src/functions/clipToOcean.ts b/packages/template-ocean-eez/src/functions/clipToOcean.ts index 75c1e915ab..54c8b18eaa 100644 --- a/packages/template-ocean-eez/src/functions/clipToOcean.ts +++ b/packages/template-ocean-eez/src/functions/clipToOcean.ts @@ -2,49 +2,41 @@ import { PreprocessingHandler, Feature, Sketch, - isPolygonFeature, - ValidationError, clipToPolygonFeatures, - DatasourceClipOperation, - DefaultExtraParams, + FeatureClipOperation, + VectorDataSource, + ensureValidPolygon, } from "@seasketch/geoprocessing"; -import project from "../../project/projectClient.js"; -import { genClipLoader } from "@seasketch/geoprocessing/dataproviders"; +import { bbox } from "@turf/turf"; /** * Preprocessor takes a Polygon feature/sketch and returns the portion that - * is in the ocean (not on land) and within one or more EEZ boundaries. - * If results in multiple polygons then returns the largest. + * is in the ocean (not on land). If results in multiple polygons then returns the largest. */ -export async function clipToOcean( - feature: Feature | Sketch, - extraParams: DefaultExtraParams = {}, // eslint-disable-line @typescript-eslint/no-unused-vars -): Promise { - if (!isPolygonFeature(feature)) { - throw new ValidationError("Input must be a polygon"); - } +export async function clipToOcean(feature: Feature | Sketch): Promise { + // throws if not valid with specific message + ensureValidPolygon(feature, { + minSize: 1, + enforceMinSize: false, + maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, + }); + + // Get land polygons - osm land vector datasource + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + const featureBox = bbox(feature); + // one gid assigned per country, use to union subdivided pieces back together on fetch, prevents slivers + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); - /** - * Subtract parts of feature/sketch that overlap with land. Uses global OSM land polygons - * unionProperty is specific to subdivided datasets. When defined, it will fetch - * and rebuild all subdivided land features overlapping with the feature/sketch - * with the same gid property (assigned one per country) into one feature before clipping - */ - const removeLand: DatasourceClipOperation = { - datasourceId: "global-clipping-osm-land", + const eraseLand: FeatureClipOperation = { operation: "difference", - options: { - unionProperty: "gid", // gid is assigned per country - }, + clipFeatures: landFC.features, }; - // Create a function that will perform the clip operations in order - const clipLoader = genClipLoader(project, [removeLand]); - - // Wrap clip function into preprocessing function with additional clip options - return clipToPolygonFeatures(feature, clipLoader, { - maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM - enforceMaxSize: false, + // Execute one or more clip operations in order against feature + return clipToPolygonFeatures(feature, [eraseLand], { ensurePolygon: true, }); } @@ -53,6 +45,5 @@ export default new PreprocessingHandler(clipToOcean, { title: "clipToOcean", description: "Clips feature or sketch to ocean, removing land", timeout: 40, - requiresProperties: [], - memory: 4096, + memory: 1024, }); diff --git a/packages/template-ocean-eez/src/functions/clipToOceanEez.test.ts b/packages/template-ocean-eez/src/functions/clipToOceanEez.test.ts new file mode 100644 index 0000000000..bfc98b78f2 --- /dev/null +++ b/packages/template-ocean-eez/src/functions/clipToOceanEez.test.ts @@ -0,0 +1,118 @@ +import { describe, test, expect, vi, afterEach, assert } from "vitest"; +import { clipToOceanEez } from "./clipToOceanEez.js"; +import { area, featureCollection, polygon } from "@turf/turf"; +import { BBox } from "@seasketch/geoprocessing"; + +const landFeature = polygon([ + [ + [0, 0], + [2, 0], + [2, 2], + [0, 2], + [0, 0], + ], +]); + +const eezFeature = polygon([ + [ + [0, 0], + [3, 0], + [3, 3], + [0, 3], + [0, 0], + ], +]); + +// fully inside half clipFeature +const insideLand = polygon([ + [ + [1, 1], + [2, 1], + [2, 2], + [1, 2], + [1, 1], + ], +]); + +// third inside land, third outside eez, this inside eez +const thirdEach = polygon([ + [ + [1, 1], + [4, 1], + [4, 2], + [1, 2], + [1, 1], + ], +]); + +// fully outside eez +const outsideEez = polygon([ + [ + [3, 1], + [4, 1], + [4, 2], + [3, 2], + [3, 1], + ], +]); + +/** + * clipToOceanEez uses land vector datasource and eez with land vector datasource + * to remove portion of feature that is within land feature (difference), and keep + * the portion of feature that is inside the eez (intersection) + */ + +describe("clipToOceanEez", () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + + // Mock VectorDataSource fetchUnion method to return clipFeature + vi.mock(import("@seasketch/geoprocessing"), async (importOriginal) => { + const actual = await importOriginal(); + const VectorDataSource = vi.fn(); + VectorDataSource.prototype.fetchUnion = vi.fn( + (bbox: BBox, unionProperty?: string) => { + if (unionProperty === "gid") { + return featureCollection([landFeature]); + } else if (unionProperty === "UNION") { + return featureCollection([eezFeature]); + } + }, + ); + + VectorDataSource.prototype.fetchBundle = vi.fn(); + VectorDataSource.prototype.fetchBundleIndex = vi.fn(); + return { ...actual, VectorDataSource }; + }); + + test("clipToOceanEez - feature inside of land feature should throw", async () => { + try { + await clipToOceanEez(insideLand); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToOceanEez - feature outside of eez and land should throw", async () => { + try { + await clipToOceanEez(outsideEez); + } catch (error: unknown) { + if (error instanceof Error) { + expect(error.message).toBe("Feature is outside of boundary"); + return; + } + } + assert.fail("This should not be reached"); + }); + + test("clipToOceanEez - feature spanning land and outside eez should have middle third remain", async () => { + const result = await clipToOceanEez(thirdEach); + // Expect half inside land to be clipped off and ocean-side polygon with approximately half the area to be returned + expect(area(result)).toBeCloseTo(area(thirdEach) / 3); + }); +}); diff --git a/packages/template-ocean-eez/src/functions/clipToOceanEez.ts b/packages/template-ocean-eez/src/functions/clipToOceanEez.ts index e6f920b915..9154db3c07 100644 --- a/packages/template-ocean-eez/src/functions/clipToOceanEez.ts +++ b/packages/template-ocean-eez/src/functions/clipToOceanEez.ts @@ -2,14 +2,12 @@ import { PreprocessingHandler, Feature, Sketch, - isPolygonFeature, - ValidationError, + ensureValidPolygon, + FeatureClipOperation, + VectorDataSource, clipToPolygonFeatures, - DatasourceClipOperation, - DefaultExtraParams, } from "@seasketch/geoprocessing"; -import project from "../../project/projectClient.js"; -import { genClipLoader } from "@seasketch/geoprocessing/dataproviders"; +import { bbox } from "@turf/turf"; /** * Preprocessor takes a Polygon feature/sketch and returns the portion that @@ -17,50 +15,42 @@ import { genClipLoader } from "@seasketch/geoprocessing/dataproviders"; */ export async function clipToOceanEez( feature: Feature | Sketch, - extraParams: DefaultExtraParams = {}, ): Promise { - if (!isPolygonFeature(feature)) { - throw new ValidationError("Input must be a polygon"); - } + // throws if not valid with specific message + ensureValidPolygon(feature, { + minSize: 1, + enforceMinSize: false, + maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, + }); + + const featureBox = bbox(feature); + + // Erase portion of sketch over land - /** - * Subtract parts of feature/sketch that overlap with land. Uses global OSM land polygons - * unionProperty is specific to subdivided datasets. When defined, it will fetch - * and rebuild all subdivided land features overlapping with the feature/sketch - * with the same gid property (assigned one per country) into one feature before clipping. - * This is useful for preventing slivers from forming and possible for performance. - */ - const removeLand: DatasourceClipOperation = { - datasourceId: "global-clipping-osm-land", + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); + const eraseLand: FeatureClipOperation = { operation: "difference", - options: { - unionProperty: "gid", // gid is assigned per country - }, + clipFeatures: landFC.features, }; - // Optionally, subtract parts of feature/sketch that are outside of one - // or more EEZ's. Using a runtime-provided list of EEZ's via extraParams.eezFilterByNames - // allows this preprocessor to work for any set of EEZ's. Using a project-configured - // planningAreaId allows this preprocessor to work for a specific EEZ. - const removeOutsideEez: DatasourceClipOperation = { - datasourceId: "global-clipping-eez-land-union", + // Keep portion of sketch within EEZ + + const eezDatasource = new VectorDataSource( + "https://d3muy0hbwp5qkl.cloudfront.net", + ); + const eezFC = await eezDatasource.fetchUnion(featureBox, "UNION"); + // Optionally filter to single EEZ polygon by UNION name + const keepInsideEez: FeatureClipOperation = { operation: "intersection", - options: { - propertyFilter: { - property: "UNION", - values: extraParams?.eezNames || [project.basic.planningAreaId] || [], - }, - }, + clipFeatures: eezFC.features, }; - // Create a function that will perform the clip operations in order - const clipLoader = genClipLoader(project, [removeLand, removeOutsideEez]); - - // Wrap clip function into preprocessing function with additional clip options - return clipToPolygonFeatures(feature, clipLoader, { - maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM - enforceMaxSize: false, // throws error if feature is larger than maxSize - ensurePolygon: true, // don't allow multipolygon result, returns largest if multiple + return clipToPolygonFeatures(feature, [eraseLand, keepInsideEez], { + ensurePolygon: true, }); } @@ -69,5 +59,5 @@ export default new PreprocessingHandler(clipToOceanEez, { description: "Example-description", timeout: 40, requiresProperties: [], - memory: 4096, + memory: 1024, }); diff --git a/packages/template-ocean-eez/src/functions/clipToOceanEezSmoke.test.ts b/packages/template-ocean-eez/src/functions/clipToOceanEezSmoke.test.ts index 6c059f442e..b3bf0c7bee 100644 --- a/packages/template-ocean-eez/src/functions/clipToOceanEezSmoke.test.ts +++ b/packages/template-ocean-eez/src/functions/clipToOceanEezSmoke.test.ts @@ -1,10 +1,11 @@ -/** - * @vitest-environment node - */ import handler, { clipToOceanEez } from "./clipToOceanEez.js"; -import { polygonPreprocessorSmokeTest } from "@seasketch/geoprocessing/scripts/testing"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; -// polygonPreprocessorSmokeTest(clipToOceanEez, handler.options.title, { -// timeout: 20000, -// debug: true, -// }); +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(clipToOceanEez, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-ocean-eez/src/functions/clipToOceanSmoke.test.ts b/packages/template-ocean-eez/src/functions/clipToOceanSmoke.test.ts index 93abc2e707..105cc843d0 100644 --- a/packages/template-ocean-eez/src/functions/clipToOceanSmoke.test.ts +++ b/packages/template-ocean-eez/src/functions/clipToOceanSmoke.test.ts @@ -1,10 +1,11 @@ -/** - * @vitest-environment node - */ import handler, { clipToOcean } from "./clipToOcean.js"; -import { polygonPreprocessorSmokeTest } from "@seasketch/geoprocessing/scripts/testing"; +import { + polygonSmokeTest, + getExampleFeatures, +} from "@seasketch/geoprocessing/scripts/testing"; -// polygonPreprocessorSmokeTest(clipToOcean, handler.options.title, { -// timeout: 20000, -// debug: true, -// }); +const examples = await getExampleFeatures(); // Loads from examples/features directory +polygonSmokeTest(clipToOcean, handler.options.title, examples, { + timeout: 60_000, + debug: false, +}); diff --git a/packages/template-ocean-eez/src/functions/rasterFunction.ts b/packages/template-ocean-eez/src/functions/rasterFunction.ts index b1c18b379e..8a1c281778 100644 --- a/packages/template-ocean-eez/src/functions/rasterFunction.ts +++ b/packages/template-ocean-eez/src/functions/rasterFunction.ts @@ -6,9 +6,9 @@ import { GeoprocessingHandler, getFirstFromParam, DefaultExtraParams, - splitSketchAntimeridian, rasterMetrics, isRasterDatasource, + loadCog, } from "@seasketch/geoprocessing"; import project from "../../project/projectClient.js"; import { @@ -16,13 +16,11 @@ import { ReportResult, rekeyMetrics, sortMetrics, - toNullSketch, } from "@seasketch/geoprocessing/client-core"; import { clipToGeography } from "../util/clipToGeography.js"; -import { loadCog } from "@seasketch/geoprocessing/dataproviders"; /** - * rasterFunction: A geoprocessing function that calculates overlap metrics + * rasterFunction: A geoprocessing function that calculates overlap metrics for raster datasources * @param sketch - A sketch or collection of sketches * @param extraParams * @returns Calculated metrics and a null sketch @@ -33,41 +31,31 @@ export async function rasterFunction( | SketchCollection, extraParams: DefaultExtraParams = {}, ): Promise { - // Use caller-provided geographyId if provided + // Check for client-provided geography, fallback to first geography assigned as default-boundary in metrics.json const geographyId = getFirstFromParam("geographyIds", extraParams); - - // Get geography features, falling back to geography assigned to default-boundary group const curGeography = project.getGeographyById(geographyId, { fallbackGroup: "default-boundary", }); - - // Support sketches crossing antimeridian - const splitSketch = splitSketchAntimeridian(sketch); - - // Clip to portion of sketch within current geography - const clippedSketch = await clipToGeography(splitSketch, curGeography); - - // Get bounding box of sketch remainder - // const sketchBox = clippedSketch.bbox || bbox(clippedSketch); + // Clip portion of sketch outside geography features + const clippedSketch = await clipToGeography(sketch, curGeography); // Calculate overlap metrics for each class in metric group const metricGroup = project.getMetricGroup("rasterFunction"); const metrics: Metric[] = ( await Promise.all( metricGroup.classes.map(async (curClass) => { - if (!curClass.datasourceId) - throw new Error(`Expected datasourceId for ${curClass.classId}`); - - const ds = project.getDatasourceById(curClass.datasourceId); + const ds = project.getMetricGroupDatasource(metricGroup, { + classId: curClass.classId, + }); if (!isRasterDatasource(ds)) throw new Error(`Expected raster datasource for ${ds.datasourceId}`); const url = project.getDatasourceUrl(ds); - // Start raster load and move on in loop while awaiting finish + // Load raster metadata const raster = await loadCog(url); - // Start analysis when raster load finishes + // Run raster analysis const overlapResult = await rasterMetrics(raster, { metricId: metricGroup.metricId, feature: clippedSketch, @@ -89,10 +77,8 @@ export async function rasterFunction( ) ).flat(); - // Return a report result with metrics and a null sketch return { metrics: sortMetrics(rekeyMetrics(metrics)), - sketch: toNullSketch(sketch, true), }; } @@ -102,6 +88,4 @@ export default new GeoprocessingHandler(rasterFunction, { timeout: 500, // seconds memory: 1024, // megabytes executionMode: "async", - // Specify any Sketch Class form attributes that are required - requiresProperties: [], }); diff --git a/packages/template-ocean-eez/src/functions/vectorFunction.ts b/packages/template-ocean-eez/src/functions/vectorFunction.ts index 693008c59a..76a91b9cf1 100644 --- a/packages/template-ocean-eez/src/functions/vectorFunction.ts +++ b/packages/template-ocean-eez/src/functions/vectorFunction.ts @@ -6,25 +6,22 @@ import { GeoprocessingHandler, getFirstFromParam, DefaultExtraParams, - splitSketchAntimeridian, Feature, isVectorDatasource, overlapFeatures, + getFeaturesForSketchBBoxes, } from "@seasketch/geoprocessing"; -import bbox from "@turf/bbox"; import project from "../../project/projectClient.js"; import { Metric, ReportResult, rekeyMetrics, sortMetrics, - toNullSketch, } from "@seasketch/geoprocessing/client-core"; import { clipToGeography } from "../util/clipToGeography.js"; -import { fgbFetchAll } from "@seasketch/geoprocessing/dataproviders"; /** - * vectorFunction: A geoprocessing function that calculates overlap metrics + * vectorFunction: A geoprocessing function that calculates overlap metrics for vector datasources * @param sketch - A sketch or collection of sketches * @param extraParams * @returns Calculated metrics and a null sketch @@ -35,56 +32,55 @@ export async function vectorFunction( | SketchCollection, extraParams: DefaultExtraParams = {}, ): Promise { - // Use caller-provided geographyId if provided + // Check for client-provided geography, fallback to first geography assigned as default-boundary in metrics.json const geographyId = getFirstFromParam("geographyIds", extraParams); - - // Get geography features, falling back to geography assigned to default-boundary group const curGeography = project.getGeographyById(geographyId, { fallbackGroup: "default-boundary", }); + // Clip portion of sketch outside geography features + const clippedSketch = await clipToGeography(sketch, curGeography); - // Support sketches crossing antimeridian - const splitSketch = splitSketchAntimeridian(sketch); - - // Clip to portion of sketch within current geography - const clippedSketch = await clipToGeography(splitSketch, curGeography); - - // Get bounding box of sketch remainder - const sketchBox = clippedSketch.bbox || bbox(clippedSketch); - - // Chached features - const cachedFeatures: Record[]> = {}; + const featuresByDatasource: Record< + string, + Feature[] + > = {}; // Calculate overlap metrics for each class in metric group const metricGroup = project.getMetricGroup("vectorFunction"); const metrics = ( await Promise.all( metricGroup.classes.map(async (curClass) => { - if (!curClass.datasourceId) - throw new Error(`Expected datasourceId for ${curClass.classId}`); - - const ds = project.getDatasourceById(curClass.datasourceId); + const ds = project.getMetricGroupDatasource(metricGroup, { + classId: curClass.classId, + }); if (!isVectorDatasource(ds)) throw new Error(`Expected vector datasource for ${ds.datasourceId}`); - const url = project.getDatasourceUrl(ds); - // Fetch features overlapping with sketch, pull from cache if already fetched + // Fetch features overlapping with sketch, if not already fetched const features = - cachedFeatures[curClass.datasourceId] || - (await fgbFetchAll>(url, sketchBox)); - cachedFeatures[curClass.datasourceId] = features; + featuresByDatasource[ds.datasourceId] || + (await getFeaturesForSketchBBoxes(sketch, url)); + featuresByDatasource[ds.datasourceId] = features; + + // Get classKey for current data class + const classKey = project.getMetricGroupClassKey(metricGroup, { + classId: curClass.classId, + }); - // If this is a sub-class, filter by class name - const finalFeatures = - curClass.classKey && curClass.classId !== `${ds.datasourceId}_all` - ? features.filter((feat) => { - return ( - feat.geometry && - feat.properties![ds.classKeys[0]] === curClass.classId - ); - }) - : features; + let finalFeatures: Feature[] = []; + if (!classKey || curClass.classId === `${ds.datasourceId}_all`) + // If no classKey defined, then this is probably a metric group of one class, use all features + finalFeatures = features; + else { + // else filter to features that are a member of this class + finalFeatures = features.filter( + (feat) => + feat.geometry && + feat.properties && + feat.properties[classKey] === curClass.classId, + ); + } // Calculate overlap metrics const overlapResult = await overlapFeatures( @@ -104,10 +100,8 @@ export async function vectorFunction( ) ).flat(); - // Return a report result with metrics and a null sketch return { metrics: sortMetrics(rekeyMetrics(metrics)), - sketch: toNullSketch(sketch, true), }; } @@ -117,6 +111,4 @@ export default new GeoprocessingHandler(vectorFunction, { timeout: 500, // seconds memory: 1024, // megabytes executionMode: "async", - // Specify any Sketch Class form attributes that are required - requiresProperties: [], }); diff --git a/website/docs/CLI.md b/website/docs/CLI.md index 7e85f877ed..798c4dec64 100644 --- a/website/docs/CLI.md +++ b/website/docs/CLI.md @@ -11,7 +11,6 @@ Each geoprocessing project provides a number of commands to get work done. They - `create:report` - stubs out new report component and geoprocessing function - `create:client` - stubs out a new report client - `create:function` - stubs out a new geoprocessing function -- `add:template` - add-on templates for your project ## Datasource management @@ -26,11 +25,11 @@ Testing uses [Storybook](https://storybook.js.org/), [Jest](https://jestjs.io/) - `storybook` - loads stories for your reports and other UI components in your default web browser using a local storybook dev server. - Story files must be named `*.stories.tsx` to be picked up. - Storybook updates automatically as you make and save changes to your components. -- `start-data` - runs a local file server, serving up the cloud-optimized datasources in `data/dist`. +- `start:data` - runs a local file server, serving up the cloud-optimized datasources in `data/dist`. - `test` - executes all unit and smoke tests for the project -- `test:unit:matching` - executes unit tests matching the given substring. - - You will need to run `start-data` command manually before running this command if your functions accesses datasources published by this project (not global datasources). +- `test:matching` - executes unit tests matching the given substring. + - You will need to run `start:data` command manually before running this command if your functions accesses datasources published by this project (not global datasources). - See Vitest [-t](https://vitest.dev/guide/cli#options) - e.g. `npm run test:matching boundaryAreaOverlapSmoke` where smoke test is coded as follows @@ -41,7 +40,7 @@ test("boundaryAreaOverlapSmoke - tests run against all examples", async () => { ``` - `test:matching` - executes tests with name matching the given substring. - - You will need to run `start-data` command manually before running this command if your functions accesses datasources published by this project (not global datasources). + - You will need to run `start:data` command manually before running this command if your functions accesses datasources published by this project (not global datasources). - See Jest [--testNamePattern](https://jestjs.io/docs/cli#--testnamepatternregex) - e.g. `npm run test:matching boundaryAreaOverlapSmoke` where smoke test is coded as follows @@ -64,20 +63,20 @@ test("boundaryAreaOverlapSmoke - tests run against all examples", async () => { ## Upgrade scripts -- `install:scripts` - installs scripts from the geoprocessing library to `scripts` and `data/scripts` folders, overwriting existing files. Use to manually upgrade your scripts to the latest after upgrading the geoprocessing library. If you've modified these scripts locally you will need to merge the changes manually. +- `upgrade` - installs the latest base configurations files and scripts from the geoprocessing library into your project. Migrates your code with breaking changes. If you've modified any base scripts locally you will need to view the changes in git and potentialy re-incorporate them. ## Language Translation -- `translation:extract` +- `extract:translation` - Extracts all translations from your projects source code using babel and [babel-plugin-i18next-extract](https://github.com/gilbsgilbs/babel-plugin-i18next-extract). It also runs an additional script (`src/i18n/bin/extractExtraTerms.ts`) to extract strings from your project config (metrics.json, objectives.json) commonly displayed in reports for translation as `extraTerms`. -- `translation:publish` +- `publish:translation` - Posts translations for all langauges to POEditor. Behavior is pre-configured via `src/i18n/config.ts`. Do not edit this file unless you need to. - Translations with namespace specified by `localNamespace` are written to POEditor with context value specified by `remoteContext`. - All english translations are published, overwriting any in POEditor, since the code is their source of truth. - - For non-english languages, POEditor is the source of truth, so if a translation is not defined in POEditor, then a local project translation is published if available, otherwise a base translation will be published as fallback. Running `translation:import` after that will then import those base translations back and seed the local project translations. -- `translation:import` + - For non-english languages, POEditor is the source of truth, so if a translation is not defined in POEditor, then a local project translation is published if available, otherwise a base translation will be published as fallback. Running `import:translation` after that will then import those base translations back and seed the local project translations. +- `import:translation` - Fetches translations from POEditor for all non-english languages having context value specified by `remotextContex` property in `src/i18n/config.son`. Any existing translation values will be overwritten. Translations are saved to the namespace specified by the `localNamespace` property in `project/i18n.json`. -- `translation:sync` +- `sync:translation` - A convenience command to keep the code, local translations, and remote translations in sync. Simply runs in succession `extract`, `publish`, then `import`. -- `translation:install` +- `install:translation` - Use to manually upgrade your projects base translations from the installed geoprocessing library to the projects `src/i18n/baseLang` directory, overwriting any previous version. You should not normally need to run this, because it is already run after every time you run `npm install` such that if you upgrade your geoprocessing library version, it will be done automatically. diff --git a/website/docs/Contributing.md b/website/docs/Contributing.md index e7ddf0c59a..4c2fe28e13 100644 --- a/website/docs/Contributing.md +++ b/website/docs/Contributing.md @@ -40,7 +40,7 @@ Storybooks are published for each major and minor version of geoprocessing. ## Core library setup -To contribute to the library, you'll need to set it up on your local system. First, follow the base [setup tutorial](./tutorials/Tutorials.md#initial-system-setup). +To contribute to the library, you'll need to set it up on your local system. First, follow the [system setup](./tutorials/Tutorials.md) tutorial. Then checkout the repo and run the install script. This will install lerna, bootstrap each package, and prepare an initial build of the geoprocessing library. @@ -73,22 +73,30 @@ CLI - from packages/geoprocessing folder - `npm run watch` - build core library and watch for changes - `npm run watch:scripts` - build scripts only and watch for changes +## Upgrading Dependencies + +Upgrading package dependencies should be done carefully. The `ncu` command is a good way to do this in chunks. Run the following command in each of the root geoprocessing directory, `geoprocessing/packages/geoprocessing`, and each of the `geoprocessing/packages/template-*` directories: + +`npx ncu --interactive --format group` + +Use the spacebar to select all the packages to update. `patch` and `minor` release updates should be safe to do without fear of breaking changes. `major` updates should be left for last and done carefully, possibly even one at a time. Any dependency that has co-dependencies, for example babel with its plugins, should be upgraded at the same time, and match version number appropriately. Brand new releases, particularly majore releases can have bugs and upgrading to the latest and greatest is not always the best idea. Test in stages and as you go so that the cause is easier to figure out. Even doing full deployments, checking storybook, etc. to make sure working properly. Dependency upgrades should be done at least quarterly, monthly is better. + ## Internationalization (i18n) -The geoprocessign framework implements the [GIP-1](./gip/GIP-1-i18n.md) proposal for language translation, and uses POEditor as its third-party service for translators to provide translations. +The geoprocessing framework implements the [GIP-1](./gip/GIP-1-i18n.md) proposal for language translation, and uses POEditor as its third-party service for translators to provide translations. The language translation [tutorial](/tutorials/Tutorials.md) contains a lot of useful information on workflow. Managing translations internally for the library is very similar with some differences. -- `translation:extract` +- `extract:translation` - Extracts all translations from the geoprocessing package and all template packages using babel and [babel-plugin-i18next-extract](https://github.com/gilbsgilbs/babel-plugin-i18next-extract) to `packages/geoprocessing/src/i18n`. -- `translation:publish` +- `publish:translation` - Posts translations for all langauges to POEditor. Behavior is pre-configured via `src/i18n/config.ts`. Do not edit this file unless you need to. - Translations with namespace specified by `localNamespace` are written to POEditor with context value of `base` (context specified by `remotextContex` property in `src/i18n/config.son`). - All english translations are published, overwriting any in POEditor, since the code is their source of truth. - For non-english languages, POEditor is the source of truth, so if a translation is not defined in POEditor, then a local translation is published if available. -- `translation:import` +- `import:translation` - Fetches translations from POEditor for all non-english languages having `base` context value (context specified by `remotextContex` property in `src/i18n/config.son`). Any existing translation values will be overwritten. Translations are saved to the default `translation` namespace (as specified by the `localNamespace` property in `project/i18n.json`). -- `translation:sync` +- `sync:translation` - A convenience command to keep the code, local translations, and remote translations in sync. Simply runs in succession `extract`, `publish`, then `import`. ## Testing @@ -143,12 +151,12 @@ Test commands that include the e2e test group all start a web server on localhos ## Geoprocessing project test data on port 8080 -Be aware that geoprocessing projects also have a start-data command and they all use 8080 by default, but fallback to another port if 8080 isn't available without telling you. so your tests may unexpectedly fail with network connection errors, or seemingly more vague errors about "block size" for a Cloud-optimized Geotiff. Just make sure you have a web server started and that you aren't running more than one. Check other vscode windows for shells running start-data and kill them. +Be aware that geoprocessing projects also have a `start:data` command and they all use 8080 by default, but fallback to another port if 8080 isn't available without telling you. so your tests may unexpectedly fail with network connection errors, or seemingly more vague errors about "block size" for a Cloud-optimized Geotiff. Just make sure you have a web server started and that you aren't running more than one. Check other vscode windows for shells running `start:data` and kill them. If you want to run a test command that lets you match on a test name like `test:scripts:e2e:matching`, then you'll need to start your own web server using the following command: ```bash -npm run start-data +npm run start:data ``` If you use the VSCode launcher to debug tests you will also need to manually start a web server as it will not auto-start them. Again look for connection or block size errors as a clue. @@ -284,28 +292,62 @@ Further link troubleshooting steps: ## Publishing +## Stable release + New stable releases of the framework are published from the `main` branch. To do this: -- Make sure the `main` branch has the latest code. Open a pull request from the `dev` branch if needed. -- Update Changelog.md - using the commit log as a guide. If breaking changes, then you'll need to release a new major version. (e.g. 2.0.0 -> 3.0.0), otherwise a new minor version is typically fine. See [semantic versioning conventions](https://semver.org/). -- Publish - - `npm run publish:stable` - - Choose the version number that matches what you put into the Changelog. +- make sure all code has been committed and tests are passing. +- Run `npm run publish:stable` from the top-level geoprocessing directory. +- This will generate new build artifacts in the `dist` folder first using the `prepare` script. +- Then you will be asked whether this is a patch, minor, or major release. Please follow [semantic versioning conventions](https://semver.org/). +- On publish, the release package will be submitted to NPM and made available under the `latest` tag such that anyone installing geoprocessing or running its init script will get this latest version. +- A git tag with the name of the version number will also be published to Github. + +The final step is to publish [release](https://github.com/seasketch/geoprocessing/releases) notes. Go to the release page and + +- Click `Draft a new release` button. +- Choose the release tag just created in the publish step. +- Click `Generate release notes` button. +- Add subheadings (e.g 💥 Breaking Changes, 🚀 New Feature / Improvement) and organize the generated bullet list into them. Look at past releases for how to do this. +- Be sure to review deeper into your commit logs and manually add additional bullet points to the release notes. Include any deprecations, internal enhacements, doc enhancements, etc. +- Add one or more paragraphs at the top of the release notes summarizing the release and any steps the user needs to take on upgrade. +- Publish the release notes. + +## Alpha and Beta canary Prerelease + +You can publish `alpha` and `beta` prereleases prior to a stable release. This will advance the version numbers in package.json and generate a release tag. + +```sh +npm run publish:alpha +``` + +or + +```sh +npm run publish:beta +``` + +Then press the Enter key to choose `❯ Custom Prerelease` +Then press the Enter key when it asks you Enter a prerelease identifier. It will use a default name, something like `7.0.0-beta.1`. -By default, a stable release will be tagged as `latest` so that users installing from npm will get it by default. +As you create more beta releases, it will automatically increment the beta number and maintain the naming scheme. -Please follow [semantic versioning conventions](https://semver.org/). This will generate new build artifacts in the `dist` folder first using the `prepare` script. +## Backport Release -## Alpha and Beta Canary Releases +A backport release should be published when you backport features or bug fixes to a previous major version of the code. For example critical bug fixes developed for 7.x, backported to 6.x. -You can also publish `alpha` or `beta` canary releases out-of-band to quickly test new features and publish them, without bumping the version number. These releases are not tagged as `latest`, so they aren't installed unless a user targets them specifically. Make sure that you create them from the dev branch. +A backport release is a normal release, in that you choose whether it is a patch or a minor release, and it will advance the version to the next number e.g. 6.1.2 would become either 6.1.3 (patch) or 6.2.0 (minor). The only different is that the `backport` distribution tag is applied to the release, rather than `latest`. + +The suggested method to do a backport release is to checkout a prior release tag, then create a new branch ```sh -npm run publish:alpha:canary -npm run publish:beta:canary +git checkout tags/v6.1.2 +git checkout -b v6.2.0 + +npm run publish:backport ``` -Assuming the current GP version is say 0.15.0, and you've made 5 commits to the dev branch since the last release, this should publish a minor canary release called `0.15.1-alpha.5` or `0.15.1-beta.5`. As you push more commits to the dev branch, you can publish again at any time and the commit number will increment so that there isn't a name collision. +Choose minor release 6.2.0 ## Experimental Releases @@ -333,7 +375,7 @@ Diagrams are maintained in internal SeaSketch [drive share](https://drive.google Localization is managed using [i18next](https://react.i18next.com/). Wrap _all_ strings displayed in report client UIs in appropriate tags so they can be translated into multiple languages. ESLint rules will flag missing tags. -We're using a [public POEditor project](https://poeditor.com/join/project?hash=juloLqMZDP) to manage translations. Local npm scripts exist to publish new terms to this project and extract translations into the `packages/i18n` directory. Run `npm run translation:sync` to perform these operations. It is important to do this regularly. The CI system will build a newly updated clients, but will only include new translations if this step is performed and changes are checked in. +We're using a [public POEditor project](https://poeditor.com/join/project?hash=juloLqMZDP) to manage translations. Local npm scripts exist to publish new terms to this project and extract translations into the `packages/i18n` directory. Run `npm run sync:translation` to perform these operations. It is important to do this regularly. The CI system will build a newly updated clients, but will only include new translations if this step is performed and changes are checked in. ### i18n namespaces @@ -343,15 +385,14 @@ To add new namespaces as new features are launched, edit `packages/i18n/namespac ### Adding new languages -To add new supported languages, add required metadata to `packages/i18n/supported.ts`. You will also need to add a matching entry to the POEditor project using their GUI. +To add new supported languages, add required metadata to `packages/i18n/languages.json`. You will also need to add a matching entry to any POEditor projects using their GUI. ### Architecture -translation:extract - extract translations from code to `packages/i18n/lang/en` using babel and i18next-extract plugin -translation:publish - publish term namespaces to poeditor, updating existing terms and adding new terms -translation:import - download poeditor translated terms to local cache in `packages/i18n/lang` - -translation:sync - runs both extract/publish and import to sync local with poeditor +- extract:translation - extract translations from code to `packages/i18n/lang/en` using babel and i18next-extract plugin +- publish:translation - publish term namespaces to poeditor, updating existing terms and adding new terms +- import:translation - download poeditor translated terms to local cache in `packages/i18n/lang` +- sync:translation - runs both extract/publish and import to sync local with poeditor POEDITOR_PROJECT and POEDITOR_API_TOKEN environment variables must be pre-loaded in your shell environment to publish and import from poeditor.com. @@ -367,7 +408,6 @@ pros - sibling packages import from @seasketch/geoprocessing-i18n - i18n package is independent of geoprocessing package on npm and could potentially be upgraded independently by a project. -- translation:upgrade - bump the i18n package version and `translation:upgrade` bin script in project space will merge the updates. A function could be provided within i18n cons diff --git a/website/docs/EdgesAndLimits.md b/website/docs/EdgesAndLimits.md index 630466b9df..69a2c1058f 100644 --- a/website/docs/EdgesAndLimits.md +++ b/website/docs/EdgesAndLimits.md @@ -1,17 +1,30 @@ ---- -slug: "/limits" ---- +# Accuracy/Limitations -# Edge Cases & Limits +### Javascript-only -## Zero Geography - No Overlap With MetricGroup (NaN) +- The geoprocessing library currently only supports geoprocessing functions that run in a NodeJS environment. You have the ability to invoke any Lambda function, the framework just doesn't have first class support for writing and publishing functions in any other languages. -This use case happens when no features for some class of data within a datasource, overlap with a geography. This produces a zero (0) value metric in precalc. If this zero value metric gets passed as the denominator to `toPercentMetric(numeratorMetrics, denominatorMetrics)`, the function will return a `NaN` value, rather than 0. This is so that downstream consumers can understand this isn't just any 0. There's an opportunity to tell the user that no matter where they put their sketch within the geography, there is no way for the value to be more than zero. For example, the ClassTable component looks for `NaN` metric values and will automatically display 0%, along with an informative popover explaining that no data class features are within the current geography. +### Coordinate System Support -## Zero Geometries +- Vector data, on import, is converted to WGS 84 (EPSG 4326). Vector toolbox functions expect data to be in this projection. +- Raster data, on import, is converted to an equal area projection (NSIDC EASE-Grid 2.0 Global)[https://epsg.io/6933]. Raster toolbox functions should work with any grid-based projection but anything other than equal area will have accuract issues. -In geoprocessing functions, sketches are clipped to the current geography using `clipToGeography()`. A georaphy can be as large as the extent of the entire world, or be a smaller boundary within the overall planning area. +- Geoprocessing functions in this library currently only support GeoJSON data in the World Geodetic System 1984 (WGS 84) [WGS84] datum (aka Lat/Lon), with longitude and latitude units of decimal degrees. -When the geography is a subset of the larger planning area, you can have sketches that fall completely outside the geography, and the intersection of the sketch and the geography will have nothing remaining because there's no overlap. In GeoJSON, this clip result could be represented with a `null` geometry value, but Turf and most other libraries don't handle null geometries well, so `overlap` toolbox functions would have unexpected results. +### Calculation Error -We could also have clipToGeography return a `null` value for the entire sketch, but that gets complex, especially when you're processing a whole SketchCollection. What we decided to do instead is to have `clipToGeography` return a `zero` geometry when a sketch has no overlap with the geography. We do this using the `zeroSketch` helper function.Given a Sketch it replaces the geometry with a polygon at [[0,0], [0,0], [0,0], [0,0]]. It's a valid geometry, but's it's located at [Null Island](https://en.wikipedia.org/wiki/Null_Island). What happens as a result is that downstream `overlap` toolbox functions receive a Sketch as they expect, but when they pass it to any overlap functions it will return zero value metrics, as long as Null Island is not withing the planning area. +#### TurfJS + +TurfJS vector function (particularly those that use [Turf.JS](http://turfjs.org/docs/#distance)) measure distance and area by approximating them on a sphere. Turf.js functions strike a balance between speed and accuracy. + +- If the geographic area of your project is small, on the order of a few hundred to a thousand miles, and not at high latitudes (> 60), then the accuracy will be quite good, and the error quite small (within 5%) compared to more exact algorithms. +- And if your planning objectives target creating areas that capture a given % of something, for example 20% of the rocky reef habitat in the entire planning area, then the effect of error in area calculations should be **minimal to none**. + +Sources: + +- [Fast Geodesic Approximations](https://blog.mapbox.com/fast-geodesic-approximations-with-cheap-ruler-106f229ad016) +- [Calculate distance, bearing and more between Latitude/Longitude points](https://www.movable-type.co.uk/scripts/latlong.html) +- [Haversine Formula on Wikipedia](https://en.wikipedia.org/wiki/Haversine_formula). Used by [turf-distance](https://github.com/Turfjs/turf/tree/master/packages/turf-distance). Error up to 0.5% +- [Some algorithms for polygons on a sphere](https://sgp1.digitaloceanspaces.com/proletarian-library/books/5cc63c78dc09ee09864293f66e2716e2.pdf) - used by [turf-area](http://turfjs.org/docs/#area). Greater error at higher latitudes vs. Vincenty. +- [Vincenty algorithm](https://en.wikipedia.org/wiki/Vincenty%27s_formulae) used by [turf-vincenty-inverse](https://github.com/Turfjs/turf-vincenty-inverse) +- [GeoJSON spec WGS84 requirement](https://datatracker.ietf.org/doc/html/rfc7946#section-4). diff --git a/website/docs/Testing.md b/website/docs/Testing.md index 441c406e2e..25458797d1 100644 --- a/website/docs/Testing.md +++ b/website/docs/Testing.md @@ -4,6 +4,51 @@ slug: "/testing" # Testing +```bash +npm run test +``` + +This will start a web server on port 8080 that serves up the `data/dist` folder. Smoke tests will run geoprocessing functions against all of the sketches and features in the `examples` folder. `projectClient.getDatasourceUrl` will automatically read data from localhost:8080 instead of the production S3 bucket url when using functions like `loadFgb()`, `geoblaze.parse()`. + +### Smoke Tests + +Smoke tests, in the context of a geoprocessing project, verify that your preprocessing and geoprocessing function are working, and produce an output, for a given input. It doesn't ensure that the output is correct, just that something is produced. The input in this case is a suite of features and sketches that you manage. + +Smoke tests are your chance to convince yourself that functions are outputting the right results. This output is committed to the code repository as a source of truth, and if the results change in the future (due to a code change or an input data change or a dependency upgrade) then you will be able to clearly see the difference and convince yourself again that they are correct. All changes to smoke test output are for a reason and should not be skipped over. + +### Unit Tests + +Units tests go further than smoke tests, and verify that output or behavior is correct for a given input. + +You should have unit tests at least for utility or helper methods that you write of any complexity, whether for geoprocessing functions (backend) or report clients (frontend). + +- [Example](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/helpers/groupBy.test.ts) + +You can also write unit tests for your UI components using [testing-library](https://testing-library.com/docs/react-testing-library/intro/). + +- [Example](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/components/SketchAttributesCard.test.tsx) + +Each project you create includes a debug launcher which is useful for debugging your function. With the geoprocessing repo checked out and open in VSCode, just add a breakpoint or a `debugger` call in one of your tests or in one of your functions, click the `Debug` menu in the left toolbar (picture of a bug) and select the appropriate package. The debugger should break at the appropriate place. + +## Generate Features and Sketches For Smoke Tests + +In addition to using `genRandomFeatures`, you can create example features and sketches relevant to your project using GIS software, by drawing polygons using [geojson.io](https://geojson.io), or once you have your SeaSketch project setup, you can draw a sketch, right-click and export it as geojson, then copy it to the `examples/sketches` directory. These are all ways to build a comprehensive test suite. + +## Run single unit or smoke test + +To run only tests matching a specific name/description, you just need a portion of the test name/description to match on. For example for the following test: + +`test("kelpPersist - tests run against all examples", async () => {` + +You could run +`npm run test:matching 'kelpPersist - tests run against all examples'` + +or simply + +`npm run test:matching kelpPersist` + +If is a smoke test or any test requiring access to the dev data server then in a separate shell you will need to first run `npm run start:data`. + ## Testing API calls using Postman A public collection of API calls for working with a report project is at @@ -31,3 +76,9 @@ An alternative way to find your API gateway is: - Click the `Resources` tab - Search for `AWS::ApiGateway::RestApi` - Click the link to the gateway under `Physical ID` + +## Debugging Tests + +[ToDo] + +- VSCode run and debug launch configurations diff --git a/website/docs/_components/NodeVersion.tsx b/website/docs/_components/NodeVersion.tsx new file mode 100644 index 0000000000..059ebd1bc9 --- /dev/null +++ b/website/docs/_components/NodeVersion.tsx @@ -0,0 +1,9 @@ +import React from "react"; + +export function NodeVersion() { + return 20.12; +} + +export function UbuntuVersion() { + return 22.04 Jammy; +} diff --git a/website/docs/antimeridian/Antimeridian.md b/website/docs/antimeridian/Antimeridian.md index 4c83a56576..7ab4e4cc04 100644 --- a/website/docs/antimeridian/Antimeridian.md +++ b/website/docs/antimeridian/Antimeridian.md @@ -4,24 +4,24 @@ slug: "/antimeridian" # Antimeridian -When a Sketch polygon or multipolygon has coordinates that are on both sides of the 180 degree antimeridian, for example 179 degrees longitude would be on the left side, 181 degrees on the right side, then it is said to `cross` the antimeridian. When this happens, the sketch needs to be split. +The [antimeridian](https://en.wikipedia.org/wiki/180th_meridian) is the 180 degree meridian. -References +![Antimeridian](assets/Earth_map_with_180th_meridian.jpg "Antimeridian") -- [https://macwright.com/2016/09/26/the-180th-meridian](https://macwright.com/2016/09/26/the-180th-meridian) +With most GIS software, including SeaSketch, if you draw a polygon that has coordinates to the left and to the right of the antimeridian, you end up with coordinates that are outside of the established range of longitude from -180 to 180. -Example of Polygon on the "right" side of the world, crossing over the antimeridian at 180 degrees longitude going from 170 to 186. +Example of Polygon extending off the "right" side of 180, going from 170 to 186. ```json { "type": "Polygon", "coordinates": [ [ - [170.387412007, -14.240489787], - [186.381385397, -14.390078131], - [186.44313819, -15.493856974], - [170.480041196, -15.761471484], - [170.387412007, -14.240489787] + [170, -14], + [186, -14], + [186, -15], + [170, -15], + [170, -14] ] ] } @@ -44,37 +44,96 @@ Example of Polygon on the "left" side of the world, crossing over the antimeridi } ``` +These polygons are technically valid, but spatial analysis libraries often don't deal well with this, producing errors or invalid output. + +The solution, suggested by the [GeoJSON spec](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.9) is to split the polygons down the 180 meridian line, and shift the pieces that are outside the bounds of -180 to 180 back inside. For example: + +- a longitude value of 200 (20 more than 180) will become -160 (20 more than -180) +- a longitude value of -200 (20 less than -180) will become 160 (20 less than 180) + ## Splitting Sketches -Most GIS libraries don't handle properly Polygons crossing this line. For projects that allows users to draw Sketches across the antimeridian, if you want to analyze that Sketch in geoprocessing functions, the best solution is to `split` these Polygons into two pieces, one piece on the right side of the line, one piece on the left side of the line. +The SeaSketch platform does not split sketches when you draw a Polygon. It is up to geoprocessing functions to split them before doing analysis. To do this, the [splitSketchAntimeridian](../api/geoprocessing/functions/splitSketchAntimeridian.md) and [splitFeatureAntimeridian](../api/geoprocessing/functions/splitFeatureAntimeridian.md) functions are available. + +```typescript +import { splitSketchAntimeridian } from "@seasketch/geoprocessing"; + +const splitSketch = splitSketchAntimeridian(sketch); +``` + +The second polygon above, once split becomes: + +```json +{ + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [-180, -14], + [-174, -14], + [-174, -15], + [-180, -15], + [-180, -14] + ] + ], + [ + [ + [180, -15], + [170, -15], + [170, -14], + [180, -14], + [180, -15] + ] + ] + ], + "bbox": [-174, -15, 170, -14] +} +``` -In SeaSketch, the split Polygon will look like this with a line through the middle at -180 or 180 degrees: ![Antimeridian SeaSketch](assets/antimeridian-seasketch.png "Antimeridian SeaSketch") -And in GIS software like QGIS, the same split Polygon will look as follows, each half on different sides of the world. +Notice that there are now 2 polygons, and that all of the coordinates are shifted to be within -180 to 180. Also notice that the `bbox` has shifted coordinates as well. This is important because the bounding box of a sketch is commonly used in analysis to efficiently fetch just the subset of features that overlap with a sketches bounding box, rather than fetching the whole datasource. See the [Splitting bounding boxes](#splitting-bounding-boxes) section below for more information. + +It's also important to know that once split, the shifted pieces may appear as if they are on the other side of the world if you are viewing the data in software such as QGIS that displays data projected onto a rectangle that is split exactly at the 180th meridian. + ![Antimeridian QGIS Vector](assets/antimeridian-qgis.png "Antimeridian QGIS Vector") -This is because the portion of the sketch that is "outside", in other words less than 180 degrees, or more than 180 degrees, gets shifted to be within -180 to 180 as part of the splitting process. -SeaSketch doesn't do this split, because it's confusing to the user to see a line split through their Sketch. Geoprocessing functions are left to do this split using the `splitSketchAntimeridian()` function, which is already included when you use the `create:function` command. +References + +- [https://macwright.com/2016/09/26/the-180th-meridian](https://macwright.com/2016/09/26/the-180th-meridian) -## Splitting Datasources +## Splitting Vector Datasources -Just like Sketches, `vector` datasources that you import and use in preprocessing geoprocessing functions also need to be split. Many global datasources such as OSM land, Marine Regions EEZ, etc. already are split. Other vector datasources are not pre-split and the `import` CLI command will automatically do this split using the ogr2ogr `wrapdateline` option. +Just like Sketches, `vector` datasources that you import and intend to use in preprocessing and geoprocessing functions also need to be split. Many global datasources such as OSM land, Marine Regions EEZ, etc. already are already split. Other vector datasources are not pre-split. -`Raster` datasources do not need to be split. They are expected to be within -180 to 180 degrees. This means that data does not go off the `left` side of the world into less than -180 territory. And data does not go off the `right` side of the world into greater than 180 territory. So if you have a raster that covers the entire country of Fiji, you will end up with raster cells on both sides of the world, with no data in between. Thankfully, the `geoblaze` raster analysis library is smart enough to not fetch all the empty data in between when you are analyzing a Sketch that is split onto both sides of the world. +The `data:import` CLI command will automatically do this split using the ogr2ogr `wrapdateline` option. + +## Splitting Raster Datasources + +`Raster` datasources do not need to be split if they are within -180 to 180 degrees. For example if you have a raster for the entire country of Fiji, then when viewed in QGIS you should see data essentially on both sides of the world, with a big gap of data in between. ![Antimeridian QGIS Raster](assets/antimeridian-qgis-raster.png "Antimeridian QGIS Raster") ## Splitting Bounding Boxes -If a Feature or Sketch polygon crosses the antimeridian then so will it's bounding box. And the bounding box of a Sketch is used to fetch from a datasource only the features/raster cells that overlap with that bounding box. And if that bounding box extends across the 180 degree longitude line, then it won't return features or a raster for the portion less than -180, or greater than 180, you will only get the portion inside that range. +Bounding boxes need to be split before you can use them to fetch data from cloud-optimized spatial formats (Flatgeobuf, Cloud-optimized GeoTIFF). -Here's an example of a bounding box crossing the Fiji EEZ. The bounding box extends greater than 180, and if you call `getFeatures(eezDatasource, bbox)` with it you will not get the right side of the Fiji EEZ. +### Fetching From Flatgeobuf -![Antimeridian Underfetch](assets/antimeridian-under-fetch.png "Antimeridian Underfetch") +The `getFeaturesForSketchBBoxes` function automatically splits bounding boxes that cross the antimeridian. -The current (naive) `solution` is to re-calculate the bounding box after splitting a polygon Sketch. This will produce a bounding box with `clean` coordinates that are within -180 to 180. The problem is that this produces one long bounding box that extends from -180 all the way to 180. For example, if you take the Fiji bounding box from above and "clean" it, you get the bounding box below. And if you call `getFeatures(eezDatasource, cleanBbox)` with it, you will get all of the EEZ polygons across that long thin band. This works, if you filter out features after the face, but it is inefficient to send extra features over the network so be careful and watch the execution time of your geoprocessing functions. +The lower level `loadFgb` function, and underlying `flatgeobuf` library do not properly handle the antimeridian. If you call them with a bounding box that extends beyond the range of -180 to 180, they will return only the features that are within the range. If you shift the longitude values to be within the range, such as using the `cleanBBox` function, that will produce a bounding box that spans the globe (see screenshot below) and effectively `overfetch` more features than you wanted. This can work if your datasource is clipped to your study area, but will be very inefficient otherwise and should be avoided. ![Antimeridian Overfetch](assets/antimeridian-over-fetch.png "Antimeridian Overfetch") -A better solution, [not yet implemented](https://github.com/seasketch/geoprocessing/issues/250), would be to split the bounding box into two, just like we do with polygons. You would then need to call `getFeatures` for each bounding box and de-duplicate where features overlap with both bounding boxes, using a unique ID property. +### Fetching From Cloud-Optimized GeoTIFF + +If you will have Sketches/Features that cross the antimeridian, you should: split them first with `splitSketchAntimeridian`/`splitFeatureAntimeridian`, then call `rasterMetrics()` or any `geoblaze` stats function you need. + +The bounding box of the split Sketch/Feature will span the world (see last section for image), but if your raster dataset is limited to your project area, then Geoblaze is smart enough to not try and fetch data outside the extent of the raster, or represent it in memory. So it is recommended to clip raster data to the project area if possible. + +If your raster dataset extends across more of the globe longitudinally or the entire glove, then Geoglaze will overfetch data beyond the bounding box of your Sketch/Feature. This shouldn't affect your calculated results but it increases network and memory usage to fetch the extra data. If this is not acceptable, a user-space workaround might be for you to call your geoblaze calc methods for each half of your split Sketch/Feature, and then somehow merge the result. + +## Putting It All Together + +Here's an [example](https://github.com/underbluewaters/kiribati-reports/blob/5eb712f499a0fc799eb8372091808c49294154b9/src/functions/allenCoralAtlas.ts#L25) geoprocessing function that makes use of `splitSketchAntimeridian` and `getFeaturesForSketchBBoxes`. diff --git a/website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg b/website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33c8cccf3199b80fe688e387bf6b31b1a6491eac GIT binary patch literal 104240 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%0AZ#y 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

?J4>c0ai1^zh}h=lJMlsnejM9OuW& zfhsG-q2w;Q;=Vtypdr=CvoMry^S$X+3w8tra1pU z03`td=?^%C;N@qenUmX*pjr{J_d}!A_Q&Tx^F^nx>7`m%P2iT(@*TH$@N0E5U^sOvk3IeR0v^wfd54Q7f%cM-P<7!8StX$*s>A}$v~pCRuV|8Jyok&Q69ij z@>iDrj!@5P*70B$Io;m^c5J}_{GDN1?UWQv0a_19RD@SGyrcheD2t%eJ|u1$M7s^) z6$gLuYMmM&CN=p?WCO=$633kbA=4ZP@0OGrG6$mdB{%srp@6my?0R%;$t_6)0h0rR z%FC7(0c%ST3x925Daz*`c7blHLbpjaI@!KI?Uj-Z98)!K=0L!5$Tun3niep6-oJRq zmH|?yR>u}!#{^&dhRj(z^r>{Pg$9Tc8^oCSz?_-=kLAAtyt+*9e*WS!dL3Ja#Ol_s zlZu&tIe%FBG9vl68-Kwo>fMs#z*MO7H@S{2wvH{{z#doKr2K0LpBBYJvh!cYoy~$R zuoZzHHB6IC27Z|;oiA31vkoII{Y&P5@^WUv_$-9kcBeuXg!f%7 zYmpuUC1s=k;zJ-#PLR>L2k8Ii6OGzr>b$(pvrDFypTJBn%q%TTb0rYf-`7t#ga>0e z4?Sr7$!Eq4_cU>t&OygutbrYq!L~Y4G{1`CZ$ADP@9t9ht8kKT5t{dSmcrb_C= zFF7@Y2LKTN=7F_fflQ=7<1$f!9kJ&iRS$B=0&i?`JNiqmfx-X_4F!z)%_x*q_QBHH z{>cNU49o}g{tVNO`-@%4x@9v${AUCPBmKq8m-c5nHkU<0>_E0pLRPjQ;GfmGsy!A< zvlwL+!ka?wD1hGpgvqLcG|s+ne;<~Uo!lb*l~!^TWG=j&0AkoAMde@B!S=6o=^lU8 zf{(xX)HRlF#=rO^`OyB?&itTi4b9(@=D*~5ULp|w*Li`o|Er}diffR-pIh3X_*^E? zPEjG{ZwW-+2l4D8ux?J5{K=%R_?sz6|HUi(E=Eg8`Tv#uB=z3` z)nlo?za|opsz9{gK)?@w0RB_j z^JnG%PvPH*6@!5BkZSh#AtaD$^1sP{nAU#^^mnWeov{C?{tC!9{kuftzj)%kf7kvF zL)wUc5~ckwKE395EAublAM)?Of7(yVhvb)5}qS_SsMtCxJQ$KN*p4Ti+E6a39r ztyi$?PigKUunWrk%A0-Me`3F!`Mpu^KzM~Gy1x#cXcB=*9SD=ze*>$32Yv%-t6zWl z?=k-S@!^;1LP2qHpMQMZ@-Kt`&aXPAty(}8mL!2d|7g<;WSS^NTK=y*#OC1Xmz~Gm z-|0du7&taSlKy}35b|HC|Hc2B(g*9;ls-`K@V{sD`5#mI^v#~Li*Ku4{5_=)gcF1O z?L3E#B7pI^XBs2N^~|>feQ<8Alp5QhKLS}6>O$rzQUvsQhDeX);GC#ol6>*8ZblI& z)v4>Munigtpi4pBbh*u2Xe(@XKSZd(G*rv$Vw1uhcq69Fq|Sbx?T(B9{eFxdVJC}H z%IirD`%%O!TO93J)la)kh;5bpS`)bQq>Na1((`sEm;}7G5 z7<+*vAVZ(l8nrNm-Rv!e(nACOfcnxIag$%}Snw&SEv%N#i;mE5WE4xg8v^9KRr|c}Fr>nklEy&f#M~ zYZ)OK22>zr-G;10H%h8@Tr7noY^tO-DoWi>-B2j5m}|jgSK4(Qz$lH?=>xiu5P|xN zBN62VbeA|Y_^J7=#-jBp?GFGaKpWW*%YXYvss-Flr@s@Ed)#b#n$M;?b>DePspQ*v zu{A;%t1u-&#vWE2+MkA%uLBu?Qq3$KKM$PpC;K@8~$hl}9iclE_wWzZF%!t@^RSRwkqdr)?_t#3AvK>y2o; zT5OGayxx&i{U&`49`M}y;=K#5{Dg;*fOWI@ZYb~L6g_^CLkwkRy3u?oC{-*4x+4&{ z9h~HdWWaUmdIF+DODC5yKTZ`uzKS0tt8_?#GE3pwW&t4LdA#b)(`q%sdM>RXe>x#? zTxxnX{L(1Fo*blGxuXUP*J&IoMEA_4glrV@2f&xRi#S?UK%W1)Ksst~t_4X*x_S;p zOJ8s%ias1fYG>(YYwdko$%Kx5#IaTyd79w6@V@Tz9{|QsvW>YE1>@;68LBuv$ogP2 zNL1gRG{5)_bUw~AjVI?h>uqaHqiyBJY!ql=+Y_9L6lF%zI;w(-Rymq_1S%!x8&nnQ zKSa=E0^;4uez@WLqDW@iCnXrFf@fpYo01oG+PwPTWgFxw$eU|E?@9&5eQZUlm+m## zzN;}e;Z-ZJy8GcaE!1f<@MZTrGgydZ;&i%H3Xz^+!cI?g!}c?g0*IGxDUW7NOo}yH z0cia7K$c1pN%(lEQi^>$TR>tdwL&Jtu>*fs@50xK_xY|Oh{oq>2v)_+v4y_5eZi3G zr%X%YR4VY2mnc(7bgE3R;00(~0H_DiRaL`$~SK6}ez%)Hv1Lv>q}9T^fhH z1)B(h9s75@qZA?)n!ba98`t;R9<4?C=h%r#D@KwqZxu<_i%N%=IsM9kcTo=t{aL`>--Eb$gPyrn_R)NGx z(wtNhGv*!~%ach{e%6s+BZ=D{7Dt2pBHs$ajX&CRLnXawejW+I)rwq|tGtqMOb3w{ zL#9PuxP0}-I#SN2@<_JKC=_jHJe zG?sW$+g_=#F2?Y!=2YMBIkT~>)2YuNx1^@;&-5bqo!ZVcfhnYQeC3n(8k}|hYkAFn zT5||5o<&xAasJ_7ZIB4e8{!CY+c=L%I*!yRl`Hf2N!CTCqaCFBDb&1i4d1LPk?^;) z=#-Zd2Rjq_3e7-E9{yB@EbY|H&_R(|^VmAX_|(n7=Qurjp^nlL_Tq!r4fz+#Xehdg zSN`ojo~*}1)8~%9Q>3z?iar)d2}U`5Dk~skaT2gWK}duRPo*Y}ysqN-5n#)OGDQ(h zxwifMvmDrH;ojNh+#f%>(>S_qQa=aboG3w;PhED zrsB@V_x7oHasY+(@f_NV*w}PPxObh~J5X?a@(V(E(~|aRN4J9;bpd5#&jL7XAWi}x zC|W|mxA34eSQ5mYqh2%vig_*aAB{`gZ zJ6F{y7kDCcLwSB@N2uFX7zHMV}EhY^9hG`ka)kbPQ%8{s}D$N zd=q!0oJ5c1`pT$Nk)S3lz1gixlXNPwc~iT@2zLE12)bZsO+mU1DenL{T55<_nL2sI|Gx^oE@|VoNP}ExN+Qa}I!;#$&k>c0UgNL`H+@I;Pf;)Js0)54LoaM(m zHuzwkGlZY@?BlVEs)m);`^J54Yxt7&v(Jzhu0sHvj?H&a&j=h0h+ z5(bc#hcFYjSwL6p*b|n9ahK<%eI2ex36{c6n#Tao-F=BlZrGj4s}8FJ!CX@wN3nU0 zP>>i+NMZ%Yr})mZ+sBWmx%o1M`FO6Z+#`D1OpZq*y4!fv6>iLL$2Uu*IX5~l))osQ zlvND)E}v;(n=z3<*+Sg8snDgYgV`*fl+(b2q<}#d=AG}FJ zJKT@5+Q59tr=BH}=4m0_ZSlODaq)LUG9BKgLHztGKF;%w9Om*!J`~6-%bJ=A2gdfB z3ItPD)Sgi9Vl~hATgH8U7Kia;*KKzlN=tGKojIOj14v->j8si1zHqNCw_@M zaOPh+!wycUzc&7K)@Sw^P=4aMxnv-yveuQ};m!n;FhFsa2rt3v)X@aeMViY3FzfE&R!oWGcH%fa* z??F9}^R%l^L|7e`y<^V1Foi#Pd*$SD^tEL&-y+bA}s%r7ajZc?xtxjPM>~UpD zeQ-n)8b^E&H*-i|K6BTglP?F(R91bLuKB{Fk9?HM&{@7!=yy_+F&Nqf%XpRzJm@`L zQs<-84!i6rQ&*zg)9JaW&=VFNJtT|A;=B!XCg2eJ3UV`yq$5{Dxppfu?;S%SA>tx^ z(@tJd?DmYRfpeK~$pPbbU~pNbcUQZ^=8x|~?5fuKh665sW6#a9mNuj0L-HCi!TdO_ z#tUTdPU5*vyF{0iK*%UF0HzTu`tDB_sZI`*MGYptJN`=Ht5RhtxuhXn#9D%t%~oq- zQ-?~tLM&4DscP$f=zttowYr`z!eKQeMg3bYPfda1BDjP>EnFd+4{2Viyx}4iL+PIl z6sK#*KM`O-CNjc&+Pzk;RVu^ zXq{lLdYxvlIq^J1M9g~xCbjZXgMx#$gZ~)nt^)ozF zu6Rg^9rRfo9JdBd^an}N#atC8qUIl4iI}JKLn}8ZUg; ztj?kh^$-?jo&8*pJc)#8kJq%R!20aIyA40|0~H#Fwsk6CE!zgxVraZ<_@bSEPC=t%`Pk_X z05P8wH%b|$l*7pSg8m_-X5ASkx+kQ&3+V-{JX`e@U>XHXN;3NMA6M*LsJD)7#ColI zKgQ*B@|0wYBHyxFc7!vuIh=#4W^abk!7Fj;OTol)IK|I5yL)Ym2d&|Ll6K~z*jhu1 zlKf9l44Y6MXczGdm~z2%k4?}R7vGx9zmh7y)N7-7In0r|&DlsN4-i)6!N{UbyO$?z zH0sTh{ZRLsp!SyQ;n-n)rp;9USZ1<;Q%G3a)`|Db;k7aeTzri8tD`>%y8tKGFH9g)9 zwGTM>T{36;aVcp-xLA4>kqP|Wl=+Qzxps!KFsi4|8^{?&gZnQ^Fu2;{iY(c=Q>Q7% zBy_uF%iq^RLBbZf_|6THFc{2Ctg<(mrtK{_B^n&_MRiVGe_ps+c5IhLeZ1&fVG zF~ri)6YDv@^3U-#+@ve@#}~`CvHBi%Izgs6UQJXL-+Mc4N0%dXdu~&J>Tp-!{wyg# zwoDPiIQuevqghxqWo|3vMcKB86opsqX zu#obyi5Sx>W?ZM%l$WbE}2t zm9zA$4k~oq`*NG;S#B)iloH#ptAStNQx&{Bk`GP%DQ7aLC^~%)?!_}xI$pW7#X?lN zd)14zk&b7$15;Q-n;fot7>(%2vs@zqGaR+|&3hiv;UGvL&1go8vX1Oq8q5PCrTYa? zj*%u7JX#yA4A&Vh>>?b^-gNd7hH6K+-FTYAWM_?s%U!ptucG1@Ky)MyOa2=52YvDJ zU7I|zug%RL06zEC9mc3~X9QV>#xFZLqsm-4hC-{Fr#ZxMgb_jkhy5E;ScvOlq?HUN z>xmB<<>PXvoBG-quRlYs2F4E|r0vfP5)G%K?`8@JS~`rHE_X(t0!&~@=Q-@~^+wid zZz{PGIz&$jq23c@*0&3okUGLP6R0I)?DsXzbPn2XNvjj=elE6DSo}e(TUoUvYyciA z8cBT91?kqb`ZN5Ux=W}8`1V;CISqMHm4reh+ES5qQz%dBtd!8qdFyg*wftv(ie)nw zy6CA5lw)4`#kod7bxQSWtjnX5u_UnAGk7S+Jp5D2Okh!@LOcaw6+?FQ&9r<~6y36l zn25(>ksJ?)dk^k72bYilQDKtbcM^&MThyMsKL7-Ul45+EKPIH{JRTw}p| zmguQtrO3M)kRwL?Q7`51V?~47)ZIrf3{%X*zc7S+`-QlGwZcz87rW z`;O7qGnznyxM^l^iYq;gMlTXF%CD1Wn?oF5SkrOY9hTWF(Px{hdU|DFQVQKe-!P{~ zgO{k;U(rNkd7=4+<^K%mu4LXm%LZd1aXMRnI#cZT48f>XwUe-VZ5>=j0sP>(&eSSVZcnB=Xf_5vDSI0n*m2eH5jjy=blL~#-?4{o$s3LGkV!eMcS4%m(a+USW7A*lFVrz7O%HNWKm!g&-a|raQId9Im)^s99Ntf; zhj&&16cp)SZ=aPG58~E@J!XLf183{)l@h~7wsf_cq5#Fk%2uO}e8*fn?F`Qu(txly zuzAA1kxnvs-j$9vkmQwLyzM{NE^Bj}*sl3DBQ`ax znOJ0oZf@;K5`r&|)P^%R+P&|1Do}QvHtjF7(`i&h2R4{?0_aPoTNWmPQ=Y!cjwCOd zlU(O_Pu<^J4-t326n;kQ{3zFFmN;p2-kpjEM_J&3wl{})z6)qVcl_!1 zrm;I_px|2l_WPES4V!|VzxmE$eiAKW?&;1uD-jsFZ(*PXF%M1b(Rt?@)IjqLroHNT&yOFCX(ZOL%MXd4>=`y?Z0ge9dMl zSM0^C$>y`y1txEjX3S{RNy^U$HW zqN%uNV#e2~$e>T`9UDTqtuGBJ=jr)f2R4mIc$jA__j92!>eSdo4e9&xau|G}pS4Pd zsmqoL=`-@&xgAWm)b@Yo*fK_z0CT9(b;NKSKrt(HgUQ9A4n! zev$JT=W)zEYjv;j`&pr~ypwt77hvKEzEOs!Kf8>JMF>%=e!(A9;&k#@;`U0GUS%oo z-mJ&X;%SBxd>T3U7S;E5n&Q-ZiOECl4u+Wr==#p@`{^q81&>nbA;l+nIHQivX_Nc^kFK){ ziYsc?_TYmCXK;c;a2?#;HMo0lcXxMpch>}WcL)+3f&_xQVEotPY=kpTNJ*~`L(8472aN%PMrK)KYEqssniBqo5u`0m&R&YbLA~uxy<0l za!WkDjEI;E#7DeeC7Sq>IjHTE{;*bc2^~1cHr^B5aZ}{+DtJueq(J`pcZv*qd6XG5pmF4 zNNGHTeZ}&2MXTEizPR)+%U+blB2dxEJdSoBc9n6_(+OL3v_6q>&|Alg8!IQ`x~07d z7qayFgCkQ-%^vEtI7}URT}$rVsTP3EB}$3)1F&Sy?2tA*WQ_!HDttNI$+2_bP5zDF$Un zM~6|@D|=$!3PDcoYX{+)nvh^9hDAQtP^ydvCFc5B z>$?1D8I^#dp6V@}XD$7j02gd+Jn`c(%z-%n@|)*YQem)=>ihK4>%(2ySVx&@$TdlG z9Rce4@kQSxWwb8d?s_du)eA*+I)h)hqJJMcp$RB`TQPgjjT+U zWBGU5U+Y&EsVqL_KY*x#-`I}}Nq(I~eqpX=Zy^J?gQkyzGO0u;rt<*TV-Z;YKjlfE zw4W}YC7fXI3IhY?lcX&S9xh1qdV$Qr@9tU__0`RN_4_&eVoRfv{{Y5g2a9PMRBrEw z5w*EReqy7JU&l$U9?QzNp)Lj6YUi-_X|tvA1^&bjzj!~3-?Df5D;344iS_`2-Ka8LzB^tp z%6~Rr*|@k()!Oij^KmMpx;Yg>=w7a0mL-Ff$icfQ-8J$B?yE9)_t7!T9W(6xKh&MvK6Wg@<+wy2u$A9k z4CiSP4J{Y4<*_m&%Cs{Tr(Pg^NR9#ri_%SPsKe!#7mj66p&9iV7IMc7OB`&9*QSq0 zZOi>#wlk^Jen%>W%QTzm+bJELOF}fdfdy>cy(6JrTpPS)dHfyn-)vytnNqe}rTC2H zh!`VWe?DHh&1}eRg||NLX6czuD@=#dt4`ORLxGO3TwL{1;#fG?_UKSi#8Y*H7pGVe z_pUOCXeVc7oJ^MxDcPi@p`unDI&01JxQD+Z-}B&QoTs8RB_zLPqtvwWBhB9E&*N%F zxX<{bMRP+#>3lpLY{Xk99!F|i<>%yfgH2C0o!s=LI(?oZZi#$J>we$-o#LRdvh{tb zQb@a>a&y%O{qI;0>&PX|FJ3r2n1#i=T86!V_+?zP+ox!l7yoaF2l$D1?vXj!dxtmf-M z=i59>)JUbR?sSoRz10(_PJiE;5q$8^rW8 ztC{Iu0NzJ=&)BipBi_yQhFn1eAZAQ*S12duY`)HYn*B2Z|FJM2WIvVZMoHJ(zmY{o z%bB?3mc}Lp#o@)hTs6Y&{dhI;V=g-|>@NT6!HN!l*w4ltaQneAGR`gfXmy1%fdiY? zpP;u?`0Bed;=cY=3SDemyvNG{!hwS()eX4n*h5=Ze`XgwK zQoqC5b7$R{;u(KA6e^$AW1iQ;>;GPv&(SxaBw3JnDLQ^9&~x&|yCC}o?{^39uhR+k zj1NIBl|0LT0HF;Cm+gn}(7{x&@#}lQH;n*t?!Rd`Xcz?8|CNSoxg2Gb8qd5do>CwW3>aN&56g)G*YD&o`wqmfGxJiAJ{rl-VsKQKan|Gm9 zV-srDV0p#?G8XwA&7MQXgYaV|%4~-eSytE}DTw%Z>ob%`Dh1T-Mie@hCa~C$KmZ>x7NtG z;$Yyv<;}q=KDJ5YB9zx!`%RrBEo!MrqPz%3NQ}4U_*t0{Rwj>w7anez`yMHry;04R zixYyALNrOOUfHDRvSE$Vz4N3McAKTy?2f@-Ufl1{BDsg_*yXnz3At6h%CVEd}sL?&sPl$`G8 zvgx6R4@tAiV5d|m>OQ`)DJ~yH=yI|KwVBr3s;Ic5zctB9td=Q!5tUZBXFgz;c2M4; z0?@nR!T{oOq$^Sq@{RmI(?RC;<(H|-8JKxSmH&unyXCz+6ep4`?x?LM?n>>#zz30O zFo@5`60pFPf@Fo$2rtA~*gFjhQxk{IFr%eSS73Ol!cZts)67(D`BJ4z7d#^VmOhsh znN)~#$KK#}m)y%L(PTkf+A~FzRYW5Kd!oOmuj}~C4=2^`It@+R*osVA%?EXSIwBkI zVGd0z%rPNxFNTrk{_jB*b%ZC(RBwB%ag^lxo)Ob6l`2rr8q#l(1B@bj!g>ikTh?C*1D#xM z2#{e?@6G>+?w0A<&@3V^ntxFxi#u0$;wMF-Om@B0PTjI!ki}H#skPx&t^T@K;LM}rG~p)In5V*9G;Oe9%MbAckrY0c)byKXqAS&H=tX&0iw3b_bhkZK7jC5- z+2p6{45qUWb=z^fF3x}n1h7h}%tE~P4Xt$YB*Umn=-)Y66!93CYd35CAtB5N zMNlUErtz&33>wwNRW5Z(id?X>f2HQBb?9Nig=A=sy?xdn4r4mD@s+g5Kh32qy0#vr zPCn$7iD7}U9@{i2Lr6l^Yms|jo@m0`nTHq4a7X^`R1l=C-g12`jw7x$3m2>E@j`^SEtF9VfiZn->16+qfRWb3$p5=v=_$M2C4*V6)m{CoT zjr@NspJP53KGYz_dt9GN0FBulQhOLbxvZ6iv*wsymaF3yEnvJCz8FUQjV0#D;-j0* zs?A;y`{P@WAb8is!w44Cr&BXyzZEF>VI9@_61|?=*NSlWT23@^_rAO!87kEC$HKXA zpCrJonM?d~7TZAKcsVtQGQawqBk}URkdpt>ZwmNoAIraJ{D}~~GBqY-2L1uQ5>;B6YBddBYM1JnS{kp;AsMG< zXz)=*5#O!tm z?3uTYv$mHdVg?1RTpRU?x%W0b_H0lVI@su>rL~H}SGY}L zFxUzC@#C=?Cu8ui!sbfSKI?_gJ(S0UHBB{m+enLyc{!~&2lv~f?F0ro&b~W*q89<2 z-|#AKsH(Zwo?L$Y0F}e!>NH^EF-=mTWRLqU*GDxg$EhzHu#S8zqGqb@(eUu;7ZYW; z{vB;G@a~CxeLVW>h{YtFwTZjG)8IB8>*#n3cWE;g>_Z5((&K>UtH>hv3GJh!u}x+t@vHs8)!5D$;D!B@>(xmD}=|!QtpXJ-Z4$(60VAoitK&jHUCNl{c=``u;?4<`i^EbHyDvy9&%(7g zMxPW#z)rITSZP4p{ic>LW}CS6?pGRS&)np^GZXEN!siEz!nh^0L4^W^aOgR!dDq-M zSI7aX`*w>}f%yXn)2fy+A%t;Cdt_Bff~1sF2^#uF9o|tJ>Ed5y#z;MUd!b3X$W`RXiT;bKg-;jV?*=N{5EK_C$sW9`1xyX zKr9c?sO44PyT(AdIz*7JyfDC=H}!C;TdhevGsLa+=qT(0e$#xlIX_=>EK+V!+;n>j zq~*v-VYq0!i03p~n+fFWMt&KHqJII-7zVv%cNQXZkI^uxCtw#L4MG3yY4lRnRBvN& zGUvN~f^cH(ovW|`VW_HacPQ$WAi{59UuXEvu98 zPvxwgBSvw6{`2U_t{mUDdEtwPnkA1;1}am+z3?sfsR=>+itCAM)rcFAr>r!YiTU8R zPD2d^ z4*VEXZ9Z5_RBCnCY{{%M80h*H|FB+fgf7y=TQ_IHo|bhOzK@pP^{$ikQd10#$wG7H zR-##J1^-r5IuXUEmtCUGifi7i!_G%u9FNmN3_x?US=?`adfAi}$$1^PQu~76%(^(m zcjhb&sab0Zm&*Hn<}Q?DJVUjLNv{)6uwVLW?46!QUW#sfo;oz|$k_~8VH|Y_gIhmP z1q9E1Wuds3|sd$ z$M%GvEKYGqx+a-QhfV+en9r3sAVsC)q7V3zrsrHC6Cx?9ZHeR1%!pRq;w=F!1RR|E z`Yc9}nBsB)fGeNPp2giv-@t`Rx*cGgYv_8WCg`-yXyd^Ap4IHQW?9xJ!;W%VYqs{T zg5{FJwSysGeWqWcEe(L^^KV&Yw%7!9E0g=LP=rzaVYKS3I;*8vql?%BRrVjq@6u~$ zRe=|0dZ<)qKcd*^Wbd8#&RAyjm8Vr{ih+X_5h=oT*qdhWJ8L|w?}I6hZqfyxNL+h< zNGCGs<^oN>;AC;)5Og1_)Xcj5uRo>~z3l{qtTv-KbEMV&=-X25Xru0VGMUBX=b|#t zH_Ogq%BQA>WymvK?`26a`x1+th02jB@pivN)NLJQ6Uw;{O_q99A2d-IN~k(V zS-Q@Mw29ANRFS1k;$XV=gRts&X(D4%{npl_$`{cTP0M_Knolyc?d2@*2du_G6StMY z(N1FpRn5zNBRc9dM0~=7G!_)xoCuNLlM1O3)|?}>AIBEO!MjS|#U1l=kg&;e-8|0M zO=`>a!?1OXon1}>G8fM4oZ_9v2#=Jz+LVUkXz4dx+U{B2q44N#r<7-YIeZYG%#jqh zrer?3mS&Gs=ny(le!Qy}r&K?GyDkhezwoT7Br{L;iX$3!bv)i^_Tz7Fb5eCxoz+S_ z^1qL>;8kzo@QoXr+wsnY2nIGcbSzl?5ui?sEMPurE)5FL)Kuaq+(+*hU7Y<-x?RqG zB5e|+C4l}-7uB>^aJ_%I+924Gwxs0OFw)5A*dvmpv316yJ9dkEt%zQr_Ms*rZVmN> z4?iuLD5%%*5>j;ww7uM!f<@I6n)X~qT<^%BXOWj;!s0h&I8jL*&gG%%{98Fl?Ju{p z0Fnvxoj1}AbT1bDz6x5yaNt_*t3Yq+W9C!KSQJraeW8{7ncbQ=qBYQ!Ae4~ZiF6$3 z=cm>sRsA@o@O$!02VeJSkT7fRpO$=7{m}M+{%l``S>YkG&4Lv!QQkg%I!TS08V2re z`uhalQ~2N;+*%eYJY@6X#aQhaQ@kHOPAzJ8DO8lEVq7wXK}hC7_sZ-wEN^V9X-*I1 z@Qg%DsBAlyWros(Mqcs@z+bH#gUOLwzh`>~%Gcwyn)c+=19mfnwR}F*9dXseB9)sa zLRvMst*bF&GI)78@zVLcz9%8U4^13Ak0av5)(h_K>zFrH@Fw6n#>_Baa!0D@%O1SF zj^>(OwrRBxOkn4av0iwS-EhXR`^_A>7m*9ia9j3;iPLugge9*PATi&snER>ZCmFq|xaCm{8F*%Rd<%;`Sb@ROw1 z4U;9SvH`)pWgy?~C`yA7rq+wVs_9LynO(AeFmYCv;`mFbb2DTU(tCp6ev^c=Zu!WC z8=fj!v|w@lgw9VXO6svw!;fWWFN^tGF7Dvg%PYwdg==DI_WlnrM1vTDa4`L}O3>a} zkbOpCS%!q?vcqFJcW<#k(s2Vr-0-s$MMrev%wPuLQ@Fb1hHc7ao58^46hQ=H!c8MN zm+5wB4&=_LBh&dBq~RqdmC!h9&?<7(i$xcyPK=Y2WdvIM;4RYUl}FC7Z2JE^AD0mC zvBwr$#+v_FRKacvYuCD}JWY3WYB64Jy&ztO0-)|($GA3Ho9P<6M%~)+@vJ2=@bipdXpu4lA(vxaur zl;gHiLu!#5V$x%pZKHI|3@@17>`4#2W9SWc(1;EyrshOr6>g=#lFs~qFV+2G@=8O} zx^)N7&_-YO50I!i)W77?^0y)<{MTFsxKxr6 z1MC==hnCR5u;c_(WD87_(mbmk9cw|zo&940Qt#!lhSiS*zA-`Z!-1weu z_*Z)y6>~dArfD;aY?AtpIr`?O6=g7-B46A};$0&8N@Y?)3ucOAkFDX#!0-Gj;o(A1 zY420-S5&+D;(Iz_w0FF0?XqUooJ*D7XAk`nmNv5H(O4e4;ngOWnESQK*|5WD~q!-_FLl$wPd`1ywr= zzsedl7sqNQfBSnoO|>_9*nbbZOE#PeK0q2O79wER8%f73KkgA1|vsmnAv*Xnk?kltteg`}BBJrv!gd4v-vAoLNy>we;nM3F-WIo4f@P6?Jp-NWEQHgY&n?F36)Kp#l$$9T-iA={F@ zPa_y`B> zO%n$4;2|Yt@hoWHp9Dcvy~oU5H6m!)e_xKo`(x?3080cW0I+1Y9^K~zpW&Z()bN%M zNr(1NHIdoUlvdQGO<^ePD*E&;s@7^PYfZl%DAm4s;|~ieW$u;ACVA`~CrOfp7~iX! z?8tKZ!zV;I9WLThh(NIeoFAYq3B3u*_uV>XO!V;D8L)V_o1$o^m-J@5MBX0&&b|+d zQ^H=8d-!j*qoE?~eL_9~&!L%^cC{F&kAHNBItGMDhVhMxirb55?^K-I{heZI`;CT9 zpB8g+S8{DY5-6xl4Jvd?Ya+IjPHi?t-5_;IPWUz(t?%ANwpHOItp0)uChWgc2ak%u z>!-I*astEKUN}Ye^=Wi;aNzujR&Pq9h#BorGn+RVR?uEhUmPsz9Cuu{!*f(sfwHoC zbYPNs2<#la`;gRU?m=_B5CK zmmAA5yb@wa%L<6ld{NHeMcwi3lh&dGYU$2&+0{5rY>={6+(fd)vQ~@_Yu|-AWBQJ@ zA>-e%fmJt6aAhTBxsGPv{ zAR>zECzM8cuhZK}j&63)ZXCBnoCP^WwVrl_@z5&RsldlzonuCWydf_pw<_FGsFV<| zPVNXruuk~Cx9#h@1Ti2;X!m4&7~!=fA}1~kxbRv^?R@8fOz@^c3uuU z%JMoF(yhzbe}1PKyf?$cp#~0L_swAWNs@;Oo`&wO2h`tn8>4UQS-2^#ZGJ8OrMKC@ zs&7MpkGky#Ku)h z+1v14`i-muDRtI0HF(e2s{ibYjn1LpIOJ4wek3fQ?_OzijAlP`XahCf{7YW7 zULYvWC$)zpO88|OW8M)xVboX(dG^it4Koz}xi~-If}pvu{MHo|_f?t&F!4Tk3>!;(gCCILpJ9e#)*Y_)`a=b)?j_G07*ZEZ4Q5@#JLSw0u4wD%rp+VJK-51Z48Nn%jWr#a;Xa5(9Mo#=%oxwz&x1i z=k9Z@L8-!-oVR~uzVf4g_mkdP0PC@$@I5U7uAA>z#3ca5F!J@S8a#zPy!jE7H3k%X znQQy(Af42AJsJoQ_V4mh0XFu$o7B1S^}f!N1-|dfrFtZ21&JX@KNmzp<2x8e)}nZj zc9n&i8?Bya-g>l>V4+ss{R2RD#IJfUuPl{nNUDslZIw{M{qMQ{?K+U0j>3)@YSL$h znbICQ-RU17C|Z0gR?xo^7Qm$m@*&qt^A?%1gkb_Hw#6qM8*1=NME4u<|K8cw?x9Qu z-2Qrmh$SZ~?_yV(3XYG;l)uCSMOq#>FAquBF8OuA;l ze*j>a=ywA41hh0D*A|)(>Ge2N@Xo>SMv@k$Os(v(z1}U>Q*oh%pZ@@8#px8{6U>WS zR)|4D2$I@As!DD4Qux-|j`Q%tT|C}(KX_mVlY4Dz9i%)_hWXhK${2=Qxb`5-6dv^w zHIOUEpS6q#$g#BD+)(%&uz_rOkn7inAq)r{TA&cxFFUy&#dAUEw~WL8BxwkEy?`)P zpu9QMZdxww?{`MKLWk(Bw1~$6lp$CAflGE11fwh>lt2wn|deKKyA73{$o~b^Z|zx z@$Hm|I6=2f+=_nySIu1PRie{3*;xfdf4o<^C85Z6OeOYzfJ@jY;p~_pdGkN$5GJdF z^vT5(p0fzV`u!6}2Z0>pOTh4Gj((|#`TC>0JET&i(;1r^(1!8!*@pHsx(Q~db@_>; zPhEuea5=@iySj9Zg7v_HX47M}C^=NulLdtMWdtI=}w{mfGd z=4^$WvdF{EIL=tfe}xj7bGBrHfBj`JQ-zfR(uZ7st7&3p=2N+~81)C%(p_u|z%%~? zune(chdXAk<n~qa`XC`Yp7JX^l#oW6t9@Lk_1n8CnTBbL(MnkQpL@xM-Le z-%h2$Us+S0MI~7TyK@DoOhH2!y#^y|uHGe9@XtE;l)bDNNq((7(Cj6Z)x zo$zo+-<~8H%^gr78VhEDUx_VcW#}(GilW%x+?2%Ea&+RnY<7vgtN1ovUH7epl3}^d zSDOb1@VrDx-j4vQ6tqCE%`z<5zc0AmV)t@J?WBnJ@?C_Yyvp(kIdUybuH<0bc`%b5 z5QXnF9zg7C1#IcQ@tlDu?IhGJu~rxp71MTl8C`tUY1JEaF#|WL#i-y%JXee`d~og} zd}>emP+V^Rk|V3{yCFeu_y&M2)p6p}Nh&%n;0Qsu!K7BCnW3Jr*l)vA`c6rCe!ExI z<_bBYRBeCcoSd_rS8*`d$KNrgbiZDzN`xhUqRk&clJ^Rr)1vqu#pJUR2u?GmaaR5U z_c{7Vt1hX|BzY^~ScmCL?~dQenzR!#Dd`hgeNiLHDY13zCNS%CF>CH7>xiAIAR4ia z4MR+;gLgc})mOD|^HGAqLGb70%lHJU>3NP4WU?Tp!ZJd~Ev9z|L+l@bc||(^@YJRy zB3K2sX6jWLglGGPEpNC$4ZG5Xdbx^if!3!{L?E?=CAl`wz(1*{WKPA+Zw-lHt$bE{ z^2Q;i0z$1bu%icm!#@nGNofqL@tAqjn%4UE0>P+Eho^J*1w-DZZhomGN63h$vi)?r z52WgS&vi9U_Ry!JoriX;V_IZsY1(;azgQd>vHF( zOPb{*nn8H-bLQ2x8I<^LR~IXtpI4nvr=^ak6RB(g4Yf$TC_hY2JAUxpHOy!))OHD) zp7&LiL4^e7*}W1pGkI3wqOSo&q6_7LWMq1Ic-!->`V*1ujosz6XksW{C%P|x=`$+& z2%k;bwI@}gzT-L5OP}T?0mD>IUq&D_ngUL7s**4dtz#fsB|(T4QDFljba*85Z+=J9 z`F;?9!#}h+2N2(1X|Two#;;RQ$nKhHP`ld-a{UG;7J|9~ER*Vvwo_d!ZdX*a;Zq8P zuh$sIID>e=G^CjB9Mt2Vy8HphCR@B&`c52(f6<8c=V?et_JNor3R!qP^xJD}lW0bX zp!?e%^ulov4iBx)0=|k>HCA`Ao;k*4j<7Zg2k^VXW89zwrpeS*5MsvCLN}q-XCyD| z?rJH+`~>`Z$9IAiW~96LsekqNFHz_~nM=UlAhj4zj4I9_sW}F=Q2jcq+3l2yh#`bj zY$+KqKwL`ZT?Z;i+-?-Zoq&+XT1E=*`GCGqU*Rh2?Qsf5_7ll2KhWkNn0vT#vS1&^ z?^zF8LS@jxBn3j(5T(%gATKYJh3K*Y(UFfoodZk86Ax~=>@$KxM_XGtSQE=L5 zDz|&)k~$0rh!0P2n5Ig7p(oblKGf^FgdB6+hFu~>oUD~~&K%Bm=D;bAxF|uPoglF* z6K1m<+)5(}=Gyjj2CzU)RNh3d6{#V>K-0^|X1+lzHl$4ZLs|S|FM1!)&_3C}C*P=? z8TziN*78gwdjN$XsMDV2Zw$h_=EB@ z=)5yQrI7v_TXk!sify`#O8ub5Jsu&_KaiZ5K~OD7F_8&NAwL&M3ZloI{w#VS{zY4H zuV0kDfUGL+#uZT^zSMJU>fqV%ASVS!8RGipt%y2o)-0G-ml{7YcuG`_9LzU33ybSy5SfNd^(Ud0~ z7|dPcB0p!SPfJwF?_7j(Qp-bkzm|v_bs(Vyl*?5u(86h%Kkb*zE1{UTw0!mV@~hDR z!H&8u(L)2+BZgnRu4SVt9h!t!{>^-@tKd(eEk|_JUd+`g4?4NjSz@ z1{xz78mfhi)Or%RgR}KFb(`o+9F`7NR0>FABv7m{dg$bV!QuM9GC}s>_(+QJB*|e8 za8v|G$R6yIm+Eifq|bCwR$u3LP*m;Fhu{^u5FUPmZZbIak~3AJ8KkMjZIxC4BptES z?s!iD^5qrv&^6Zs5r;>_;kYO=@=ohyFHK)5v=PaZD`jwqf%EkV^iWUv#hE)eGZMHANc7XeFki94 zV#O5#m7w=fsiB2Xo)T;l;^DVzcJURhM8ydB*t|*O5rq1Ud`b0rHAqf&_J%BNq^+xo z_xVTw6`a^CVElY1>9J7Z30|LI#mDihNLS53Tx9Ned|_?L8?pspU~^IN!$BtPOb>Yn zcnsm!FwA()3zE7l#^l8ZI5Wf@6zx|Rj%BxJLuiwwlWU}&bwkaC$%F_)=np!Q;c(wK zslsF+sb~CI|>9*b(jmK8G2hR~E-1jyMheGME>l8`P0exTAUC zhe1j5+oL^;&*yT$AFN88iY^6*2O3pwT9~oG!1GwDkU<9)D?j{+p@b&mMGSVUHX zMu`Tnic2XK{WxT0WutM633wgpnPj0#vVRhOB+@!lAm+*|m^f|P0UHL*y=k_-@j_3W zHeFq{Vh{|$oMLh9=~4gc5LY23EtUYGhaLe3TQf9_e&-jiM7sx<3S*8)vZev?Bk616 zYLW+FnIa_KOU2|=nhOtZ*8gAop2*QZ2i zC7Dr1ss}{SaD|UpaA4}|qC#BQ7OWc4c#LSXmFj*>4h6Ovm62xPs3yK#^*rBC@bn0o}Mn2(Vf#(+x+5GnbKiaG5L6fhYNrzXZoodk#6#=Gi2sUE$r2 z+XKd(J$uIa`+K*yW+^kPd8b4{glm_+!!?}976jgi13u#Vy~+t@p5#kw0Q0I+Jby2$ zv!)h0>DODhU8S4;4^K|eWF>!L$kwsda+r+UenHA#eL-O;d1m6sE*S|8ay`F2dAuGa_?9h85f!C z_^{SUg_FI71Wd_C7Qi)uoPQkmgp-2#9hHItXDZ_)oD3ON4Dd_Ak%U}g5-2BcW$M&F zfudbOi5!gU5m_REJIap5gY`2?X9WGLSqdN%i9KR6Fz7FP3)4G4xix(CIl&T()-G)| zii}edM>1JVHg-lhemb}Wi#RfB(Ju-oSo*IzT=pDgH>?d5bXj8%2EaEBhzZrQ-091H zIXV*KUUF0A`2JL;qe6Et#)Qs!KLiBY3 z0Ds0BqZAk6OFXf`v$_dAhJ*|tCig4(V^TgxpzOll07zU7pRk`}DY4)h)4+BjI;yFa z2Rg8Wyvib`4s=o0R#N0i&aD00-r(Po@Z*~62PpmC)p+yo~ z@#K``EfxDB`y9y)>-u#b!zft|mUS2GL8Hxn1xAZF$dS?Rl*bT;Prmg1{w;QSaeCbm z{WGg}%}Z@}ieTPTzu|F6;^X}2AU9X%Tveds1%wKhXP`Daf@WJ*5>5{LYGox-L+qIZV1hMLPKlIiRe;XY zfCv=`8%%S8_sLkS@YMiCDap;SX6oQxK(#8U#Ott#*+M(8S{9^6PW~k{HTpIkcJYLj z9Lb~s#T}tS9G^_NjLWR2jw%ox9fTV%F5cZ7zYx`CTdab$%ZQPC(ut!L5aijGj!|97 zvZ9f}oRQLKUa$$cE0Rnkpuri~I)h-e4ghcJ5t*l%8y>yv7akW73npn-b zhK}JAksy+C9&@sD95I(K!z`?22UuW8F|Syv2-LR znscS46k)*=w%sgJXz{scjlb0w3i>QZ{f<3Xc)vK!mzYo#IB@1hEJN}=mVk7nFpcDF3>PWs_M>L zJYR`BgTtz_?KqtEqBNlEes3R~ub@_4N==0YnJu4%?#C$V`QUG>z zG0iAWQV1@3xL`s`pu1%75=c`XDWRNG1%sakdb4nNYx)3Nc<{=p4T&0qEIoDmDFM|7y9yq_#>?^lt> z&ikJa?-L8zVZ9`VT;n?C@>V|=tJE;x1CCNae;$$ouA58HmvR&Iqr?L?E)0xa6=a}*AlJnb1cLUcZ}YfyboPVu z;35$dg=iIo`SCCkkpxN+V_7KPF?cw12HZ6+9!YENflzYQDqScQ7<0zlNt#d1_2|k& zC}!-jJlgSE^8I5J3y?~+Ptbs|F30Hjf)lP>476+U@rk8`yq9>tZME16SZDQV9fv@I zQ(^YuBNJ+cQJDZ=bP(?60syWAxVG}h_KxZ->&q5Mr;Hym6g`Geq#^mkGo^tDU0cK` z4y|)g6;apEO9spm2qj%?3H07Wmp>1bLV_o7(qr}oNkN4x7(B%u!1X%kJmq)u^eBk} zX(_n4Ont|h;$Jk@_{cJE0;ENL%8_6=4HTWS2l!(MPGJ@{L9cs|=qJ%Rz~U`q1;@aI zw~M5zhW77)2LF}`z(bu7<96-6!!QhYsJNSVn-Xc#7N?ZVs{|;x4nk1emPisp(v~1D$E>`rKw8%&66p` z4OP^(R+LY=oVOic*@~^lQ=C3mi_q^gJmI2(Ody{F(r+ zqHA`SjEB{0XK0rFx}ZW=24>?M>KYVg&6>bdqPnB%|H19&?coS_R24hkIJ}E7%=`(T zHxtT9Li$7geI%pM`YrK8)N#fN5fu}|#cp8t;O=J3GE#!|ium|%K94N0$k=IznzP=Q z*n+bV0CO<`Q%#5hvSovorm=pZ62nQl^J>;aWKJ2%%L3cd(vs1_AXQPD4zu+u2eHQ` zm3y+l@H?~H7AKZT&_ZDlMeVGiKx1G=O{1V~V^KgyqLs+NK6e-hh6$IOSFovFNTa7J z?{daqze@!pK*K@rekJ8cf+B{6t*RWC3^wxKOf4IuDE_?aun4D)gEpdUH0TNzIeI9D z#g7*jPm@CTN@@^M=&Xf}6Q2VH|Dt^GT#;QHrzbaI`9<9N%+>t=$U4t>Hoy4qCy_|R z3SzH_y$RY-BO$ihyVRbo8l|PEB=+8`RbtkvqO`QCv1e;kOSer?rL~pc-~WDc->=tw zJ-8m7N9T2&>wM4md_M0_G7e7pT-%NwGgNvCgkKOOoRhTa8&Zl>w1>Li5fTds2L4FT z&tqomTat$G)dds&dT1cJd5ivo#Onoy7Y5Led{Ck)y<6D*3j2XLU!EG13#j1Wiv z2@dh{uCIG)my)#yOSDs9@2y9vN|QWT&L|EYtF47T)o`!}0LKVCQ54y>U@nRYY~Uf7 z_)D;l-sl!m3HEKU^-PsS2ZwV;Re*vJh>CCTt|EF^`n}elcs)FDy@_h0X*MZ*qaKNe zI)*3!+|8#;_^Z=UzU(&cvqGKY_Sirv`%9V`F_!LCZKl$WALfnv>-d?XK*u8A$Ir!K z(4>oWD*?VU%jlOBe{@Yy8on2y;)w>a6lb_!ZvtOTK6BM{u1E+UHvxq$ zY>x?V>+q-14-rxoFcGdOC-ryWr(E$HLhmI*LA{t!?JD6h z=nJVS6jk?8|0(@f^WOP7SCqbLIksS(?@KvHQ?{UbL|muJl~?6k)&e#nvQJVNl)2YK z`GDAMy$%th^^xLmny;^+Xt9auA@B5b355X`#{OlViIk;GMkjU z6)oR8%lPeDK)lC~Kt5F{FS#GW*rp?gy-zSAO>0%nP*AiVLT{_}Bl2lw{g4WE=J$zz zHAr`UgcXe2e;2`p!b)fu5-Uu#mr|b3fF3zpsLh+#2$_P8C_cyK`{1DK7Md`#QXnds z@H_kJK{g(q(jT0*f_0k*JiRqw?s7rpj&+v+d0@>GLX1o%;|%@dg9fbF*bmR>$Xi#~ zaG0mD>L>#+@N;^Z>;C-PUlQ*-4t(E1jQyBWs=q6j67OHjtf7TA2NQrcIyZ~|35FAV z;o^0@KasF&Rr#0$#nBLv04qe1NjP0XjA^7O@TyT$S<4>26mM?89UK{+P$5g62OEC7 z^ny~1kl=W^rFXK3T(qlUR~D74a+7^2J{G{&L^DSNh^|vltglt2TDcCFD2!*4lKo!b z^$KoF{}xB5q+6VkyrXKL5n3w0L(IL{B2De~QcbGxjkSu(Ce89)G-MjvwjApLgh z=DWUoCgQ%bf1-hSO9Tf5zU~B<*v#&QB7B90%$A%Wi~$i_m4EnbZB{RJa!_W5Q|o@A z-5=8*T#=Rg?isU~w2*XBrDo0rBwG`ML?$__f*|9*gMX~lH>&jA7`Bg0(I6Xl7LxN{FS*q=YCI1el@LmGfNMQ}_{R>J_kIv+_I| z`p`006D|4Nqh5I-`z@{MVGg@ZnY)IDngtUxtch?(I9pA=F-fy>Fj>@UJf~AM7)Xis z=A*F5WSqvxBR@U #E-d9!0Bf@UEpq&Ve-TQ|jLextU&VV7E(>vicrcU~8%N5wf0HJsFChu-D>D(`49#=6^<6_U(<(3>~>4r?b2 zBFWLExFY(-du#zUFso7|z5s_~8k@~zc zXX{2|U*+%81>?1C{ouYbDmwBMkz@^`Yqs4yz0Vx)_KHJtB~ezKQPz#mTS)$E%)`YF6bzVg6-l) z-iD!*n#~D4SBg=xh7f{)0Zkn(lU6I(0|kv7_X_Ir`T@s7Y8CN`ysIe|*J*%bxzOA+ zNIX@=9?Eui<27Ng@*?5sA(MVOqT8ID9~UZ{brO$o_cfv&gN(BT_iHY!V+mV}*;5Lh z@sUG}Ohg5-qQgG(YIEJl`+KhzxoJ9JkK^L4-O~6N-5twAfA$cN3E{X-xaj5AU-e28 z{j80!E?83&zR!U(lt_&d?N^F6&47uJ*B#jZvms8XJ(75%^=oNt{Wm+9KAnS9xZDyQ#6GCex27G6|NbdgTQ^)p^!CoVhP-V ztt~q%%S*I{WOCXe|7}krQ;?9pTi71_u|u6m7~(xBm9T8=TMlgFRUDaFcv=B!WM~+4 zM=i_Lxnc+b>liQqK?6Lk&CBSh=WgBj%sIwM{{lWeGs=Xh6}sNNUit1r`cWrGo__w88BBLL9PhA=OroX;>vPBSOz zjxE02+C;^siHZn7Yt^Xnz%ELal@}fB7pg2D%bb4 zYX#z<)7ijQpZO4astOfDKVzF%#KjP&>jZi!RPbUeD%75@aoFA_oms(n1ax4zRNj{{ z%OfE_By+zte1$)rgAJv5bt`NNGc_U}y24dXpr;p$&?`Q#CE??3Et z{{Ckpqkd4rBhOD4OV9M7Z@@2{&V%wkc&uJY#i%^rRYz(`YHjPWoQLHKz+%C+XhPx6 zN_ENSWW`kH2G0OhfZ!dhRnJu(5WGU<#Fc(4QVTndnG6Ndb_yj~%#y@#ga4 zEn?k<@;60WdG=81hk_Tpu&m--A=Ff5Wqh1aSb;@Keym#)t&Fz*C%)vWkSp^9|0HPs z+S$bMDoU*sWX~>b%`K7C{mc_b&`~MsV;1_C*R#QWlf^+_sS2W8HT=Pxp3YaYFKkMn zw~h4$VkuLR%Oy-qGFg{L9WtM*dP)4!hjvAmx$BG)dotSF%Z=!szY&2-s0a_?rI?A` zzK_Pn1H6#Z7eXlzbvjpuHLvyWdRGF*`J=>))HTZRW+0TEpQO}AEQ=i!Bf+7ei@D3x z*Q?l2PFrEWm~Y;Pyk;b2GFnUY>-Q=K*^R+C(M}W~Pn5P5-X1f%zXobSZu6}zN$F3j7GmYhMfk@zXLNhS{<)`oQYgle~K^6W=Ib?sNnDH zPG$1teQ8%)Q96IZr@L&v)={@9G?c*g$toKd;x@;43OFsF+{rj%*jCu99tejhnBVSr z%~K|Rx|Cb1DPhIT9d7c@LSiQeh^-EwB9oY_WCkti`^V>M@Gp*I!eL^fK~`Gc}y zuVjC)ZXPo*6~MFD-H>r1DPEj+L98nmoRs=-HfvYd6`SBOUBFcWY(U0d{|%HukaYd)pH7k%jRt!Q zaolzk3y(-Ks4}b*>6D5U245Ph`nd>iyIt=OyUHV(I%u_vk#LIKy`|sbR%^5QYNQ)o zsPGN9;ffbZF_*n@wF*-imkcR+Gg=%Au0o3qQmk+I7xm~_gSDj?8ehn8PA;&d7`hH9;B3+RR zqW8+12HsjVe_$wbao8|e_}L5f5q&Ex9rrQm2p_>$ZEGSmy;~lYFU?O8gW695z8dmp zyp#H7uJ-98tv6ZMR5DPz_o2oFAEqM_IZ}~e(fcE)V6X8C!(7j=1e1q$gp>gbpb%KQHyAYpq5C?7L`&&}JR44%oGyv&#|DId>ii;gxX2C{ zhj33I0Eg|NAeE7PqvTo@OG<9(enjK{YepX}Dby>fqHLKAV$e^T`s}r9BY475(*bk5%>Jcp+&3S1}$nSvL=OzziTy zO=qRbwI0kY?Yjm5U&?L?B_Lf?f;(lkU?2HR%J(!`r#?YQ((9e-15eFcNFASej37XQl6F z8D1={OJ&etq&4l!$lmY%mK6d&yVYjx^LkVJt4DcRG1k+rMDOT>g#YQ^VPhQ!AhrD%q64Z30QL(=G(wI}xXcB`mUu z9o)#Em_vQRYR*AKp`OkT>wBmJbto~**BN!mcka2%2j;MrSds_5k}7nHF<2L??U%NE zzi3>7FxUYT8|QTR^{R9XuMO~MqpAcLtB^njAdc>dBZGvp9>MND=DO z9gE_|7=Jq^;5BreA2(v`miSZ!t!Zm`tcws|UVVVUkRu=P`fdt+e zSaFIK4H??Jle;L?t)+J^{g7x*-XJ@m^lY+Mm7lX$L5jB!A64h;jdb1f z`klPa(>ZN96n@dQ@GY#oCFbO~8L=q~ntJudHa`R425sw}{UqL)yWQln{J1B$kD1*! zLU3|;NcjPSE{K}1D@$tu!olOHw!H6bCcYHSoF%_+ofE;?Nroj3aZb@~Lrm69j&-`N z3T+D;j>R=0LttBVd-`7>0Hve>mNA2>u%D+>3Q&HqxOr~R*#^gL!+^eQPKF>smwp@Fk zWafB|Rb#@`O!jK`XLw@Ry^-l7e~lS+?5zI-Bt4?3iquS-%rv6MTF3d^2r8ymuxj!5 zoUC>0FhRw$R0LIQ>`NLZ$+1z!yXf0Q(>8I^30|T5l?rICyD=Wmramc3W#di0)6c61 zc_sU?d-e~&AKIzE9aZ!Xl~QWbiGBLTBGLBI^EYFo=<%IISO8*~xaMU44FN)6(B{7* zm)9iBXEGH2hqv7geG>b@{nG|_G5C#)=kK-Ik_t`XO4?_Np0_8bza(5jZiL^0(=1C88alKfmZ z=ckA|F&8u>z71vY5%znM_tp=d3KRR!{LeC&i&3W2cRU2T!UyaZ6$us5pJ+=z zrkgXhjNVqT_*(0&wd+ft zyzOit`>P*<5jZ3x05~t}U+if-;7^ZfUK@^v=0SPLl4i?%EM=wm^|rmJ*2yIwe=B!4 zHg~MP@SA3~mv=%6d!Vd~SJB&~e{{1oyL~7)ZSui?fDjqYB!U?q zlczC9x?hSLl28$%@x5Gv%LSF~?=Vacq>a3J-thf;r=bU}=g07_7nW+B;V^oP>XdZzkWa-T2E2RM!!A-528av&}Ocdu`Rf>pVlN~D?_86mEa@Cfj2_VN;f7gyub zBprd%Cc?-o|2|P`jHYc>Q+7E!Qzs?2_e}7}bPi5sj|T1T3_6xm!3w`~{P2@?<^+^c z(rU9cJMN#M3xb%^_CUe&xMFDvOPi#gdLdgkE)bPr!M7X`Zkb+B;YM#USXX?+(=qCK zX>(f_inQ$%1I(4pDt*4I43~tu~OdSk*Z0B?C$!`mYysRh7cvznxH;5kDtJ3GmPV=h;=6WY zr?BL+od5F+-itN4C*|X~nKIsx^r%)c(rshy>J^n}o7&^cJ%cOd!Jd6Mvm2Xx#$A!9 zr{Z?SZ?8RkbHPj1Dew+I&^B%OrXyF`rA!WCjM~*R31PZ!OG&r&ZP~?xZVHO2-)Do^<#3{aKXm; zb=3JE5MC5P&=WU4JKzH-UoMg(4R5tPY+XuJ!ozX-kSUL{xeA?X?a=pUyGxl^5?WGd z&9zYZR^asgf4+QWwah~tG{gQ^G_DHIWt3H#mD`7NgMq_8GlemvnGp+=@ncfhh9vsS z^R()o`PEjLBO5vxI~`V{LOV_-7?G|T=9dZcEzYC?*{{@G)wwFt|C%ekt|*@;ofn4< zF}+{`YuK58f)28psuSOs&fBO; zx6wld5m?1Uv(8?0z+b1hPbpYq;@vFz(E&1M<`+fl)V>p%IYiBbh3(S&EU+33?wMh7 ze75B#TOm45FA2#h58P^0l$afvcL|BF;d&~{x%EU~UO9b;$soysUwFtQgiZ$8z@0-X zK)A6iU0ju{NE}}t&8+A2VBioUy5bgF`qa&&7B;RkMuT~VL;K&1jnwpjYCEUBZ^W;$ z-u5Sh6LbTuveHGK|IS78)<@&>ku2-K zN)n+E%Xo&X_8r4)5ohKwc^0f6{*f0G;}Ou@pH{JA@$u71Zk+x=f_I)nc{Xa>dz+Fu~paB(u`A!4LqEhvsJvpveVMsOVg%^R_;=7~eTN zSAWUfBI%Ch1k^4zUoTeJg6i4p>vXmy1Tu@@t;oAg4amoyhj&z0SPjdbM8;-`6j=Y3 zs`jV2o=yjJ{bm!p#Pnn{@7J&q(&yRUdtwlaCuiTN<`QHVTw zp*8xv91P~UocE%c^a3@@eP@WSnab1K%80%vg$>LnL|&t3u6iwL+MWi`@WF zB=Pz_aTz$p{~y3G-O3hz68ouAT3kSTN#U5F*?3|~n|6(h2}}NH*j%T+948YR79b%# zX(VRO2#H-fI!~M>N zsGmFm<=aI#R-KI|(P*;VvRcue{2b|y0w~l;Zf;4R#=tFY^8Fp#tSoPra?XVH9tLLp z>14o49XT`a&!zRv(XnOR1b|;>GID{33N9xox<0Eb?tk4*fT*$A9i0LCCY#p9J3Xkc z7W4^w5SN}I%u5TKN8eMwo^rVoJ&1O%bf)+BT2YM{A1usMG`N(TN#g@gg`mCeQY~%0 zBJyYA#H(%oG4)klkYED>*MZy$>8Iu~@s?NMl)>v@8__JPnGQC)Y)6<4C3=L8y`XPrzPday#vWtPULGl-1i?6nm?{J5a zkdp_U??jWr>o}5~ggQme>fxjpfIG=ALFY!L!dQ-5hm51!tAH@U@>O+96l1JgE;Kr@ zKtZu*8_~J%GCLHPRk=$&@t`8rz@0B?n8GV`EPZhcdaU-%&%XRr;y@}tekq|^xXKH6 zrF0v(rQTTDV`%)cqz7wKBA4_4n1qoxMg%R)^L2P7v^B%zV>(E)rIF7VBKO&{i@P3lvM&b(v z`=40?vZcpbGmj9pb76EOM6V&63=9NZS~rl<{xV!~tNrHUGy!)P&gu;a1CX^PK7IQl z&mHkVO>r(Ss4Ze`&&!#GIRDWv=1w9gDW}Ba;}b+(fdZ$Ijgfs$7z-@Z;(qv=Nr`9NDRGL$jzW}EPDm_T(+8@^N!YmjHDWo#XhwZ!q0_EmSm`*8yQTS zan;mptzY${)Qo>*zBbEc=E$A)EdI+IeB*IlO)Dvc2~2&9{l;m{(;Nh0NXmcSOg3fYJW|>c_Bzk+mNO zSwhstWpj8O)(v4LjJ;OuFQmPEU1Z=KEXpLkOETQs zxdpP+xY)=FW^H#F-}gbZ29xgNH{{{43-&TYr%A(iEAa-!paSh6&v8!b=S5H?3#8(LiIIrgDxEpLM|o$!tl1raH$u-$f5N8 zR*>+9NXo$lAOG4OmlBwpv44Hw4uA6f6}D%vBYoKN{q$WQKbra^6h2!TP?Bjb%C@O+ z{puG6MkxTimJc_>mMLX9q{w(@o-K&y#EzQSc>Ok zhWX8{?HUG_!dAQw!%(kY<1RHZp4+m|fSNIS=TChHZu*p@n_Dr*ttch_sbnLzzKH1q z^)`K;x{&7z0>NM)4mg5;%;I;tJKzhj@4PAN4z3Pv146k#Tb>FFkRKEd9GFYi#OZyY z{?m1g0t8hkS2C7ycKJl?O_NtNgPtc@dp6cHQ`ft*73tcehP7-vEQo5s~+igBaj1o1qN7vMoT0zMFuSDajcmN8#Oen9ZncD7T_Oi$z|;$ zzb_Gy_z>{iiLk9#Ep&4N6AR)s$@}#86uQve4k#b)1horXXyD6TLn8~HN{5&uJNLaHbiPTc*at-^&!+^M3rTdX zgkHlV6<2K(&b`3B)hx6I*q)g z{p2a_mqx*;d-*HWqYAZJ{a1D$U+*%2ih}h-55-|t&GbE%ZiP`$1g*p-zknUk4$3K_ ztPbz8QfU*$8agwJIj@(qS13NF>t#lK`MHIggidY+F=~@dyx#6^EbW7CXVI@aoc-vI zxpFqq0#k(j- z6XwnzdC3>R#Ks_3PF}=QrrLAM^j}089(vWrx8YgcjjI<5WwU>VR9?HvTtdzZoM2W< zatQN`RG64k`;NB8kH_FyIvMGKc){Dted0O@bnFb_rL2ON4%{>4vgc89%4hWfyh6p7 zhO-WZ-s_Uhy=AevaY%FWRgvoKbY0mqHq2BI-_x0{O6ZR1h;4d=D1HJkIvc1a_@{D85IlmW> z9UJjx#!$Aw{kOf^><4gFsFJ`Bhkrwdr!b*uzH~(eA6e6<+^pvEl=uDY?AGt6=3&C- z%~jH5CK&%G4fIhaixrE3T~9Z*a(q~3Emmcx`|W=K&(ci>-bAyVvqyJ_B_VB?q{wx? zmqiMHq|tX&ubdd3(Id=x-9HOhB?L%ft1BG<3f3ywCrt(%TgA#ZCBttZ$Rnk8(i?vO zw{j8YCfshe&jl*CWKUpV+k(~QsgFBM*3}FmMU#9N;dQ9b_Uy@(==1kc1K?J4y&mn) zAA)X^uIwa-T&@OjPVPU4Z92-x7fXc?w8gF=?nylbVCwe8m|Dl?5ACCN#V87uuzoul zVCxP>U-ijQlIN5VI^5Wg&1GkOi6t*+Vi~92&;%OaG&vHX-jlKud^WKsG>TAhj2Ki` z^zn&jU?Nzk$CczWso0<~75+u#G((;KzF;G;kv-Muk3;}2s~e7li|+UEJ_>>T(1oSU zfBbIT7@A+1)5G_49&KoDWZ~Rc4k_3L=1X{bfomcQ>9L$xkzsDV*oNHkH&I!Q!$q#v zjaDrY=53}$LSe(pTuU4vwqM{R_dMFe9*U6EJ&Jx)Y`SA8m6IyIaKG3w0dFTydwC@L za>>1ypB734Iw*KORgDACbRVpBq#6b(YS^H(lGE@+OK@&J@Fppcj%#=Z;@hs9LczAJje>C_*CYI zMx)P+BjM`8JheCv3;x(Q9ZruuC_tK->t8kg1JwI+D8TJH?0-K%#gS^@$cDAJtOKT4 zbu4uR?I|1d6J%j)sIEZ)ojP7eMdC;a?tATQNBfQ{52`JWD|lzuywBqZLr%FXvBO43#(Yt5@I3iRu~#i zLvy942QiAj9C(e+S1*8g= zxH18G3ZN6qRqq_T?1l{Cr2~08ej<4*_HXWis(fzy_Bp@EAAUbTK&~U}wM)ZAw9I*7 zTl26Fq!S2AJ?iVTd8F+f(*zwEj_XFP-(7zi-%gL151e_494Ih_lXS>lxw-)iRx4WK zKTR|y4pmL9@>c%u3%hyhq$r6_xiI4FbA{&TZ!7^Q6}6^IB-~sdF`P+6Rf9!FhJoH% zv0KF;v{Fdu!3(a=7`;`7_qY>k_frTk4n`w4p|d+UWMUZ(7s$<3h)0C^Ak|@}@ z%`f^cg@m8;9HELZ0u&34VZ1x)3o z?~~JHI?5k!?QKr(SYvq-p6Ot%*<}{OYo&A{cW}f$rD90u*CktRMN_rk{_h~#9W-*W z`B}XZIcm{mNi%6e4$;b9gkF?dP^Eo1(MBf8TlBPjuSh$m`S1C&e}Df21e_mV>}dZ1 zqW%MXiRq5{_2!4x!H?f%r-6qPXD?3I&cB@fe}f1^8{_}ZXSQKBVZchRWs@5jN!2jT z*ant;XS0e)KU%|0(X`?pvl~5NTZ^Z`39*@4EzS(2OFqjo37K{uvU>ssJU5YtJ1Z}g z>x%jZ`GP8|)PVRoZB6USop~wio-XFV!s4Y3np$$Rv^kSmC1yhBs~KxBv`pCev>@IU zPs{WU$rBG`;UXk-JaT;1k^%u`oOTIByh+ye1*t0739Da<6CbYzJtXMq?XG74Kz>Bz zpKhbIpKZg`1E#&R3sVX1v0=E}tJ}#$5*_@aZb{>&S62)(<||b#cxe8(*0L`56Pix% zU)3L?r?7i5ri=Tw=S{#ik%r_S4StGO5fcm?{R0y98Ux{_oiW^ravFc5L><42 zsbG-3{*7UymU1bakyJPCK-me!#086J&>z}x!vx2qi!QWLHUw1wx&Gjer=&diX!SXe zc}@b}d?jKsU;P{57;Z|rb!Nec!Xe)M{ug4Lv|DwY#3_U?QQWt|15mw`_ts3BWK(xK zavJHv2ol{z@}hB5ynWmu3^< z+*2$Q>TPhHS9h=`6jyD4ggFWrd+0_F9e@CS#b)ZK8ZDTf#Q}9HNAnaJESQ9936^yu zz4LG*sUFvFkqkRC{}8=sFcOp!ybF3O1U?MPXi2H?FHT zkB>|8BaJuZT(odxat6Nd-of!abI2ZF(m`~yBgrz;Ti_<#!ej2_%+Xy3HF?1#xqqR~ z<5v&nk$oY1ed(US({i1wXUS}Nrk}s)l({G<6`=_9WFuU66mG zrOF!$n<47|*n>id?M4_+)`T&d-d!nCPR1;>X92g#pFsIhnwk2D7v27xcjgY~148fh zBov(4L!yI6)N5F%^5x1+X6g!F_s|e;3mya1lbD61Z#fC$vExJO0O&FdDIMRyH zktK1nR3~4h$;9M{usY2DdGbSkax8~23@EBxvl#qX_OlXv)Zt38%keSBV@t@7i+wBIfoQb8jl>b;8+2S_Wfy_0p*Pd=9dC5oIh z7BCUZCC|?J>2$9tU^r*@7$_1p#rA?_-=>bD(%)=yo4Kd&6GYUVf8)!9dcAQ@HpJ0S zPcLEQZw<%^IVN7jAvoMIb)KUr+ceuu{E&;RI>QqI4b0LmE2ky#RTa%3UDU{~#ws9u?rFOih zw0DV;zhh=U8d9h&#__s4>nB~(_ae->Z25(6$Ck3sz`(?A;mQy)x)@)u^7l%@{7FvICi+KabiV_*Q)fK0~W@Z&vo4KO8%*4Tj z-_V)Cns7@Y2nR;(?aGDKM)fDVC$F*IB_aASen@sjv}=n0r#(e8#peUSN#@hWrSl+bhC7C zKc}k*aEt!4e3VEee*N3}qPEkZX)+AW?Dm0Ba0Soxc4FF*X8j=NA-X zM~)Bs&E*L+MkRicDqP{}egFO}M$ZOvNuA?A07{du@83by*tza~9~3RJ3CB*OEn0hb z+`P+r+ZEkdmfpVl%U0V^$=C1)@6gC>9__f6zdV}gTK&9=N#L3ax`lp{X7cW-@}|#D z<*}A7ku}R4`jT?5d@sn07}^M64~$LV;-xz3sO6jL11Hjek;S=vgPKZr{ns(Cf%9)I zrdYc|drZr!k9DrFigV=2HUqk!pA&jR?4!Zf^j|ft?|yxs;EatQ>G9*d8PA#bbWJ_D84Bv7>98aRY{ifZLcj_(LTAVI0sk{j)BH zZ8oA9JE~=^=P$645pWTb#MSeBFQih9hLwVI+#H|%#ZC>FVY2HJz{*gLVLy4q4R(9! z89^*o4#lhb&IG~}*4E1p7Wtmk-XPS{B6~t1yVpuXnL?ZcQra)_)+e4SdGqs7dkIaorr|A;>h-!F+Y z8&0wjySyam$Y%7X^qI$yT5~4s`O1NzSu=tN06>2~I?S-F)A{Mrvww?UC#jhke{prX zwD%~jtKLOtZE%9$aO=Kb2<5m|=1{e}@+U*cG6DW1?){P?Yip(C78jATP^Y)GaI143 zyp=c!7||_yGb6lJ6!m&tN&QH3@Fx4*=4;=@`^{Ep0la-N_K{IJiRS~(>CzAl&82eg zVvM)VM_1^!;;N!pLpCG?I6wc>7J%E`cxQRCnPrDm_~H9IZX7i)Ky$dtBob>w!}MWz zyiFXK(3t5fSfsGqeSH{o5D}@-nMmy)_nK(r96zNW&jq0`GCM|-MusdVT~p)i7HXdG z_H7Q{ws%HVR^4x3=a3>d|ILs9sJhC*@4|I{%L|jGia_Xx!zI}WA2P?E;dXeh*-w@? z+Ksr{zqwlHqLCM zR4NGv*bY zzR%a*5u=gn%jwN<%8qVlS6Gou>(PEQRmn^OSyM+Vx;0hrnT|fL{Gh+KUZS511VHaq zM(vtf_>eTqpzfh2jByP9 z1rb2ibjX&QCYt$^qFez00CQy#XckNZ8qJ^d8rn0zdeJ;8Y*GnXebX^X5OFpCv~G$e zt@}o^1?}{cC9WnJc@ZvV6Mc1yowir+B0FzaciDB=gd286BOc3EuK;0$d4nXBvf4 z&nmgzsF#Rf7Cvj6sM?8e#o!4jMfN;VpONG9eDU*`+xcUaL#g9WuqC@Ju^r9WS-$v( z&2IRjD~8}LzA72!4QyEdEoXa${h)|*a*Gj5oQUO7d8XM4m|LCkC!A6k$-*6eg;6r*;7d*-?trQB}TAsI!n?f7fMs|Ku)2yZRH zvza>w^>hD2Gg-Qh+uSKaa0v=R%@CUu>;I(ocesx|nFR^kU%h;qr5l?&n`^ zO@wYs$Yb0^7LOjUW9iXA%IMmV_(ht+-#(Tk3k>U`a#mwqMP+#AUFh0B>|td_a*e|a z5$sF{l)fGQU_j$IjN86*E=H3kB)YvX?{D|fJJzdOc`=~inp+moR~n@7k85CY|Nj7O zj-|D8;Em!Vy5k-3y4e->Z2`urJ;}2p(f1vB;y>0Sao_G}V9j7FHw|km#q2amQ}ei&xzvepQ)ts+K21`-{CJ^l10#@pC`1~D zQ${Vm4_q#ZF-_c26{XeQTao6TQ0&I1;@oi-GREedJPx z8oyt*e2PF(UaIfn8fb1%<76no>fe1j40v|K`e0%N-!p=9NZ9e(tJu_!?4@0Cf=sR4 z=C|CGWoix8mtlL2kM@d}&~h~7@_g$`x|cOG_XLlwY?X|Z%TVH35>*vG&GKGaYOxtU3GL>I1w z0Sg|ppFsmhvX=Y6ogIHA#%$c{?k-z}kQ8E)-se##Yp2?ODA!J!+m^y?Qk;AYA_pRU zKjIVJZ{omoVbz%)r+lH(e(D2@=RF`k#v)D~qU{#?Q<;#JE}69|0~`#*&4eqb;m=W8rf4pWXOkjRsH&9xbB5@5=CKuIZnQJIK46OH|>F`Mf46xMY zJS^*u+Zs<3VGb$3oLl&>M^_lb&0BpXd;SZZv4bSf7jZM}JSDd@z;7ER)8vmpIj0@H zKUxJFvZcVj5eQMjKbW%;X@-l;n)tRzzna3o-Ft&s#&D^J+9lw4UK=S}(^3WK2f@eI z@NZYlN=z6!|Fc$fwJUlz_0aF zp65bTx~b(C(LV(BXbf$pMZ=<+U68_9dca$$^xje?X^Dz~UMfwY_?A#(Xb@xl`hv=Q zkecr8KdJknl4Xc$R}dFQ;p$ z&SMpwZ|X=j^#j*5?b=Wf-0I&?f8Qpb{n21hU+!Vj(#dyiAUz0IdxD~uDy;A)DtX9~$>e{XHb577e50nh_gp6%2(Y<5Zd2As_-MLn(fdN#TZM$^}C zuD*XO;gW4OAppV3jT2R8lMbnen+4~la^Nk@h5oTr1l+Sab&p^F%@-WQbi4DVu%~~| zK=%Y`pDC^Nd|^5t-Uz(<;!SIi52tiwMwuDQ?^O6^n(9MG0PE;#@=7okf-wLDKXf4S z@o*OOmXZDU&$TS+ZXgn;%I^|pc&J7Xke$<&J4YdHk}Ts+Pxw3=CzP10P&TMgLemki;UiF_uoY${mQGK&HgND)_GRZb?HD`g(EfL@KR_&o!UEbD{(s|_4RAp z@Mxl#7iLy)Mqp`1!ahVyRnlBEWG=7dCfBAs!-vxk0kem9yN_zM-wL`V9jKDwG(cnH z*{AwkPae>#_jkLLBH;mBtjr;iSmbCsi&qGa!x-=!I)!|P(MyLGB)h+(95 zObE2!V>@!vjVBKl8HOBwKMoqPDkYUKw4FWtw-e#UA&-S#5jd()TsYTe;_<%VY{yIf zixvh?Pdw0iw)Upc^?}1*{e!5(Q@@QD+rQ@ze=nVYJxd>F{y6&We3nfHZ^Zmh0Js51 z{_XZg38kMje`n8sN(_L3k!g=+1nyk%z`@zG7>S*=#k8h8`BlZ?z#8j%+xYK-UnU>p zSB?T6FZ_t-{Y*F``X=HDsGf(Zz{=Q&M6eh%7zg&zf(8jaf5YF|7$>3U_x?K9Ur50{ z4?n;0*1G!Tgn-l9oN0^Kwx9>&fvH-9-)Ys{Q{_r!I2W4dQE+%TpY}nzwEp59eacS04^sIcz+uI0CydpdHnGI z0FF%ldCr)GSvbq3{`|#ua~JVHj!XN8{nsSW9xeXo2;+I0eg(5%vHt*g@%|p&eV_Jy z`u_ku@4u)0pMJm3d++c60Iz@ipQT;;Z}DH*^WWCH^xxvYv**9tUwrju{ttfsKcHSK z==lBr0FL$F*?Fyv-~GM*%J0*EivG`@{{UqDMD+gv?Dy;E_Sc%;%j@#@@9ezS)${xR c03B3<^3Q3*+L!&4FCWD literal 0 HcmV?d00001 diff --git a/website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg:Zone.Identifier b/website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg:Zone.Identifier new file mode 100644 index 0000000000..088151badd --- /dev/null +++ b/website/docs/antimeridian/assets/Earth_map_with_180th_meridian.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://en.wikipedia.org/ +HostUrl=https://upload.wikimedia.org/wikipedia/commons/8/8d/Earth_map_with_180th_meridian.jpg diff --git a/website/docs/api/client-core/index.md b/website/docs/api/client-core/index.md index 4a8cbcaf84..51ad6178c8 100644 --- a/website/docs/api/client-core/index.md +++ b/website/docs/api/client-core/index.md @@ -1435,6 +1435,12 @@ Re-exports [NullSketchCollection](../geoprocessing/interfaces/NullSketchCollecti *** +### numberFormat + +Re-exports [numberFormat](../geoprocessing/functions/numberFormat.md) + +*** + ### Objective Re-exports [Objective](../geoprocessing/type-aliases/Objective.md) @@ -1801,6 +1807,12 @@ Re-exports [roundDecimal](../geoprocessing/functions/roundDecimal.md) *** +### roundDecimalFormat + +Re-exports [roundDecimalFormat](../geoprocessing/functions/roundDecimalFormat.md) + +*** + ### RoundDecimalOptions Re-exports [RoundDecimalOptions](../geoprocessing/interfaces/RoundDecimalOptions.md) @@ -1981,6 +1993,12 @@ Re-exports [testWithinPerc](../geoprocessing/functions/testWithinPerc.md) *** +### toChildProperties + +Re-exports [toChildProperties](../geoprocessing/functions/toChildProperties.md) + +*** + ### toNullSketch Re-exports [toNullSketch](../geoprocessing/functions/toNullSketch.md) @@ -2011,6 +2029,12 @@ Re-exports [toSketchArray](../geoprocessing/functions/toSketchArray.md) *** +### toSketchPropertiesArray + +Re-exports [toSketchPropertiesArray](../geoprocessing/functions/toSketchPropertiesArray.md) + +*** + ### TypedArray Re-exports [TypedArray](../geoprocessing/type-aliases/TypedArray.md) diff --git a/website/docs/api/client-ui/interfaces/ClassTableProps.md b/website/docs/api/client-ui/interfaces/ClassTableProps.md index b054f03d44..32d86c13be 100644 --- a/website/docs/api/client-ui/interfaces/ClassTableProps.md +++ b/website/docs/api/client-ui/interfaces/ClassTableProps.md @@ -68,13 +68,13 @@ optional objectiveId: string; group level objective, applies to all classes -#### type +#### type? ```ts -type: string; +optional type: string; ``` -Metric type +unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user *** diff --git a/website/docs/api/client-ui/interfaces/SketchClassTableProps.md b/website/docs/api/client-ui/interfaces/SketchClassTableProps.md index e1e489dad4..de93cdfdcd 100644 --- a/website/docs/api/client-ui/interfaces/SketchClassTableProps.md +++ b/website/docs/api/client-ui/interfaces/SketchClassTableProps.md @@ -68,13 +68,13 @@ optional objectiveId: string; group level objective, applies to all classes -#### type +#### type? ```ts -type: string; +optional type: string; ``` -Metric type +unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user *** diff --git a/website/docs/api/dataproviders/functions/fgBoundingBox.md b/website/docs/api/dataproviders/functions/fgBoundingBox.md deleted file mode 100644 index 95067faf11..0000000000 --- a/website/docs/api/dataproviders/functions/fgBoundingBox.md +++ /dev/null @@ -1,39 +0,0 @@ -# fgBoundingBox() - -```ts -function fgBoundingBox(box): object -``` - -## Parameters - -| Parameter | Type | -| ------ | ------ | -| `box` | [`BBox`](../../geoprocessing/type-aliases/BBox.md) | - -## Returns - -`object` - -### maxX - -```ts -maxX: number; -``` - -### maxY - -```ts -maxY: number; -``` - -### minX - -```ts -minX: number; -``` - -### minY - -```ts -minY: number; -``` diff --git a/website/docs/api/dataproviders/functions/fgbFetchAll.md b/website/docs/api/dataproviders/functions/fgbFetchAll.md deleted file mode 100644 index c436dc2397..0000000000 --- a/website/docs/api/dataproviders/functions/fgbFetchAll.md +++ /dev/null @@ -1,26 +0,0 @@ -# fgbFetchAll() - -```ts -function fgbFetchAll(url, box?): Promise -``` - -Fetch features within bounding box and deserializes them, awaiting all of them before returning. -Useful when running a spatial function on the whole set is faster than running -one at a time as the deserialize generator provides them - -## Type Parameters - -| Type Parameter | -| ------ | -| `F` *extends* [`Feature`](../../geoprocessing/interfaces/Feature.md)\<[`Geometry`](../../geoprocessing/type-aliases/Geometry.md), [`GeoJsonProperties`](../../geoprocessing/type-aliases/GeoJsonProperties.md)\> | - -## Parameters - -| Parameter | Type | -| ------ | ------ | -| `url` | `string` | -| `box`? | [`BBox`](../../geoprocessing/type-aliases/BBox.md) | - -## Returns - -`Promise`\<`F`[]\> diff --git a/website/docs/api/dataproviders/functions/loadCogWindow.md b/website/docs/api/dataproviders/functions/loadCogWindow.md deleted file mode 100644 index 913f817223..0000000000 --- a/website/docs/api/dataproviders/functions/loadCogWindow.md +++ /dev/null @@ -1,22 +0,0 @@ -# ~~loadCogWindow()~~ - -```ts -function loadCogWindow(url, options): Promise -``` - -Returns georaster window (image subset) defined by options.windowBox, otherwise loads the whole raster -windowBox is extended out to the nearest pixel edge to (in theory) avoid resampling. Assumes raster is in WGS84 degrees -This function front loads the raster values, so subsequent geoblaze calls (e.g. sum) can be called sync - -## Parameters - -| Parameter | Type | -| ------ | ------ | -| `url` | `string` | -| `options` | `CogOptions` | - -## Returns - -`Promise`\<`any`\> - -## Deprecated diff --git a/website/docs/api/dataproviders/index.md b/website/docs/api/dataproviders/index.md index 84d8981d47..ea1fe66671 100644 --- a/website/docs/api/dataproviders/index.md +++ b/website/docs/api/dataproviders/index.md @@ -1,14 +1,49 @@ # dataproviders -## Index - -### Functions - -| Function | Description | -| ------ | ------ | -| [fgbFetchAll](functions/fgbFetchAll.md) | Fetch features within bounding box and deserializes them, awaiting all of them before returning. Useful when running a spatial function on the whole set is faster than running one at a time as the deserialize generator provides them | -| [fgBoundingBox](functions/fgBoundingBox.md) | - | -| [genClipLoader](functions/genClipLoader.md) | Given a project client and 1 or more clip operations, returns a function that when called loads clip features from their datasources that overlap with the feature polygon to clip. Pass this function to genPreprocessor() and it will take care of the rest. | -| [getFeatures](functions/getFeatures.md) | Returns features for a variety of vector datasources and formats, with additional filter options | -| [loadCog](functions/loadCog.md) | Returns cog-aware georaster at given url. Will not fetch raster values until subsequent geoblaze calls are made with a geometry and it will calculate the window to load based on the geometry. The subsequent geoblaze calls (e.g. sum) must be called async to allow the raster to load. | -| [loadCogWindow](functions/loadCogWindow.md) | Returns georaster window (image subset) defined by options.windowBox, otherwise loads the whole raster windowBox is extended out to the nearest pixel edge to (in theory) avoid resampling. Assumes raster is in WGS84 degrees This function front loads the raster values, so subsequent geoblaze calls (e.g. sum) can be called sync | +## References + +### fgbFetchAll + +Re-exports [fgbFetchAll](../geoprocessing/functions/fgbFetchAll.md) + +*** + +### fgBoundingBox + +Re-exports [fgBoundingBox](../geoprocessing/functions/fgBoundingBox.md) + +*** + +### FgBoundingBox + +Re-exports [FgBoundingBox](../geoprocessing/interfaces/FgBoundingBox.md) + +*** + +### genClipLoader + +Re-exports [genClipLoader](../geoprocessing/functions/genClipLoader.md) + +*** + +### getFeatures + +Re-exports [getFeatures](../geoprocessing/functions/getFeatures.md) + +*** + +### getFeaturesForSketchBBoxes + +Re-exports [getFeaturesForSketchBBoxes](../geoprocessing/functions/getFeaturesForSketchBBoxes.md) + +*** + +### loadCog + +Re-exports [loadCog](../geoprocessing/functions/loadCog.md) + +*** + +### loadFgb + +Re-exports [loadFgb](../geoprocessing/functions/loadFgb.md) diff --git a/website/docs/api/geoprocessing/classes/ProjectClientBase.md b/website/docs/api/geoprocessing/classes/ProjectClientBase.md index 5374bb7ca6..c1672c9441 100644 --- a/website/docs/api/geoprocessing/classes/ProjectClientBase.md +++ b/website/docs/api/geoprocessing/classes/ProjectClientBase.md @@ -444,6 +444,24 @@ Returns ExternalVectorDatasource given datasourceId, throws if not found *** +### getFgbPath() + +```ts +getFgbPath(ds): string +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `ds` | \| `object` \| `object` \| `object` \| `object` \| `object` & `object` \| `object` & `object` \| [`ImportVectorDatasourceConfig`](../type-aliases/ImportVectorDatasourceConfig.md) \| [`ImportRasterDatasourceConfig`](../type-aliases/ImportRasterDatasourceConfig.md) | + +#### Returns + +`string` + +*** + ### getGeographyByGroup() ```ts @@ -752,7 +770,7 @@ Optional, constrain datasource to smaller bbox classKeys: string[]; ``` -keys to generate classes for. Vector - property names +properties whose values define classes of data. ##### created @@ -993,13 +1011,88 @@ optional objectiveId: string; group level objective, applies to all classes -##### type +##### type? + +```ts +optional type: string; +``` + +unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user + +*** + +### getMetricGroupClassKey() + +```ts +getMetricGroupClassKey(metricGroup, options): undefined | string +``` + +Returns classKey for given metric group, class-level if available, otherwise metricGroup level if not + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `metricGroup` | `object` | metricGroup to search for class and classKey | +| `metricGroup.classes` | `object`[] | data classes used by group | +| `metricGroup.classKey`? | `string` | Optional datasource class key used to source classIds | +| `metricGroup.datasourceId`? | `string` | Datasource to generate metrics from | +| `metricGroup.layerId`? | `string` | Optional ID of map layer associated with this metric | +| `metricGroup.metricId` | `string` | Unique id of metric in project | +| `metricGroup.objectiveId`? | `string` | group level objective, applies to all classes | +| `metricGroup.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | +| `options` | `object` | - | +| `options.classId`? | `string` | optional data class ID to specifically get classKey for | + +#### Returns + +`undefined` \| `string` + +the classKey name or undefined + +#### Throws + +if class does not exist in metric group with given classId + +*** + +### getMetricGroupDatasource() ```ts -type: string; +getMetricGroupDatasource(metricGroup, options): object | object | object & object | object & object ``` -Metric type +Returns datasource for given MetricGroup. +If classId is provided, returns class-level datasource if assigned, otherwise falls back to top-level metricGroup datasource + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `metricGroup` | `object` | metricGroup to get datasource for | +| `metricGroup.classes` | `object`[] | data classes used by group | +| `metricGroup.classKey`? | `string` | Optional datasource class key used to source classIds | +| `metricGroup.datasourceId`? | `string` | Datasource to generate metrics from | +| `metricGroup.layerId`? | `string` | Optional ID of map layer associated with this metric | +| `metricGroup.metricId` | `string` | Unique id of metric in project | +| `metricGroup.objectiveId`? | `string` | group level objective, applies to all classes | +| `metricGroup.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | +| `options` | `object` | - | +| `options.classId`? | `string` | metricGroup class to get datasource for | + +#### Returns + +`object` \| `object` \| `object` & `object` \| `object` & `object` + +the datasource object + +#### Throws + +if class does not exist in metric group with given classId + +#### Throws + +if datasourceId is missing for metricGroup and class *** @@ -1009,21 +1102,25 @@ Metric type getMetricGroupObjectives(metricGroup, t?): object[] ``` -Returns all Objectives for MetricGroup, optionally translating short description, given i18n t function +Returns Objectives for MetricGroup +If at least one class has an objective assigned, then it returns those, missing classes with no objective get the top-level objective +If no class-level objectives are found, then it returns the top-level objective +If no objectives are found, returns an empty array +Given i18n t function it will also translate the short description #### Parameters | Parameter | Type | Description | | ------ | ------ | ------ | -| `metricGroup` | `object` | - | +| `metricGroup` | `object` | | | `metricGroup.classes` | `object`[] | data classes used by group | | `metricGroup.classKey`? | `string` | Optional datasource class key used to source classIds | | `metricGroup.datasourceId`? | `string` | Datasource to generate metrics from | | `metricGroup.layerId`? | `string` | Optional ID of map layer associated with this metric | | `metricGroup.metricId`? | `string` | Unique id of metric in project | | `metricGroup.objectiveId`? | `string` | group level objective, applies to all classes | -| `metricGroup.type`? | `string` | Metric type | -| `t`? | `TFunction`\<`"translation"`, `undefined`\> | - | +| `metricGroup.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | +| `t`? | `TFunction`\<`"translation"`, `undefined`\> | | #### Returns @@ -1050,7 +1147,7 @@ Simple helper that given MetricGroup, returns a consistent ID string for a perce | `mg.layerId`? | `string` | Optional ID of map layer associated with this metric | | `mg.metricId` | `string` | Unique id of metric in project | | `mg.objectiveId`? | `string` | group level objective, applies to all classes | -| `mg.type` | `string` | Metric type | +| `mg.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | #### Returns @@ -1084,7 +1181,7 @@ Returns Objective given objectiveId countsToward: Record = objectiveAnswerMapSchema; ``` -Generic map of MPA protection levels to whether they count towards objective +Generic map of group names (e.g. MPA protection levels) to whether they count towards objective ##### objectiveId @@ -1132,7 +1229,7 @@ Returns precalc metrics from precalc.json. Optionally filters down to specific | `mg.layerId`? | `string` | Optional ID of map layer associated with this metric | | `mg.metricId`? | `string` | Unique id of metric in project | | `mg.objectiveId`? | `string` | group level objective, applies to all classes | -| `mg.type`? | `string` | Metric type | +| `mg.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | | `metricId`? | `string` | string, "area", "count", or "sum" | | `geographyId`? | `string` | string, geographyId to get precalculated metrics for | @@ -1310,7 +1407,7 @@ Optional, constrain datasource to smaller bbox classKeys: string[]; ``` -keys to generate classes for. Vector - property names +properties whose values define classes of data. ##### datasourceId diff --git a/website/docs/api/geoprocessing/functions/cleanBBox.md b/website/docs/api/geoprocessing/functions/cleanBBox.md new file mode 100644 index 0000000000..ecce0b572f --- /dev/null +++ b/website/docs/api/geoprocessing/functions/cleanBBox.md @@ -0,0 +1,19 @@ +# cleanBBox() + +```ts +function cleanBBox(bbox): number[] +``` + +Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `bbox` | [`BBox`](../type-aliases/BBox.md) | the bounding box to clean | + +## Returns + +`number`[] + +the cleaned bounding box diff --git a/website/docs/api/geoprocessing/functions/clip.md b/website/docs/api/geoprocessing/functions/clip.md index 65277e4937..d0f8715220 100644 --- a/website/docs/api/geoprocessing/functions/clip.md +++ b/website/docs/api/geoprocessing/functions/clip.md @@ -1,4 +1,4 @@ -# ~~clip()~~ +# clip() ```ts function clip

( @@ -7,7 +7,7 @@ function clip

( options): Feature | null ``` -Performs clip operation on features +Performs one of 4 different clip operations on features ## Type Parameters @@ -20,7 +20,7 @@ Performs clip operation on features | Parameter | Type | Description | | ------ | ------ | ------ | | `features` | [`FeatureCollection`](../interfaces/FeatureCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | FeatureCollection of Polygons or MultiPolygons. First feature is the subject, the rest are the clippers | -| `operation` | `"union"` \| `"intersection"` \| `"xor"` \| `"difference"` | one of "union", "intersection", "xor", "difference" | +| `operation` | `"intersection"` \| `"difference"` \| `"xor"` \| `"union"` | one of "union", "intersection", "xor", "difference" | | `options` | `object` | optional properties to set on the resulting feature | | `options.properties`? | `P` | - | @@ -29,7 +29,3 @@ Performs clip operation on features [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| `null` clipped Feature of Polygon or MultiPolygon - -## Deprecated - -- use turf modules instead, now with support for operating against an array of features diff --git a/website/docs/api/geoprocessing/functions/clipMultiMerge.md b/website/docs/api/geoprocessing/functions/clipMultiMerge.md index 1f8e41d60e..c4a4dd7657 100644 --- a/website/docs/api/geoprocessing/functions/clipMultiMerge.md +++ b/website/docs/api/geoprocessing/functions/clipMultiMerge.md @@ -8,8 +8,8 @@ function clipMultiMerge

( options): Feature | null ``` -Performs clip by merging features2 coords into a single multipolygon. -Useful when you need features2 to be seen as a single unit when clipping feature1 (e.g. intersection) +Performs clip after first merging features2 coords into a single multipolygon. +Avoids errors in underlying clipping library when too many features in features2 ## Type Parameters @@ -19,14 +19,16 @@ Useful when you need features2 to be seen as a single unit when clipping feature ## Parameters -| Parameter | Type | -| ------ | ------ | -| `feature1` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | -| `features2` | [`FeatureCollection`](../interfaces/FeatureCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | -| `operation` | `"union"` \| `"intersection"` \| `"xor"` \| `"difference"` | -| `options` | `object` | -| `options.properties`? | `P` | +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `feature1` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | polygon or multipolygon to clip | +| `features2` | [`FeatureCollection`](../interfaces/FeatureCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | collection of polygons or multipolygons to clip feature1 against | +| `operation` | `"intersection"` \| `"difference"` \| `"xor"` \| `"union"` | one of "union", "intersection", "xor", "difference" | +| `options` | `object` | - | +| `options.properties`? | `P` | properties to set on the resulting feature | ## Returns [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| `null` + +polygon or multipolygon feature result from clip operation, if no overlap then returns null diff --git a/website/docs/api/geoprocessing/functions/clipToPolygonDatasources.md b/website/docs/api/geoprocessing/functions/clipToPolygonDatasources.md new file mode 100644 index 0000000000..b77e9ecc6f --- /dev/null +++ b/website/docs/api/geoprocessing/functions/clipToPolygonDatasources.md @@ -0,0 +1,36 @@ +# clipToPolygonDatasources() + +```ts +function clipToPolygonDatasources

( + project, + feature, + clipOperations, +options): Promise> +``` + +Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources + +## Type Parameters + +| Type Parameter | +| ------ | +| `P` *extends* [`ProjectClientInterface`](../interfaces/ProjectClientInterface.md) | + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `project` | `P` | project client to use for accessing datasources | +| `feature` | [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | feature to clip | +| `clipOperations` | [`DatasourceClipOperation`](../interfaces/DatasourceClipOperation.md)[] | array of DatasourceClipOperations | +| `options` | [`ClipOptions`](../interfaces/ClipOptions.md) | clip options | + +## Returns + +`Promise`\<[`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\>\> + +clipped polygon + +## Throws + +if a datasource fetch returns no features or if nothing remains of feature after clip operations diff --git a/website/docs/api/geoprocessing/functions/clipToPolygonFeatures.md b/website/docs/api/geoprocessing/functions/clipToPolygonFeatures.md index 20e3ae370a..87a47da964 100644 --- a/website/docs/api/geoprocessing/functions/clipToPolygonFeatures.md +++ b/website/docs/api/geoprocessing/functions/clipToPolygonFeatures.md @@ -3,25 +3,26 @@ ```ts function clipToPolygonFeatures( feature, - clipLoader, + clipOperations, options): Promise> ``` -Takes a Polygon feature and returns the portion remaining after performing clipOperations -If results in multiple polygons then returns the largest +Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features ## Parameters | Parameter | Type | Description | | ------ | ------ | ------ | | `feature` | [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | feature to clip | -| `clipLoader` | (`feature`) => `Promise`\<[`FeatureClipOperation`](../interfaces/FeatureClipOperation.md)[]\> | Load clip features from datasources for clip operations | -| `options` | [`ClipOptions`](../interfaces/ClipOptions.md) | - | +| `clipOperations` | [`FeatureClipOperation`](../interfaces/FeatureClipOperation.md)[] | array of DatasourceClipOperations | +| `options` | [`ClipOptions`](../interfaces/ClipOptions.md) | clip options | ## Returns `Promise`\<[`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\>\> +clipped polygon + ## Throws -if input feature to clip is not a polygon or if enforceMaxSize is true and clipped feature is larger than maxSize, defaults to 500K km +if a datasource fetch returns no features or if nothing remains of feature after clip operations diff --git a/website/docs/api/geoprocessing/functions/ensureValidPolygon.md b/website/docs/api/geoprocessing/functions/ensureValidPolygon.md new file mode 100644 index 0000000000..aac34d6881 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/ensureValidPolygon.md @@ -0,0 +1,29 @@ +# ensureValidPolygon() + +```ts +function ensureValidPolygon(feature, options): boolean +``` + +Returns true if feature is valid and meets requirements set by options. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `feature` | [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | feature to validate | +| `options` | `object` | validation options | +| `options.allowSelfCrossing`? | `boolean` | - | +| `options.enforceMaxSize`? | `boolean` | Whether or not maxSize should be enforced and throw if larger | +| `options.enforceMinSize`? | `boolean` | Whether or not minSize should be enforced and throw if smaller | +| `options.maxSize`? | `number` | maxSize in square kilometers that polygon can be. Throws if larger. | +| `options.minSize`? | `number` | minimum size in square kilometers that polygon can be. Throws if smaller. | + +## Returns + +`boolean` + +true if valid + +## Throws + +if polygon is invalid with reason diff --git a/website/docs/api/geoprocessing/functions/fgBoundingBox.md b/website/docs/api/geoprocessing/functions/fgBoundingBox.md new file mode 100644 index 0000000000..27ed8d2ea4 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/fgBoundingBox.md @@ -0,0 +1,15 @@ +# fgBoundingBox() + +```ts +function fgBoundingBox(box): FgBoundingBox +``` + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `box` | [`BBox`](../type-aliases/BBox.md) | + +## Returns + +[`FgBoundingBox`](../interfaces/FgBoundingBox.md) diff --git a/website/docs/api/geoprocessing/functions/fgbFetchAll.md b/website/docs/api/geoprocessing/functions/fgbFetchAll.md new file mode 100644 index 0000000000..ba76a30d14 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/fgbFetchAll.md @@ -0,0 +1,29 @@ +# ~~fgbFetchAll()~~ + +```ts +function fgbFetchAll(url, box?): Promise +``` + +Fetch features from flatgeobuf at url within bounding box +Awaits all features before returning, rather than streaming them. + +## Type Parameters + +| Type Parameter | +| ------ | +| `F` *extends* [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `url` | `string` | +| `box`? | [`BBox`](../type-aliases/BBox.md) | + +## Returns + +`Promise`\<`F`[]\> + +## Deprecated + +Use `loadCog` instead. diff --git a/website/docs/api/geoprocessing/functions/flattenBySketchAllClass.md b/website/docs/api/geoprocessing/functions/flattenBySketchAllClass.md index 5c9f3fe874..39f15205c6 100644 --- a/website/docs/api/geoprocessing/functions/flattenBySketchAllClass.md +++ b/website/docs/api/geoprocessing/functions/flattenBySketchAllClass.md @@ -4,7 +4,7 @@ function flattenBySketchAllClass( metrics, classes, - sketches, + sketchProperties, sortFn?): Record[] ``` @@ -17,7 +17,7 @@ where each object contains sketch id, sketch name, and all metric values for eac | ------ | ------ | ------ | | `metrics` | `object`[] | List of metrics, expects one metric per sketch and class combination | | `classes` | `object`[] | Data classes represented in metrics | -| `sketches` | [`NullSketch`](../interfaces/NullSketch.md)[] \| [`Sketch`](../interfaces/Sketch.md)\<[`SketchGeometryTypes`](../type-aliases/SketchGeometryTypes.md)\>[] | Sketches contained in metrics | +| `sketchProperties` | [`SketchProperties`](../type-aliases/SketchProperties.md)[] | SketchProperties of sketches represented in metrics | | `sortFn`? | (`a`, `b`) => `number` | Function to sort class configs using Array.sort (defaults to alphabetical by display name) | ## Returns diff --git a/website/docs/api/dataproviders/functions/genClipLoader.md b/website/docs/api/geoprocessing/functions/genClipLoader.md similarity index 54% rename from website/docs/api/dataproviders/functions/genClipLoader.md rename to website/docs/api/geoprocessing/functions/genClipLoader.md index 54e8e8f0c9..cd85b985dc 100644 --- a/website/docs/api/dataproviders/functions/genClipLoader.md +++ b/website/docs/api/geoprocessing/functions/genClipLoader.md @@ -1,4 +1,4 @@ -# genClipLoader() +# ~~genClipLoader()~~ ```ts function genClipLoader

(project, operations): (feature) => Promise @@ -12,14 +12,14 @@ Pass this function to genPreprocessor() and it will take care of the rest. | Type Parameter | | ------ | -| `P` *extends* [`ProjectClientInterface`](../../geoprocessing/interfaces/ProjectClientInterface.md) | +| `P` *extends* [`ProjectClientInterface`](../interfaces/ProjectClientInterface.md) | ## Parameters | Parameter | Type | | ------ | ------ | | `project` | `P` | -| `operations` | [`DatasourceClipOperation`](../../geoprocessing/interfaces/DatasourceClipOperation.md)[] | +| `operations` | [`DatasourceClipOperation`](../interfaces/DatasourceClipOperation.md)[] | ## Returns @@ -29,8 +29,10 @@ Pass this function to genPreprocessor() and it will take care of the rest. | Parameter | Type | | ------ | ------ | -| `feature` | [`Feature`](../../geoprocessing/interfaces/Feature.md)\<[`Polygon`](../../geoprocessing/interfaces/Polygon.md) \| [`MultiPolygon`](../../geoprocessing/interfaces/MultiPolygon.md), [`GeoJsonProperties`](../../geoprocessing/type-aliases/GeoJsonProperties.md)\> | +| `feature` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | ### Returns `Promise`\<`object`[]\> + +## Deprecated diff --git a/website/docs/api/geoprocessing/functions/genClipToPolygonDatasources.md b/website/docs/api/geoprocessing/functions/genClipToPolygonDatasources.md new file mode 100644 index 0000000000..35fd51536e --- /dev/null +++ b/website/docs/api/geoprocessing/functions/genClipToPolygonDatasources.md @@ -0,0 +1,44 @@ +# genClipToPolygonDatasources() + +```ts +function genClipToPolygonDatasources

( + project, + clipOperations, +options): (feature) => Promise> +``` + +Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources + +## Type Parameters + +| Type Parameter | +| ------ | +| `P` *extends* [`ProjectClientInterface`](../interfaces/ProjectClientInterface.md) | + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `project` | `P` | project client to use for accessing datasources | +| `clipOperations` | [`DatasourceClipOperation`](../interfaces/DatasourceClipOperation.md)[] | array of DatasourceClipOperations | +| `options` | [`ClipOptions`](../interfaces/ClipOptions.md) | clip options | + +## Returns + +`Function` + +clipped polygon + +### Parameters + +| Parameter | Type | +| ------ | ------ | +| `feature` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | + +### Returns + +`Promise`\<[`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>\> + +## Throws + +if a datasource fetch returns no features or if nothing remains of feature after clip operations diff --git a/website/docs/api/geoprocessing/functions/genClipToPolygonFeatures.md b/website/docs/api/geoprocessing/functions/genClipToPolygonFeatures.md new file mode 100644 index 0000000000..3436c9d496 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/genClipToPolygonFeatures.md @@ -0,0 +1,34 @@ +# genClipToPolygonFeatures() + +```ts +function genClipToPolygonFeatures(clipOperations, options): (feature) => Promise> +``` + +Returns a function that applies clip operations to a feature using other polygon features. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `clipOperations` | [`FeatureClipOperation`](../interfaces/FeatureClipOperation.md)[] | - | +| `options` | [`ClipOptions`](../interfaces/ClipOptions.md) | clip options | + +## Returns + +`Function` + +clipped polygon + +### Parameters + +| Parameter | Type | +| ------ | ------ | +| `feature` | [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | + +### Returns + +`Promise`\<[`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>\> + +## Throws + +if a datasource fetch returns no features or if nothing remains of feature after clip operations diff --git a/website/docs/api/geoprocessing/functions/genPreprocessor.md b/website/docs/api/geoprocessing/functions/genPreprocessor.md deleted file mode 100644 index 6eadb90e76..0000000000 --- a/website/docs/api/geoprocessing/functions/genPreprocessor.md +++ /dev/null @@ -1,32 +0,0 @@ -# genPreprocessor() - -```ts -function genPreprocessor(clipLoader, options): (feature) => Promise> -``` - -Returns a preprocessor function given clipLoader function - -## Parameters - -| Parameter | Type | Description | -| ------ | ------ | ------ | -| `clipLoader` | (`feature`) => `Promise`\<[`FeatureClipOperation`](../interfaces/FeatureClipOperation.md)[]\> | Clip loader function | -| `options` | [`ClipOptions`](../interfaces/ClipOptions.md) | - | - -## Returns - -`Function` - -### Parameters - -| Parameter | Type | -| ------ | ------ | -| `feature` | [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | - -### Returns - -`Promise`\<[`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>\> - -## Throws - -if clipped feature is larger than maxSize, defaults to 500K km diff --git a/website/docs/api/geoprocessing/functions/getArea.md b/website/docs/api/geoprocessing/functions/getArea.md index 5981c60e2b..5e5b5f490b 100644 --- a/website/docs/api/geoprocessing/functions/getArea.md +++ b/website/docs/api/geoprocessing/functions/getArea.md @@ -4,7 +4,7 @@ function getArea(raster, feat?): Promise ``` -Returns area of valid cells (not nodata) overlapping with feature. If no valid cells found, returns 0. +Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0. ## Parameters diff --git a/website/docs/api/dataproviders/functions/getFeatures.md b/website/docs/api/geoprocessing/functions/getFeatures.md similarity index 60% rename from website/docs/api/dataproviders/functions/getFeatures.md rename to website/docs/api/geoprocessing/functions/getFeatures.md index 0b9aee5a31..b8197cdf9f 100644 --- a/website/docs/api/dataproviders/functions/getFeatures.md +++ b/website/docs/api/geoprocessing/functions/getFeatures.md @@ -13,7 +13,7 @@ Returns features for a variety of vector datasources and formats, with additiona | Type Parameter | | ------ | -| `F` *extends* [`Feature`](../../geoprocessing/interfaces/Feature.md)\<[`Geometry`](../../geoprocessing/type-aliases/Geometry.md), [`GeoJsonProperties`](../../geoprocessing/type-aliases/GeoJsonProperties.md)\> | +| `F` *extends* [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | ## Parameters @@ -21,7 +21,7 @@ Returns features for a variety of vector datasources and formats, with additiona | ------ | ------ | ------ | | `datasource` | `object` \| `object` \| `object` & `object` | - | | `url` | `string` | url of datasource | -| `options` | [`DatasourceOptions`](../../geoprocessing/interfaces/DatasourceOptions.md) | - | +| `options` | [`DatasourceOptions`](../interfaces/DatasourceOptions.md) | - | ## Returns diff --git a/website/docs/api/geoprocessing/functions/getFeaturesForSketchBBoxes.md b/website/docs/api/geoprocessing/functions/getFeaturesForSketchBBoxes.md new file mode 100644 index 0000000000..9f0880ba7c --- /dev/null +++ b/website/docs/api/geoprocessing/functions/getFeaturesForSketchBBoxes.md @@ -0,0 +1,38 @@ +# getFeaturesForSketchBBoxes() + +```ts +function getFeaturesForSketchBBoxes( + sketch, + fgbUrl, +options): Promise[]> +``` + +Loads features from a FlatGeobuf referenced by URL, which intersect the +bounding boxes of each individual sketch in a SketchCollection, or a single +Sketch. + +In the case of a SketchCollection, it is possible that duplicate features may +be fetched in the case of overlapping bounding boxes or very large features +that span multiple bounding boxes. This function will de-dupe those features. +Ideally, there is a feature.id property set. If not the caller can provide a +uniqueIdProperty to de-dupe features. If neither is provided, a hash of the +feature coordinates will be used. + +If feature.id is not available, and uniqueIdProperty is not provided, there +is the potential for elimination of features that are geometrically identical +but have different properties. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `sketch` | [`Sketch`](../interfaces/Sketch.md)\<[`SketchGeometryTypes`](../type-aliases/SketchGeometryTypes.md)\> \| [`SketchCollection`](../interfaces/SketchCollection.md)\<[`SketchGeometryTypes`](../type-aliases/SketchGeometryTypes.md)\> | Sketch or SketchCollection | +| `fgbUrl` | `string` | FlatGeobuf location | +| `options` | `object` | - | +| `options.uniqueIdProperty`? | `string` | - | + +## Returns + +`Promise`\<[`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[]\> + +array of Features diff --git a/website/docs/api/geoprocessing/functions/getInternalVectorDatasourceById.md b/website/docs/api/geoprocessing/functions/getInternalVectorDatasourceById.md index eec385ba94..52a33a4be4 100644 --- a/website/docs/api/geoprocessing/functions/getInternalVectorDatasourceById.md +++ b/website/docs/api/geoprocessing/functions/getInternalVectorDatasourceById.md @@ -31,7 +31,7 @@ Optional, constrain datasource to smaller bbox classKeys: string[]; ``` -keys to generate classes for. Vector - property names +properties whose values define classes of data. ### created diff --git a/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveId.md b/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveId.md index 68bf1ce789..3ad8fb859f 100644 --- a/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveId.md +++ b/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveId.md @@ -4,23 +4,33 @@ function getMetricGroupObjectiveId(metricGroup, classId?): string ``` -Returns the top-level objective assigned for the given MetricGroup. -If a classID is also passed, returns the objective ID for that class within the metric group +Returns the objectiveId assigned to the given MetricGroup. +If classId provided, returns the objective ID assigned to data class with that classId, else fallback to metricGroup objectiveId. ## Parameters | Parameter | Type | Description | | ------ | ------ | ------ | -| `metricGroup` | `object` | - | +| `metricGroup` | `object` | the metricGroup to get the objective for | | `metricGroup.classes` | `object`[] | data classes used by group | | `metricGroup.classKey`? | `string` | Optional datasource class key used to source classIds | | `metricGroup.datasourceId`? | `string` | Datasource to generate metrics from | | `metricGroup.layerId`? | `string` | Optional ID of map layer associated with this metric | | `metricGroup.metricId`? | `string` | Unique id of metric in project | | `metricGroup.objectiveId`? | `string` | group level objective, applies to all classes | -| `metricGroup.type`? | `string` | Metric type | -| `classId`? | `string` | - | +| `metricGroup.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | +| `classId`? | `string` | the classId to get the objective for | ## Returns `string` + +objectiveId + +## Throws + +if data class does not exist with classId + +## Throws + +if no objectiveId found for metricGroup or its class diff --git a/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveIds.md b/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveIds.md index 389693047e..e0cd2519d7 100644 --- a/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveIds.md +++ b/website/docs/api/geoprocessing/functions/getMetricGroupObjectiveIds.md @@ -4,23 +4,26 @@ function getMetricGroupObjectiveIds(metricGroup): string[] ``` -Returns array of all objective IDs configured for the given MetricGroup. -If a class does not have an objectiveId assigned, then it gets the top-level -objectiveId +Returns array of objective IDs for the given MetricGroup. +If at least one class has an objectiveId assigned, then it returns those, missing classes with no objectiveId get the top-level objectiveId +If no class-level objectives are found, then it returns the top-level objectiveId +If no objectives are found, returns an empty array ## Parameters | Parameter | Type | Description | | ------ | ------ | ------ | -| `metricGroup` | `object` | - | +| `metricGroup` | `object` | the metricGroup to get the objectives for | | `metricGroup.classes` | `object`[] | data classes used by group | | `metricGroup.classKey`? | `string` | Optional datasource class key used to source classIds | | `metricGroup.datasourceId`? | `string` | Datasource to generate metrics from | | `metricGroup.layerId`? | `string` | Optional ID of map layer associated with this metric | | `metricGroup.metricId` | `string` | Unique id of metric in project | | `metricGroup.objectiveId`? | `string` | group level objective, applies to all classes | -| `metricGroup.type` | `string` | Metric type | +| `metricGroup.type`? | `string` | unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user | ## Returns `string`[] + +array of objectiveIds diff --git a/website/docs/api/geoprocessing/functions/getObjectiveById.md b/website/docs/api/geoprocessing/functions/getObjectiveById.md index 0219119d35..eb892a68b0 100644 --- a/website/docs/api/geoprocessing/functions/getObjectiveById.md +++ b/website/docs/api/geoprocessing/functions/getObjectiveById.md @@ -23,7 +23,7 @@ find and return objectives from passed objectives countsToward: Record = objectiveAnswerMapSchema; ``` -Generic map of MPA protection levels to whether they count towards objective +Generic map of group names (e.g. MPA protection levels) to whether they count towards objective ### objectiveId diff --git a/website/docs/api/geoprocessing/functions/getSum.md b/website/docs/api/geoprocessing/functions/getSum.md index 5dacf4e35a..233c97914c 100644 --- a/website/docs/api/geoprocessing/functions/getSum.md +++ b/website/docs/api/geoprocessing/functions/getSum.md @@ -4,7 +4,7 @@ function getSum(raster, feat?): Promise ``` -Returns sum of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0. +Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0. ## Parameters diff --git a/website/docs/api/geoprocessing/functions/getVectorDatasourceById.md b/website/docs/api/geoprocessing/functions/getVectorDatasourceById.md index 0638f3aded..f2a8908fd7 100644 --- a/website/docs/api/geoprocessing/functions/getVectorDatasourceById.md +++ b/website/docs/api/geoprocessing/functions/getVectorDatasourceById.md @@ -31,7 +31,7 @@ Optional, constrain datasource to smaller bbox classKeys: string[]; ``` -keys to generate classes for. Vector - property names +properties whose values define classes of data. ### datasourceId diff --git a/website/docs/api/geoprocessing/functions/intersectInChunks.md b/website/docs/api/geoprocessing/functions/intersectInChunks.md new file mode 100644 index 0000000000..0e7da4a530 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/intersectInChunks.md @@ -0,0 +1,25 @@ +# intersectInChunks() + +```ts +function intersectInChunks( + featureA, + featuresB, + chunkSize): Feature[] +``` + +Calculates area overlap between a feature A and a feature array B. +Intersection is done in chunks on featuresB to avoid errors due to too many features + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `featureA` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | single feature to intersect with featuresB | +| `featuresB` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[] | array of features | +| `chunkSize` | `number` | Size of array to split featuresB into, avoids intersect failure due to large array) | + +## Returns + +[`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[] + +intersection of featureA with featuresB diff --git a/website/docs/api/geoprocessing/functions/intersectInChunksArea.md b/website/docs/api/geoprocessing/functions/intersectInChunksArea.md new file mode 100644 index 0000000000..b10aa1a9f8 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/intersectInChunksArea.md @@ -0,0 +1,37 @@ +# intersectInChunksArea() + +```ts +function intersectInChunksArea( + featureA, + featuresB, + chunkSize): object +``` + +Calculates area overlap between a feature A and a feature array B. +Intersection is done in chunks on featuresB to avoid errors due to too many features + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `featureA` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | single feature to intersect with featuresB | +| `featuresB` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[] | array of features | +| `chunkSize` | `number` | Size of array to split featuresB into, avoids intersect failure due to large array) | + +## Returns + +`object` + +area of intersection of featureA with featuresB + +### indices + +```ts +indices: never[] = []; +``` + +### value + +```ts +value: number = featureArea; +``` diff --git a/website/docs/api/geoprocessing/functions/intersectSum.md b/website/docs/api/geoprocessing/functions/intersectSum.md new file mode 100644 index 0000000000..637fe85908 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/intersectSum.md @@ -0,0 +1,38 @@ +# intersectSum() + +```ts +function intersectSum( + featureA, + featuresB, + sumProperty?): object +``` + +Sums the value of intersecting features. No support for partial, counts the whole feature + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `featureA` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | single feature to intersect with featuresB | +| `featuresB` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[] | array of features | +| `sumProperty`? | `string` | Property in featuresB with value to sum, if not defined each feature will count as 1 | + +## Returns + +`object` + +Sum of features/feature property which overlap with the sketch, and a list of +indices for features that overlap with the sketch to be used in calculating total sum of +the sketch collection + +### indices + +```ts +indices: number[]; +``` + +### value + +```ts +value: number = sketchValue; +``` diff --git a/website/docs/api/dataproviders/functions/loadCog.md b/website/docs/api/geoprocessing/functions/loadCog.md similarity index 100% rename from website/docs/api/dataproviders/functions/loadCog.md rename to website/docs/api/geoprocessing/functions/loadCog.md diff --git a/website/docs/api/geoprocessing/functions/loadFgb.md b/website/docs/api/geoprocessing/functions/loadFgb.md new file mode 100644 index 0000000000..ff25d6e944 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/loadFgb.md @@ -0,0 +1,25 @@ +# loadFgb() + +```ts +function loadFgb(url, box?): Promise +``` + +Fetch features from flatgeobuf at url that intersect with bounding box +Awaits all features before returning, rather than streaming them. + +## Type Parameters + +| Type Parameter | +| ------ | +| `F` *extends* [`Feature`](../interfaces/Feature.md)\<[`Geometry`](../type-aliases/Geometry.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `url` | `string` | +| `box`? | [`BBox`](../type-aliases/BBox.md) | + +## Returns + +`Promise`\<`F`[]\> diff --git a/website/docs/api/geoprocessing/functions/numberFormat.md b/website/docs/api/geoprocessing/functions/numberFormat.md new file mode 100644 index 0000000000..4f9690143a --- /dev/null +++ b/website/docs/api/geoprocessing/functions/numberFormat.md @@ -0,0 +1,17 @@ +# numberFormat() + +```ts +function numberFormat(val): string +``` + +Formats number to string, if less than zero will leave as-is, otherwise will format as large number + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `val` | `number` | + +## Returns + +`string` diff --git a/website/docs/api/geoprocessing/functions/overlapArea.md b/website/docs/api/geoprocessing/functions/overlapArea.md index 0bdbd0363a..fd7fcd6d96 100644 --- a/website/docs/api/geoprocessing/functions/overlapArea.md +++ b/website/docs/api/geoprocessing/functions/overlapArea.md @@ -1,4 +1,4 @@ -# ~~overlapArea()~~ +# overlapArea() ```ts function overlapArea( @@ -26,7 +26,3 @@ calculates the area of each sketch and the proportion of outerArea they take up. ## Returns `Promise`\<[`Metric`](../type-aliases/Metric.md)[]\> - -## Deprecated - -- using geographies will clip your datasources and you can just use overlapFeatures diff --git a/website/docs/api/geoprocessing/functions/overlapFeatures.md b/website/docs/api/geoprocessing/functions/overlapFeatures.md index 7eb8535fbb..4e3838d28d 100644 --- a/website/docs/api/geoprocessing/functions/overlapFeatures.md +++ b/website/docs/api/geoprocessing/functions/overlapFeatures.md @@ -16,11 +16,13 @@ If sketch collection includes overall and per sketch | Parameter | Type | Description | | ------ | ------ | ------ | -| `metricId` | `string` | - | -| `features` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[] | features to intersect and get overlap stats | +| `metricId` | `string` | unique metric identifier to assign to each metric | +| `features` | [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md), [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\>[] | to intersect and get overlap stats | | `sketch` | [`SketchCollection`](../interfaces/SketchCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| [`Sketch`](../interfaces/Sketch.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| [`Sketch`](../interfaces/Sketch.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\>[] | the sketches. If empty will return 0 result. | -| `options`? | `Partial`\<`OverlapFeatureOptions`\> | - | +| `options`? | `Partial`\<`OverlapFeatureOptions`\> | | ## Returns `Promise`\<[`Metric`](../type-aliases/Metric.md)[]\> + +array of Metric objects diff --git a/website/docs/api/geoprocessing/functions/overlapGroupMetrics.md b/website/docs/api/geoprocessing/functions/overlapGroupMetrics.md index 5d2f857ac2..4128ab27c9 100644 --- a/website/docs/api/geoprocessing/functions/overlapGroupMetrics.md +++ b/website/docs/api/geoprocessing/functions/overlapGroupMetrics.md @@ -4,7 +4,7 @@ function overlapGroupMetrics(options): Promise ``` -Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group +Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group Assumes a sketch is member of only one group, determined by caller-provided metricToGroup For each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first) Types of metrics returned: diff --git a/website/docs/api/geoprocessing/functions/overlapRaster.md b/website/docs/api/geoprocessing/functions/overlapRaster.md deleted file mode 100644 index 9dfd892808..0000000000 --- a/website/docs/api/geoprocessing/functions/overlapRaster.md +++ /dev/null @@ -1,29 +0,0 @@ -# ~~overlapRaster()~~ - -```ts -function overlapRaster( - metricId, - raster, - sketch, -options?): Promise -``` - -Returns metrics representing sketch overlap with raster. -If sketch collection, then calculate overlap for all child sketches also - -## Parameters - -| Parameter | Type | Description | -| ------ | ------ | ------ | -| `metricId` | `string` | metricId value to assign to each measurement | -| `raster` | `Georaster` | Cloud-optimized geotiff to calculate overlap with, loaded via loadCog or geoblaze.parse() | -| `sketch` | [`SketchCollection`](../interfaces/SketchCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| [`Sketch`](../interfaces/Sketch.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> | single sketch or collection to calculate metrics for. | -| `options`? | `Partial`\<`OverlapRasterOptions`\> | - | - -## Returns - -`Promise`\<[`Metric`](../type-aliases/Metric.md)[]\> - -## Deprecated - -- switch to overlapRasterSum diff --git a/website/docs/api/geoprocessing/functions/overlapRasterClass.md b/website/docs/api/geoprocessing/functions/overlapRasterClass.md index d107d494e2..b93d8bef84 100644 --- a/website/docs/api/geoprocessing/functions/overlapRasterClass.md +++ b/website/docs/api/geoprocessing/functions/overlapRasterClass.md @@ -1,4 +1,4 @@ -# overlapRasterClass() +# ~~overlapRasterClass()~~ ```ts function overlapRasterClass( @@ -25,3 +25,7 @@ If sketch collection, then calculate overlap for all child sketches also ## Returns `Promise`\<[`Metric`](../type-aliases/Metric.md)[]\> + +## Deprecated + +use rasterMetrics instead diff --git a/website/docs/api/geoprocessing/functions/overlapSubarea.md b/website/docs/api/geoprocessing/functions/overlapSubarea.md index 73b6a52ead..b582f87b1c 100644 --- a/website/docs/api/geoprocessing/functions/overlapSubarea.md +++ b/website/docs/api/geoprocessing/functions/overlapSubarea.md @@ -30,4 +30,4 @@ For sketch collections, dissolve is used when calculating total sketch area to p ## Deprecated -- using geographies will clip your datasources and you can just use overlapFeatures +- using geographies will clip your datasources and you can just use overlapFeatures. This will be removed in a future version diff --git a/website/docs/api/geoprocessing/functions/rasterMetrics.md b/website/docs/api/geoprocessing/functions/rasterMetrics.md index cb281c2d71..da3ace66f4 100644 --- a/website/docs/api/geoprocessing/functions/rasterMetrics.md +++ b/website/docs/api/geoprocessing/functions/rasterMetrics.md @@ -4,15 +4,16 @@ function rasterMetrics(raster, options): Promise ``` -Calculates stats on the provided raster and returns as an array of Metric objects (defaults to sum stat) -If sketch, then calculate overlap metrics, sketch collection will calculate metrics for each individual sketch within +Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics). +If feature is a collection, then calculate metrics for each individual feature as well as the collection as a whole. +This can be disabled with includeChildMetrics: false. Defaults to assuming a continuous raster but also supports categorical option ## Parameters | Parameter | Type | Description | | ------ | ------ | ------ | | `raster` | `Georaster` | Cloud-optimized geotiff, loaded via loadCog or geoblaze.parse() | -| `options` | `OverlapRasterOptions` | - | +| `options` | [`OverlapRasterOptions`](../interfaces/OverlapRasterOptions.md) | - | ## Returns diff --git a/website/docs/api/geoprocessing/functions/rasterStats.md b/website/docs/api/geoprocessing/functions/rasterStats.md index 40d4fa5b46..a93c5b741b 100644 --- a/website/docs/api/geoprocessing/functions/rasterStats.md +++ b/website/docs/api/geoprocessing/functions/rasterStats.md @@ -4,7 +4,7 @@ function rasterStats(raster, options): Promise ``` -Calculates over 10 different raster stats, optionally constrains to raster cells overlapping with feature. +Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics). Defaults to calculating only sum stat If no cells found, returns 0 or null value for each stat as appropriate. diff --git a/website/docs/api/geoprocessing/functions/rasterStatsToMetrics.md b/website/docs/api/geoprocessing/functions/rasterStatsToMetrics.md index f76dea4756..9b1a39715a 100644 --- a/website/docs/api/geoprocessing/functions/rasterStatsToMetrics.md +++ b/website/docs/api/geoprocessing/functions/rasterStatsToMetrics.md @@ -4,7 +4,7 @@ function rasterStatsToMetrics(statsObjects, options): object[] ``` -Converts an array of geoblaze raster StatsObjects to an array of Metrics +Converts an array of geoblaze raster StatsObject to an array of Metrics ## Parameters diff --git a/website/docs/api/geoprocessing/functions/roundDecimal.md b/website/docs/api/geoprocessing/functions/roundDecimal.md index 0b91ebfe8b..13bffe3021 100644 --- a/website/docs/api/geoprocessing/functions/roundDecimal.md +++ b/website/docs/api/geoprocessing/functions/roundDecimal.md @@ -7,7 +7,7 @@ function roundDecimal( options): number ``` -Rounds a number to a fixed precision +Rounds number to a fixed number of decimals ## Parameters @@ -15,8 +15,10 @@ Rounds a number to a fixed precision | ------ | ------ | ------ | ------ | | `value` | `number` | `undefined` | Value to round | | `decimals` | `number` | `1` | Number of digits after the decimal point to keep | -| `options` | [`RoundDecimalOptions`](../interfaces/RoundDecimalOptions.md) | `...` | - | +| `options` | [`RoundDecimalOptions`](../interfaces/RoundDecimalOptions.md) | `{}` | - | ## Returns `number` + +rounded number diff --git a/website/docs/api/geoprocessing/functions/roundDecimalFormat.md b/website/docs/api/geoprocessing/functions/roundDecimalFormat.md new file mode 100644 index 0000000000..b8bf4562c4 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/roundDecimalFormat.md @@ -0,0 +1,24 @@ +# roundDecimalFormat() + +```ts +function roundDecimalFormat( + value, + decimals, + options): string +``` + +Rounds number to a fixed number of decimals, then formats as a human readable string + +## Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `value` | `number` | `undefined` | Value to round | +| `decimals` | `number` | `1` | Number of digits after the decimal point to keep | +| `options` | [`RoundDecimalOptions`](../interfaces/RoundDecimalOptions.md) | `{}` | - | + +## Returns + +`string` + +rounded number as a human readable string diff --git a/website/docs/api/geoprocessing/functions/roundLower.md b/website/docs/api/geoprocessing/functions/roundLower.md index 12eeccae60..53d481512d 100644 --- a/website/docs/api/geoprocessing/functions/roundLower.md +++ b/website/docs/api/geoprocessing/functions/roundLower.md @@ -4,7 +4,7 @@ function roundLower(val, __namedParameters): string ``` -Formats number to string, rounding decimal to number of digits, with special handling of minimum bound +Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value ## Parameters diff --git a/website/docs/api/geoprocessing/functions/splitBBoxAntimeridian.md b/website/docs/api/geoprocessing/functions/splitBBoxAntimeridian.md new file mode 100644 index 0000000000..8c6d5641d8 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/splitBBoxAntimeridian.md @@ -0,0 +1,20 @@ +# splitBBoxAntimeridian() + +```ts +function splitBBoxAntimeridian(bbox): number[][] +``` + +If bounding box crosses antimeridian (and extends outside the range of -180 to 180), +split it into two bounding boxes at the antimeridian. + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `bbox` | [`BBox`](../type-aliases/BBox.md) | the bounding box to split | + +## Returns + +`number`[][] + +array of one or two bounding boxes diff --git a/website/docs/api/geoprocessing/functions/splitFeatureAntimeridian.md b/website/docs/api/geoprocessing/functions/splitFeatureAntimeridian.md index bb851065a1..208787858d 100644 --- a/website/docs/api/geoprocessing/functions/splitFeatureAntimeridian.md +++ b/website/docs/api/geoprocessing/functions/splitFeatureAntimeridian.md @@ -4,7 +4,9 @@ function splitFeatureAntimeridian(feature): Feature | FeatureCollection ``` -Splits a Feature or FeatureCollection on the 180 degree antimeridian +Splits a Feature or FeatureCollection on the 180 degree antimeridian. +The bbox property of the result will have longitude coordinates that are +shifted/normalized to be within the range of -180 to 180. ## Type Parameters @@ -16,8 +18,10 @@ Splits a Feature or FeatureCollection on the 180 degree antimeridian | Parameter | Type | Description | | ------ | ------ | ------ | -| `feature` | [`Feature`](../interfaces/Feature.md)\<`G`, [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> \| [`FeatureCollection`](../interfaces/FeatureCollection.md)\<`G`, [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | | +| `feature` | [`Feature`](../interfaces/Feature.md)\<`G`, [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> \| [`FeatureCollection`](../interfaces/FeatureCollection.md)\<`G`, [`GeoJsonProperties`](../type-aliases/GeoJsonProperties.md)\> | the feature or feature collection to split | ## Returns [`Feature`](../interfaces/Feature.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| [`FeatureCollection`](../interfaces/FeatureCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> + +the split feature or feature collection diff --git a/website/docs/api/geoprocessing/functions/splitSketchAntimeridian.md b/website/docs/api/geoprocessing/functions/splitSketchAntimeridian.md index a6b57a8df5..faddbd6c5a 100644 --- a/website/docs/api/geoprocessing/functions/splitSketchAntimeridian.md +++ b/website/docs/api/geoprocessing/functions/splitSketchAntimeridian.md @@ -5,6 +5,8 @@ function splitSketchAntimeridian(sketch): Sketch | Sk ``` Splits a Sketch or SketchCollection on the 180 degree antimeridian +The bbox property of the result will have longitude coordinates that are +shifted/normalized to be within the range of -180 to 180. ## Type Parameters @@ -16,8 +18,10 @@ Splits a Sketch or SketchCollection on the 180 degree antimeridian | Parameter | Type | Description | | ------ | ------ | ------ | -| `sketch` | [`Sketch`](../interfaces/Sketch.md)\<`G`\> \| [`SketchCollection`](../interfaces/SketchCollection.md)\<`G`\> | | +| `sketch` | [`Sketch`](../interfaces/Sketch.md)\<`G`\> \| [`SketchCollection`](../interfaces/SketchCollection.md)\<`G`\> | the sketch or sketch collection to split | ## Returns [`Sketch`](../interfaces/Sketch.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> \| [`SketchCollection`](../interfaces/SketchCollection.md)\<[`Polygon`](../interfaces/Polygon.md) \| [`MultiPolygon`](../interfaces/MultiPolygon.md)\> + +the split sketch or sketch collection diff --git a/website/docs/api/geoprocessing/functions/squareMeterToKilometer.md b/website/docs/api/geoprocessing/functions/squareMeterToKilometer.md index a8fddaab84..17bc25db58 100644 --- a/website/docs/api/geoprocessing/functions/squareMeterToKilometer.md +++ b/website/docs/api/geoprocessing/functions/squareMeterToKilometer.md @@ -4,12 +4,16 @@ function squareMeterToKilometer(value): number ``` +Converts value from square meters to square kilometers + ## Parameters -| Parameter | Type | -| ------ | ------ | -| `value` | `number` | +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `value` | `number` | in square meters | ## Returns `number` + +value in square kilometers diff --git a/website/docs/api/geoprocessing/functions/squareMeterToMile.md b/website/docs/api/geoprocessing/functions/squareMeterToMile.md index c1d7e3677c..7fddca548a 100644 --- a/website/docs/api/geoprocessing/functions/squareMeterToMile.md +++ b/website/docs/api/geoprocessing/functions/squareMeterToMile.md @@ -4,12 +4,16 @@ function squareMeterToMile(value): number ``` +Converts value from square meters to square miles + ## Parameters -| Parameter | Type | -| ------ | ------ | -| `value` | `number` | +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `value` | `number` | in square meters | ## Returns `number` + +value in square miles diff --git a/website/docs/api/geoprocessing/functions/toChildProperties.md b/website/docs/api/geoprocessing/functions/toChildProperties.md new file mode 100644 index 0000000000..f792e37bce --- /dev/null +++ b/website/docs/api/geoprocessing/functions/toChildProperties.md @@ -0,0 +1,17 @@ +# toChildProperties() + +```ts +function toChildProperties(sketchCollection): SketchProperties[] +``` + +Returns SketchProperties for each child sketch in a SketchCollection + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `sketchCollection` | [`SketchCollection`](../interfaces/SketchCollection.md)\<[`SketchGeometryTypes`](../type-aliases/SketchGeometryTypes.md)\> | + +## Returns + +[`SketchProperties`](../type-aliases/SketchProperties.md)[] diff --git a/website/docs/api/geoprocessing/functions/toPercentMetric.md b/website/docs/api/geoprocessing/functions/toPercentMetric.md index 4eba7cb8c7..23e8c737e1 100644 --- a/website/docs/api/geoprocessing/functions/toPercentMetric.md +++ b/website/docs/api/geoprocessing/functions/toPercentMetric.md @@ -8,9 +8,14 @@ function toPercentMetric( ``` Matches numerator metrics with denominator metrics and divides their value, -returning a new array of percent metrics. If denominator metric has value of 0, returns NaN +returning a new array of percent metrics. Matches on the optional idProperty given, otherwise defaulting to classId Deep copies and maintains all other properties from the numerator metric +If denominator metric has value of 0, returns NaN + NaN allows downstream consumers to understand this isn't just any 0. + It's an opportunity to tell the user that no matter where they put their sketch, there is no way for the value to be more than zero. + For example, the ClassTable component looks for `NaN` metric values and will automatically display 0%, + along with an informative popover explaining that no data class features are within the current geography. ## Parameters @@ -27,4 +32,4 @@ Deep copies and maintains all other properties from the numerator metric `object`[] -Metric[] of percent values +Metric[] of percent values or NaN if denominator was 0 diff --git a/website/docs/api/geoprocessing/functions/toSketchArray.md b/website/docs/api/geoprocessing/functions/toSketchArray.md index e6d2c47c0a..798895c4ca 100644 --- a/website/docs/api/geoprocessing/functions/toSketchArray.md +++ b/website/docs/api/geoprocessing/functions/toSketchArray.md @@ -4,7 +4,8 @@ function toSketchArray(input): Sketch[] ``` -Helper to convert a Sketch or SketchCollection to a Sketch array, maintaining geometry type +Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type +Useful for putting in a consistent form that can be iterated over ## Type Parameters @@ -14,10 +15,12 @@ Helper to convert a Sketch or SketchCollection to a Sketch array, maintaining ge ## Parameters -| Parameter | Type | -| ------ | ------ | -| `input` | [`Sketch`](../interfaces/Sketch.md)\<`G`\> \| [`SketchCollection`](../interfaces/SketchCollection.md)\<`G`\> | +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `input` | [`Sketch`](../interfaces/Sketch.md)\<`G`\> \| [`SketchCollection`](../interfaces/SketchCollection.md)\<`G`\> | sketch or sketch collection | ## Returns [`Sketch`](../interfaces/Sketch.md)\<`G`\>[] + +array of sketches, if input is a sketch collection then it is the child sketches diff --git a/website/docs/api/geoprocessing/functions/toSketchPropertiesArray.md b/website/docs/api/geoprocessing/functions/toSketchPropertiesArray.md new file mode 100644 index 0000000000..2f3f2fe079 --- /dev/null +++ b/website/docs/api/geoprocessing/functions/toSketchPropertiesArray.md @@ -0,0 +1,17 @@ +# toSketchPropertiesArray() + +```ts +function toSketchPropertiesArray(sketchArray): SketchProperties[] +``` + +Converts array of sketches to an array of their SketchProperties + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `sketchArray` | [`NullSketch`](../interfaces/NullSketch.md)[] \| [`Sketch`](../interfaces/Sketch.md)\<[`SketchGeometryTypes`](../type-aliases/SketchGeometryTypes.md)\>[] | + +## Returns + +[`SketchProperties`](../type-aliases/SketchProperties.md)[] diff --git a/website/docs/api/geoprocessing/index.md b/website/docs/api/geoprocessing/index.md index ca8aaa19a0..8039ebd731 100644 --- a/website/docs/api/geoprocessing/index.md +++ b/website/docs/api/geoprocessing/index.md @@ -21,7 +21,7 @@ | ------ | ------ | | [BaseImportDatasourceConfig](interfaces/BaseImportDatasourceConfig.md) | - | | [CalcStatsOptions](interfaces/CalcStatsOptions.md) | options accepted by geoblaze.stats() to calc-stats library See https://github.com/DanielJDufour/calc-stats/tree/main?tab=readme-ov-file#advanced-usage | -| [ClipOptions](interfaces/ClipOptions.md) | Optional parameters for preprocessor function | +| [ClipOptions](interfaces/ClipOptions.md) | Optional parameters for polygon clip preprocessor | | [DatasourceClipOperation](interfaces/DatasourceClipOperation.md) | Parameters for clip operation using a datasource | | [DatasourceOptions](interfaces/DatasourceOptions.md) | - | | [DefaultExtraParams](interfaces/DefaultExtraParams.md) | Common set of extra parameters that might be passed to a geoprocessing function Replace or extend these as needed, there is nothing special about the param names other than to be descriptive of what they represent. | @@ -30,6 +30,7 @@ | [FeatureCollection](interfaces/FeatureCollection.md) | A collection of feature objects. https://tools.ietf.org/html/rfc7946#section-3.3 | | [FeatureMap](interfaces/FeatureMap.md) | A simple map of features keyed by their name | | [FeatureTree](interfaces/FeatureTree.md) | - | +| [FgBoundingBox](interfaces/FgBoundingBox.md) | - | | [GeogProp](interfaces/GeogProp.md) | - | | [GeometryCollection](interfaces/GeometryCollection.md) | Geometry Collection https://tools.ietf.org/html/rfc7946#section-3.1.8 | | [GeoprocessingHandlerOptions](interfaces/GeoprocessingHandlerOptions.md) | - | @@ -52,6 +53,7 @@ | [Node](interfaces/Node.md) | - | | [NullSketch](interfaces/NullSketch.md) | - | | [NullSketchCollection](interfaces/NullSketchCollection.md) | - | +| [OverlapRasterOptions](interfaces/OverlapRasterOptions.md) | options accepted by rasterStats | | [PercentEdgeOptions](interfaces/PercentEdgeOptions.md) | - | | [Point](interfaces/Point.md) | Point geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.2 | | [Polygon](interfaces/Polygon.md) | Polygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.6 | @@ -109,16 +111,21 @@ | [classIdMapping](functions/classIdMapping.md) | Returns mapping of class ID to class DataClass objects | | [classifyMPA](functions/classifyMPA.md) | Given zone scores, returns object containing final scores, and mpa classification | | [classifyZone](functions/classifyZone.md) | Given activity scores, returns zone number | +| [cleanBBox](functions/cleanBBox.md) | Normalizes bounding box longitude values to the [-180, 180] range if they cross the antimeridian | | [cleanCoords](functions/cleanCoords.md) | Cleans geojson coordinates to be within the bounds of the world [-90, -180, 90, 180], so that they don't wrap off the end, and can be split | -| [clip](functions/clip.md) | Performs clip operation on features | -| [clipMultiMerge](functions/clipMultiMerge.md) | Performs clip by merging features2 coords into a single multipolygon. Useful when you need features2 to be seen as a single unit when clipping feature1 (e.g. intersection) | -| [clipToPolygonFeatures](functions/clipToPolygonFeatures.md) | Takes a Polygon feature and returns the portion remaining after performing clipOperations If results in multiple polygons then returns the largest | +| [clip](functions/clip.md) | Performs one of 4 different clip operations on features | +| [clipMultiMerge](functions/clipMultiMerge.md) | Performs clip after first merging features2 coords into a single multipolygon. Avoids errors in underlying clipping library when too many features in features2 | +| [clipToPolygonDatasources](functions/clipToPolygonDatasources.md) | Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources | +| [clipToPolygonFeatures](functions/clipToPolygonFeatures.md) | Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more Polygon features | | [collectionHasGeometry](functions/collectionHasGeometry.md) | - | | [createMetric](functions/createMetric.md) | Creates a new metric. Defaults to ID values of null and then copies in passed metric properties | | [createMetrics](functions/createMetrics.md) | Creates fully defined metrics from partial. Metric values not provided are initialized to null | +| [ensureValidPolygon](functions/ensureValidPolygon.md) | Returns true if feature is valid and meets requirements set by options. | | [featureToSketch](functions/featureToSketch.md) | Converts Feature to Sketch with reasonable defaults given for sketch properties if not provided | | [featureToSketchCollection](functions/featureToSketchCollection.md) | Converts FeatureCollection to SketchCollection with reasonable defaults given for sketch properties if not provided | | [fetchGeoJSON](functions/fetchGeoJSON.md) | Given geoprocessing function request, fetches the GeoJSON, which can also be sketch JSON | +| [fgbFetchAll](functions/fgbFetchAll.md) | Fetch features from flatgeobuf at url within bounding box Awaits all features before returning, rather than streaming them. | +| [fgBoundingBox](functions/fgBoundingBox.md) | - | | [findAndUpdateMetricValue](functions/findAndUpdateMetricValue.md) | Returns new sketchMetrics array with first sketchMetric matched set with new value. If no match, returns copy of sketchMetrics. Does not mutate array in place. | | [firstMatching](functions/firstMatching.md) | Returns the first item that returns true for filter | | [firstMatchingMetric](functions/firstMatchingMetric.md) | Returns the first metric that returns true for metricFilter | @@ -127,9 +134,11 @@ | [flattenBySketchAllClass](functions/flattenBySketchAllClass.md) | Flattens class sketch metrics into array of objects, one for each sketch, where each object contains sketch id, sketch name, and all metric values for each class | | [flattenSketchAllId](functions/flattenSketchAllId.md) | Returns one aggregate object for every sketch ID present in metrics, with additional property for each unique value for idProperty present for sketch. Example - idProperty of 'classId', and two classes are present in metrics of 'classA', and 'classB' then each flattened object will have two extra properties per sketch, .classA and .classB, each with the first metric value for that sketch/idProperty found | | [gearTypeScore](functions/gearTypeScore.md) | - | +| [genClipLoader](functions/genClipLoader.md) | Given a project client and 1 or more clip operations, returns a function that when called loads clip features from their datasources that overlap with the feature polygon to clip. Pass this function to genPreprocessor() and it will take care of the rest. | +| [genClipToPolygonDatasources](functions/genClipToPolygonDatasources.md) | Returns a function that Takes a Polygon feature and returns the portion remaining after performing clipOperations against one or more datasources | +| [genClipToPolygonFeatures](functions/genClipToPolygonFeatures.md) | Returns a function that applies clip operations to a feature using other polygon features. | | [genFeature](functions/genFeature.md) | Returns a Feature with given features geometry and properties. Reasonable defaults are given for properties not provided Default geometry is a square from 0,0 to 1,1 | | [genFeatureCollection](functions/genFeatureCollection.md) | Given array of features, return a feature collection with given properties. Generates reasonable default values for any properties not passed in The geometry type of the returned collection will match the one passed in Properties of features are retained | -| [genPreprocessor](functions/genPreprocessor.md) | Returns a preprocessor function given clipLoader function | | [genRandomPolygons](functions/genRandomPolygons.md) | Generates random polygons within provided bounds. numPolygons defaults to 300, max_radial_length to 0.5 Wrapper around @turf/random - https://turfjs.org/docs/#randomPolygon | | [genSampleNullSketch](functions/genSampleNullSketch.md) | Returns a Sketch with given geometry and Geometry type, Properties are reasonable random | | [genSampleNullSketchCollection](functions/genSampleNullSketchCollection.md) | Given feature collection, return a sketch collection with reasonable random props. The geometry type of the returned collection will match the one passed in | @@ -142,13 +151,15 @@ | [genSketchCollection](functions/genSketchCollection.md) | Given array of sketches, return a sketch collection with given properties. Generates reasonable default values for any properties not passed in The geometry type of the returned collection will match the one passed in Properties of sketches are retained | | [genTaskCacheKey](functions/genTaskCacheKey.md) | Generates a cache key for a geoprocessing request, given sketch properties and optional extra parameters (must be JSON compatible object) Extra parameters are canonicalized and hashed using md5 to ensure cache key is consistent. Canonicalization ensures object keys are consistent but not arrays. If you use arrays as extraParam values, make sure the order stays the same and sort first if needed to generate a consistent cache key. | | [genZodErrorMessage](functions/genZodErrorMessage.md) | - | -| [getArea](functions/getArea.md) | Returns area of valid cells (not nodata) overlapping with feature. If no valid cells found, returns 0. | +| [getArea](functions/getArea.md) | Returns area of valid raster cells (not nodata) overlapping with feature. If no valid cells found, returns 0. | | [getClassificationLabel](functions/getClassificationLabel.md) | - | | [getCogFilename](functions/getCogFilename.md) | - | | [getDatasetBucketName](functions/getDatasetBucketName.md) | - | | [getDatasourceById](functions/getDatasourceById.md) | find and return datasource from passed datasources | | [getExternalRasterDatasourceById](functions/getExternalRasterDatasourceById.md) | find and return external raster datasource from passed datasources | | [getExternalVectorDatasourceById](functions/getExternalVectorDatasourceById.md) | find and return external vector datasource from passed datasources | +| [getFeatures](functions/getFeatures.md) | Returns features for a variety of vector datasources and formats, with additional filter options | +| [getFeaturesForSketchBBoxes](functions/getFeaturesForSketchBBoxes.md) | Loads features from a FlatGeobuf referenced by URL, which intersect the bounding boxes of each individual sketch in a SketchCollection, or a single Sketch. | | [getFirstFromParam](functions/getFirstFromParam.md) | Returns first element from param object at paramName key. Parameter can be string or array of strings | | [getFlatGeobufFilename](functions/getFlatGeobufFilename.md) | Returns datasource filename in flatgeobuf format | | [getFlatGeobufPath](functions/getFlatGeobufPath.md) | - | @@ -165,8 +176,8 @@ | [getJsonPath](functions/getJsonPath.md) | - | | [getJsonUserAttribute](functions/getJsonUserAttribute.md) | - | | [getKeys](functions/getKeys.md) | Object.keys helper that returns strongly typed key values. Uses assertion so make sure your type covers all the keys! | -| [getMetricGroupObjectiveId](functions/getMetricGroupObjectiveId.md) | Returns the top-level objective assigned for the given MetricGroup. If a classID is also passed, returns the objective ID for that class within the metric group | -| [getMetricGroupObjectiveIds](functions/getMetricGroupObjectiveIds.md) | Returns array of all objective IDs configured for the given MetricGroup. If a class does not have an objectiveId assigned, then it gets the top-level objectiveId | +| [getMetricGroupObjectiveId](functions/getMetricGroupObjectiveId.md) | Returns the objectiveId assigned to the given MetricGroup. If classId provided, returns the objective ID assigned to data class with that classId, else fallback to metricGroup objectiveId. | +| [getMetricGroupObjectiveIds](functions/getMetricGroupObjectiveIds.md) | Returns array of objective IDs for the given MetricGroup. If at least one class has an objectiveId assigned, then it returns those, missing classes with no objectiveId get the top-level objectiveId If no class-level objectives are found, then it returns the top-level objectiveId If no objectives are found, returns an empty array | | [getMinYesCountMap](functions/getMinYesCountMap.md) | Returns an object mapping objective ID to ID of first classification that counts toward objective | | [getMpaClassificationName](functions/getMpaClassificationName.md) | Returns protection level given MPA classification index value | | [getObjectiveById](functions/getObjectiveById.md) | find and return objectives from passed objectives | @@ -176,13 +187,16 @@ | [getSketchCollectionChildIds](functions/getSketchCollectionChildIds.md) | Given sketch collection, returns IDs of sketches in the collection | | [getSketchFeatures](functions/getSketchFeatures.md) | Given sketch or sketch collection, returns just the individual sketch features inside. | | [getSketchToMpaProtectionLevel](functions/getSketchToMpaProtectionLevel.md) | Returns object mapping sketch id to MPA classification given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes, and area metrics for each sketch, assumes each mpa is a single zone mpa | -| [getSum](functions/getSum.md) | Returns sum of value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0. | +| [getSum](functions/getSum.md) | Returns sum of raster value overlap with geometry. If no cells with a value are found within the geometry overlap, returns 0. | | [getUserAttribute](functions/getUserAttribute.md) | UserAttributes are those filled in via the attributes form specified as part of a SketchClass. This getter function is easier to use than searching the Sketch.properties.userAttributes array, supports default values, and is easier to use with typescript. | | [getVectorDatasourceById](functions/getVectorDatasourceById.md) | find and return vector datasource (internal or external) from passed datasources | | [getZoneClassificationName](functions/getZoneClassificationName.md) | - | | [groupBy](functions/groupBy.md) | Similar to lodash groupBy | | [hasOwnProperty](functions/hasOwnProperty.md) | Type narrowing to allow property checking when object can be multiple types https://fettblog.eu/typescript-hasownproperty/ Any code inside a block guarded by a conditional call to this function will have type narrowed to X | | [includeVirtualSketch](functions/includeVirtualSketch.md) | If sketch collection passes sketchTest, then returns new collection with mergeSketchColl sketches appended and updated bbox | +| [intersectInChunks](functions/intersectInChunks.md) | Calculates area overlap between a feature A and a feature array B. Intersection is done in chunks on featuresB to avoid errors due to too many features | +| [intersectInChunksArea](functions/intersectInChunksArea.md) | Calculates area overlap between a feature A and a feature array B. Intersection is done in chunks on featuresB to avoid errors due to too many features | +| [intersectSum](functions/intersectSum.md) | Sums the value of intersecting features. No support for partial, counts the whole feature | | [isExternalDatasource](functions/isExternalDatasource.md) | - | | [isExternalRasterDatasource](functions/isExternalRasterDatasource.md) | - | | [isExternalVectorDatasource](functions/isExternalVectorDatasource.md) | - | @@ -220,6 +234,8 @@ | [isTruthyAttributeValue](functions/isTruthyAttributeValue.md) | - | | [isVectorDatasource](functions/isVectorDatasource.md) | - | | [keyBy](functions/keyBy.md) | Similar to lodash keyBy | +| [loadCog](functions/loadCog.md) | Returns cog-aware georaster at given url. Will not fetch raster values until subsequent geoblaze calls are made with a geometry and it will calculate the window to load based on the geometry. The subsequent geoblaze calls (e.g. sum) must be called async to allow the raster to load. | +| [loadFgb](functions/loadFgb.md) | Fetch features from flatgeobuf at url that intersect with bounding box Awaits all features before returning, rather than streaming them. | | [maxWidth](functions/maxWidth.md) | Returns the maximum width of the geojson or bbox | | [metricsForSketch](functions/metricsForSketch.md) | Returns metrics for given sketch (can be an array of sketches) | | [metricsSketchIds](functions/metricsSketchIds.md) | Returns metrics with matching sketchId (can be an array of sketchids) | @@ -229,12 +245,12 @@ | [mpaClassMetric](functions/mpaClassMetric.md) | Given sketch for rbcsMpa with rbcs activity userAttributes, assumes mpa is a single zone mpa and returns metrics with mpa classification score | | [mpaClassMetrics](functions/mpaClassMetrics.md) | Given sketch for rbcsMpa or collection of sketches for rbcsMpas with rbcs activity userAttributes, assumes each mpa is a single zone mpa and returns metrics with mpa classification score Collection metric will have mpa classification score index as value | | [nestMetrics](functions/nestMetrics.md) | Recursively groups metrics by ID in order of ids specified to create arbitrary nested hierarchy for fast lookup. Caller responsible for all metrics having the ID properties defined If an id property is not defined on a metric, then 'undefined' will be used for the key | +| [numberFormat](functions/numberFormat.md) | Formats number to string, if less than zero will leave as-is, otherwise will format as large number | | [overlapArea](functions/overlapArea.md) | Assuming sketches are within some outer boundary with size outerArea, calculates the area of each sketch and the proportion of outerArea they take up. | | [overlapAreaGroupMetrics](functions/overlapAreaGroupMetrics.md) | Generate overlap group metrics using overlapArea operation | | [overlapFeatures](functions/overlapFeatures.md) | Calculates overlap between sketch(es) and an array of polygon features. Supports area or sum operation (given sumProperty), defaults to area If sketch collection includes overall and per sketch | | [overlapFeaturesGroupMetrics](functions/overlapFeaturesGroupMetrics.md) | Generate overlap group metrics using overlapFeatures operation | -| [overlapGroupMetrics](functions/overlapGroupMetrics.md) | Given area overlap metrics stratified by class and sketch, returns new metrics also stratified by group Assumes a sketch is member of only one group, determined by caller-provided metricToGroup For each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first) Types of metrics returned: sketch metrics: copy of caller-provided sketch metrics with addition of group ID overall metric for each group+class: takes sketches in group, subtracts overlap between them and overlap with higher group sketches, and runs operation If a group has no sketches in it, then no group metrics will be included for that group, and group+class metric will be 0 | -| [overlapRaster](functions/overlapRaster.md) | Returns metrics representing sketch overlap with raster. If sketch collection, then calculate overlap for all child sketches also | +| [overlapGroupMetrics](functions/overlapGroupMetrics.md) | Given overlap metrics stratified by class and sketch, returns new metrics also stratified by group Assumes a sketch is member of only one group, determined by caller-provided metricToGroup For each group+class, calculates area of overlap between sketches in group and featuresByClass (with overlap between group sketches removed first) Types of metrics returned: sketch metrics: copy of caller-provided sketch metrics with addition of group ID overall metric for each group+class: takes sketches in group, subtracts overlap between them and overlap with higher group sketches, and runs operation If a group has no sketches in it, then no group metrics will be included for that group, and group+class metric will be 0 | | [overlapRasterClass](functions/overlapRasterClass.md) | Calculates sum of overlap between sketches and a categorical raster with numeric values representing feature classes If sketch collection, then calculate overlap for all child sketches also | | [overlapRasterGroupMetrics](functions/overlapRasterGroupMetrics.md) | Generate overlap group metrics using rasterMetrics operation | | [overlapSubarea](functions/overlapSubarea.md) | Returns area stats for sketch input after performing overlay operation against a subarea feature. Includes both area overlap and percent area overlap metrics, because calculating percent later would be too complicated For sketch collections, dissolve is used when calculating total sketch area to prevent double counting | @@ -245,17 +261,18 @@ | [percentWithEdge](functions/percentWithEdge.md) | Special percent formatter designed to produce readable percent values for display with special handling of numbers within some edge range of user-defined lower or upper bounds. Defaults to handle only lower edge with lowerBound = 0 and lower = .001. All bound values are expected to be in decimal percent. So 1/10th of a percent is .001 | | [randomFloat](functions/randomFloat.md) | - | | [randomInt](functions/randomInt.md) | - | -| [rasterMetrics](functions/rasterMetrics.md) | Calculates stats on the provided raster and returns as an array of Metric objects (defaults to sum stat) If sketch, then calculate overlap metrics, sketch collection will calculate metrics for each individual sketch within | -| [rasterStats](functions/rasterStats.md) | Calculates over 10 different raster stats, optionally constrains to raster cells overlapping with feature. Defaults to calculating only sum stat If no cells found, returns 0 or null value for each stat as appropriate. | -| [rasterStatsToMetrics](functions/rasterStatsToMetrics.md) | Converts an array of geoblaze raster StatsObjects to an array of Metrics | +| [rasterMetrics](functions/rasterMetrics.md) | Calculates summary metrics (stats/area) on given raster, optionally intersecting raster with provided feature (zonal statistics). If feature is a collection, then calculate metrics for each individual feature as well as the collection as a whole. This can be disabled with includeChildMetrics: false. Defaults to assuming a continuous raster but also supports categorical option | +| [rasterStats](functions/rasterStats.md) | Calculates over 10 different raster statistics, optionally constrains to raster cells overlapping with feature (zonal statistics). Defaults to calculating only sum stat If no cells found, returns 0 or null value for each stat as appropriate. | +| [rasterStatsToMetrics](functions/rasterStatsToMetrics.md) | Converts an array of geoblaze raster StatsObject to an array of Metrics | | [rbcsMpaToMetric](functions/rbcsMpaToMetric.md) | - | | [rbcsZoneToMetric](functions/rbcsZoneToMetric.md) | Transforms an rbcs zone object to a metric | | [rekeyMetrics](functions/rekeyMetrics.md) | Reorders metrics (by mutation) to a consistent key order for readability | | [rekeyObject](functions/rekeyObject.md) | Reorders object, mutating in place, in the order provided | | [removeSketchCollPolygonHoles](functions/removeSketchCollPolygonHoles.md) | - | | [removeSketchPolygonHoles](functions/removeSketchPolygonHoles.md) | - | -| [roundDecimal](functions/roundDecimal.md) | Rounds a number to a fixed precision | -| [roundLower](functions/roundLower.md) | Formats number to string, rounding decimal to number of digits, with special handling of minimum bound | +| [roundDecimal](functions/roundDecimal.md) | Rounds number to a fixed number of decimals | +| [roundDecimalFormat](functions/roundDecimalFormat.md) | Rounds number to a fixed number of decimals, then formats as a human readable string | +| [roundLower](functions/roundLower.md) | Formats number to string, rounding decimal to number of digits, if value is less than lower will clamp to lower value | | [runLambdaWorker](functions/runLambdaWorker.md) | Runs a function on a specified lambda worker | | [sampleSketchReportContextValue](functions/sampleSketchReportContextValue.md) | Creates a ReportContextValue object for a Sketch with sample values. overrides will be merged in, replacing default values | | [scanTasks](functions/scanTasks.md) | - | @@ -263,19 +280,22 @@ | [sketchToZone](functions/sketchToZone.md) | - | | [sortMetrics](functions/sortMetrics.md) | Sorts metrics to a consistent order for readability Defaults to [metricId, classId, sketchId] | | [sortMetricsDisplayOrder](functions/sortMetricsDisplayOrder.md) | Sorts metrics by ID given a user-defined metric dimension (sortId) and array of ID values in the order they should be sorted Useful for applying a "display order" to metrics Example - sortId = classId, displayOrder = ['sand','gravel','coral'] | -| [splitFeatureAntimeridian](functions/splitFeatureAntimeridian.md) | Splits a Feature or FeatureCollection on the 180 degree antimeridian | -| [splitSketchAntimeridian](functions/splitSketchAntimeridian.md) | Splits a Sketch or SketchCollection on the 180 degree antimeridian | -| [squareMeterToKilometer](functions/squareMeterToKilometer.md) | - | -| [squareMeterToMile](functions/squareMeterToMile.md) | - | +| [splitBBoxAntimeridian](functions/splitBBoxAntimeridian.md) | If bounding box crosses antimeridian (and extends outside the range of -180 to 180), split it into two bounding boxes at the antimeridian. | +| [splitFeatureAntimeridian](functions/splitFeatureAntimeridian.md) | Splits a Feature or FeatureCollection on the 180 degree antimeridian. The bbox property of the result will have longitude coordinates that are shifted/normalized to be within the range of -180 to 180. | +| [splitSketchAntimeridian](functions/splitSketchAntimeridian.md) | Splits a Sketch or SketchCollection on the 180 degree antimeridian The bbox property of the result will have longitude coordinates that are shifted/normalized to be within the range of -180 to 180. | +| [squareMeterToKilometer](functions/squareMeterToKilometer.md) | Converts value from square meters to square kilometers | +| [squareMeterToMile](functions/squareMeterToMile.md) | Converts value from square meters to square miles | | [testWithinPerc](functions/testWithinPerc.md) | Expects that testValue is equal to expectedValue or optionally within percentage (defaults to .01 or 1%) | +| [toChildProperties](functions/toChildProperties.md) | Returns SketchProperties for each child sketch in a SketchCollection | | [toFeatureArray](functions/toFeatureArray.md) | Helper to convert a Feature or a FeatureCollection to a Feature array | | [toFeaturePolygonArray](functions/toFeaturePolygonArray.md) | - | | [toNullSketch](functions/toNullSketch.md) | Returns sketch or sketch collection with null geometry | | [toNullSketchArray](functions/toNullSketchArray.md) | Helper to convert a NullSketch or NullSketchCollection to a NullSketch array | -| [toPercentMetric](functions/toPercentMetric.md) | Matches numerator metrics with denominator metrics and divides their value, returning a new array of percent metrics. If denominator metric has value of 0, returns NaN Matches on the optional idProperty given, otherwise defaulting to classId Deep copies and maintains all other properties from the numerator metric | +| [toPercentMetric](functions/toPercentMetric.md) | Matches numerator metrics with denominator metrics and divides their value, returning a new array of percent metrics. Matches on the optional idProperty given, otherwise defaulting to classId Deep copies and maintains all other properties from the numerator metric If denominator metric has value of 0, returns NaN NaN allows downstream consumers to understand this isn't just any 0. It's an opportunity to tell the user that no matter where they put their sketch, there is no way for the value to be more than zero. For example, the ClassTable component looks for `NaN` metric values and will automatically display 0%, along with an informative popover explaining that no data class features are within the current geography. | | [toRasterProjection](functions/toRasterProjection.md) | Reprojects a feature to the same projection as the raster. | | [toShortSketches](functions/toShortSketches.md) | Returns an array of shorthand sketches (id + name) given a Sketch or SketchCollection. Includes a shorthand of parent collection also | -| [toSketchArray](functions/toSketchArray.md) | Helper to convert a Sketch or SketchCollection to a Sketch array, maintaining geometry type | +| [toSketchArray](functions/toSketchArray.md) | Converts a Sketch or SketchCollection to a Sketch array, maintaining geometry type Useful for putting in a consistent form that can be iterated over | +| [toSketchPropertiesArray](functions/toSketchPropertiesArray.md) | Converts array of sketches to an array of their SketchProperties | | [unpackMetrics](functions/unpackMetrics.md) | Converts MetricPack to a new Metric array. | | [updateCommandsSync](functions/updateCommandsSync.md) | Run dynamodb update commands synchronously to avoid throttling, retrying on ThroughputError | | [valueFormatter](functions/valueFormatter.md) | Given a number or string value and the name of a formatter function, returns a formatted value | @@ -334,7 +354,7 @@ | [max](type-aliases/max.md) | - | | [mean](type-aliases/mean.md) | - | | [median](type-aliases/median.md) | - | -| [Metric](type-aliases/Metric.md) | Represents a single record of a metric with a value, stratified by one or more dimensions. The naming is a bit of a misnomer, you can think of it as a MetricValue | +| [Metric](type-aliases/Metric.md) | Single record of value, stratified in one or more dimensions. The name Metric is an overgeneralization, you can think of it as a MetricValue. | | [MetricDimension](type-aliases/MetricDimension.md) | - | | [MetricGroup](type-aliases/MetricGroup.md) | Represents a single metric, having one DataGroup | | [MetricGroups](type-aliases/MetricGroups.md) | - | @@ -414,6 +434,7 @@ | [geoprocessingConfigSchema](variables/geoprocessingConfigSchema.md) | Represents a single JS package | | [geoTypesSchema](variables/geoTypesSchema.md) | - | | [globalDatasources](variables/globalDatasources.md) | Definitive list of global datasources for geoprocessing framework @todo: fetch from global-datasources repo | +| [globalDatasourcesById](variables/globalDatasourcesById.md) | - | | [highColor](variables/highColor.md) | - | | [HIGHLY\_PROTECTED\_LEVEL](variables/HIGHLY_PROTECTED_LEVEL.md) | - | | [importRasterDatasourceOptionsSchema](variables/importRasterDatasourceOptionsSchema.md) | - | diff --git a/website/docs/api/geoprocessing/interfaces/ClipOptions.md b/website/docs/api/geoprocessing/interfaces/ClipOptions.md index c9c6b4abc8..ac6d1caf0f 100644 --- a/website/docs/api/geoprocessing/interfaces/ClipOptions.md +++ b/website/docs/api/geoprocessing/interfaces/ClipOptions.md @@ -1,19 +1,9 @@ # ClipOptions -Optional parameters for preprocessor function +Optional parameters for polygon clip preprocessor ## Properties -### enforceMaxSize? - -```ts -optional enforceMaxSize: boolean; -``` - -Whether or not maxSize should be enforced and throw - -*** - ### ensurePolygon? ```ts @@ -21,13 +11,3 @@ optional ensurePolygon: boolean; ``` Ensures result is a polygon. If clip results in multipolygon, returns the largest component - -*** - -### maxSize? - -```ts -optional maxSize: number; -``` - -maxSize in square kilometers that clipped polygon result can be. Preprocessor function will throw if larger. diff --git a/website/docs/api/geoprocessing/interfaces/FeatureClipOperation.md b/website/docs/api/geoprocessing/interfaces/FeatureClipOperation.md index 5e0e7f0474..01159bdfff 100644 --- a/website/docs/api/geoprocessing/interfaces/FeatureClipOperation.md +++ b/website/docs/api/geoprocessing/interfaces/FeatureClipOperation.md @@ -7,7 +7,7 @@ Parameters for clip operation using polygon features ### clipFeatures ```ts -clipFeatures: Feature[]; +clipFeatures: Feature[]; ``` *** diff --git a/website/docs/api/geoprocessing/interfaces/FgBoundingBox.md b/website/docs/api/geoprocessing/interfaces/FgBoundingBox.md new file mode 100644 index 0000000000..e71d58d8c7 --- /dev/null +++ b/website/docs/api/geoprocessing/interfaces/FgBoundingBox.md @@ -0,0 +1,33 @@ +# FgBoundingBox + +## Properties + +### maxX + +```ts +maxX: number; +``` + +*** + +### maxY + +```ts +maxY: number; +``` + +*** + +### minX + +```ts +minX: number; +``` + +*** + +### minY + +```ts +minY: number; +``` diff --git a/website/docs/api/geoprocessing/interfaces/GeoprocessingHandlerOptions.md b/website/docs/api/geoprocessing/interfaces/GeoprocessingHandlerOptions.md index bc299ab3b2..a2c99c6b0d 100644 --- a/website/docs/api/geoprocessing/interfaces/GeoprocessingHandlerOptions.md +++ b/website/docs/api/geoprocessing/interfaces/GeoprocessingHandlerOptions.md @@ -77,10 +77,10 @@ optional rateLimitPeriod: RateLimitPeriod; *** -### requiresProperties +### requiresProperties? ```ts -requiresProperties: string[]; +optional requiresProperties: string[]; ``` Specify the ids of any Sketch Class form fields that must be provided in diff --git a/website/docs/api/geoprocessing/interfaces/GeoprocessingServiceMetadata.md b/website/docs/api/geoprocessing/interfaces/GeoprocessingServiceMetadata.md index 708a50a75d..8b92e83f71 100644 --- a/website/docs/api/geoprocessing/interfaces/GeoprocessingServiceMetadata.md +++ b/website/docs/api/geoprocessing/interfaces/GeoprocessingServiceMetadata.md @@ -151,10 +151,10 @@ rateLimitPeriod: RateLimitPeriod; *** -### requiresProperties +### requiresProperties? ```ts -requiresProperties: string[]; +optional requiresProperties: string[]; ``` Specify the ids of any Sketch Class form fields that must be provided in diff --git a/website/docs/api/geoprocessing/interfaces/OverlapRasterOptions.md b/website/docs/api/geoprocessing/interfaces/OverlapRasterOptions.md new file mode 100644 index 0000000000..70f19de527 --- /dev/null +++ b/website/docs/api/geoprocessing/interfaces/OverlapRasterOptions.md @@ -0,0 +1,236 @@ +# OverlapRasterOptions + +options accepted by rasterStats + +## Extends + +- [`RasterStatsOptions`](RasterStatsOptions.md) + +## Properties + +### bandMetricProperty? + +```ts +optional bandMetricProperty: + | "classId" + | "metricId" + | "geographyId" + | "sketchId" + | "groupId"; +``` + +If multi-band raster, metric property name that raster bands are organized by e.g. classID + +*** + +### bandMetricValues? + +```ts +optional bandMetricValues: string[]; +``` + +If multi-band raster, object mapping band number (starting with 0 index) to unique ID value eg. ( 0: 'mangroves', 1: 'coral' ). Defaults to 'band 1', 'band 2' + +*** + +### categorical? + +```ts +optional categorical: boolean; +``` + +If categorical raster, set to true + +#### Overrides + +[`RasterStatsOptions`](RasterStatsOptions.md).[`categorical`](RasterStatsOptions.md#categorical) + +*** + +### categoryMetricProperty? + +```ts +optional categoryMetricProperty: + | "classId" + | "metricId" + | "geographyId" + | "sketchId" + | "groupId"; +``` + +If categorical raster, metric property name that categories are organized. Defaults to classId + +#### Overrides + +[`RasterStatsOptions`](RasterStatsOptions.md).[`categoryMetricProperty`](RasterStatsOptions.md#categorymetricproperty) + +*** + +### categoryMetricValues? + +```ts +optional categoryMetricValues: string[]; +``` + +If categorical raster, array of values to create metrics for + +#### Overrides + +[`RasterStatsOptions`](RasterStatsOptions.md).[`categoryMetricValues`](RasterStatsOptions.md#categorymetricvalues) + +*** + +### chunked? + +```ts +optional chunked: boolean; +``` + +Whether or not to chunk calculations + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`chunked`](RasterStatsOptions.md#chunked) + +*** + +### feature? + +```ts +optional feature: FeatureCollection | Feature | SketchCollection | Sketch; +``` + +single sketch or sketch collection filter to overlap with raster when calculating metrics. + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`feature`](RasterStatsOptions.md#feature) + +*** + +### filter()? + +```ts +optional filter: (index, value) => boolean; +``` + +Filter function to ignore raster values in stat calc + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `index` | `number` | +| `value` | `number` | + +#### Returns + +`boolean` + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`filter`](RasterStatsOptions.md#filter) + +*** + +### filterFn()? + +```ts +optional filterFn: (cellValue) => boolean; +``` + +undocumented filter function (how different from filter option above?), for example a => a > 0 will filter out pixels greater than zero such that 'valid' is number of valid pixels greater than 0 + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `cellValue` | `number` | + +#### Returns + +`boolean` + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`filterFn`](RasterStatsOptions.md#filterfn) + +*** + +### includeChildMetrics? + +```ts +optional includeChildMetrics: boolean; +``` + +*** + +### metricId? + +```ts +optional metricId: string; +``` + +Optional metricId to be assigned. Don't use if you are calculating more than one stat because you won't be able to tell them apart + +*** + +### metricIdPrefix? + +```ts +optional metricIdPrefix: string; +``` + +Optional caller-provided prefix to add to metricId in addition to stat name e.g. 'coral' with metrics of 'sum', 'count', 'area' will generate metric IDs of 'coral-sum', 'coral-count', 'coral-area' + +*** + +### noData? + +```ts +optional noData: number; +``` + +Override nodata value, which is ignored in calculations + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`noData`](RasterStatsOptions.md#nodata) + +*** + +### numBands? + +```ts +optional numBands: number; +``` + +Optional number of bands in the raster, defaults to 1, used to initialize zero values + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`numBands`](RasterStatsOptions.md#numbands) + +*** + +### stats? + +```ts +optional stats: string[]; +``` + +Stats to calculate + +#### Inherited from + +[`RasterStatsOptions`](RasterStatsOptions.md).[`stats`](RasterStatsOptions.md#stats) + +*** + +### truncate? + +```ts +optional truncate: boolean; +``` + +Truncates results to 6 digits, defaults to true diff --git a/website/docs/api/geoprocessing/interfaces/PreprocessingHandlerOptions.md b/website/docs/api/geoprocessing/interfaces/PreprocessingHandlerOptions.md index 8c6efa1b94..e519665509 100644 --- a/website/docs/api/geoprocessing/interfaces/PreprocessingHandlerOptions.md +++ b/website/docs/api/geoprocessing/interfaces/PreprocessingHandlerOptions.md @@ -20,14 +20,14 @@ description: string; optional memory: number; ``` -Megabytes, 128 - 3008, defaults to 1024 +Megabytes, 128 - 10240, defaults to 1024 *** -### requiresProperties +### requiresProperties? ```ts -requiresProperties: string[]; +optional requiresProperties: string[]; ``` *** diff --git a/website/docs/api/geoprocessing/interfaces/PreprocessingServiceMetadata.md b/website/docs/api/geoprocessing/interfaces/PreprocessingServiceMetadata.md index 33228c2960..aaaf05115f 100644 --- a/website/docs/api/geoprocessing/interfaces/PreprocessingServiceMetadata.md +++ b/website/docs/api/geoprocessing/interfaces/PreprocessingServiceMetadata.md @@ -68,7 +68,7 @@ Seconds optional memory: number; ``` -Megabytes, 128 - 3008, defaults to 1024 +Megabytes, 128 - 10240, defaults to 1024 #### Inherited from @@ -108,10 +108,10 @@ rateLimitPeriod: RateLimitPeriod; *** -### requiresProperties +### requiresProperties? ```ts -requiresProperties: string[]; +optional requiresProperties: string[]; ``` #### Inherited from diff --git a/website/docs/api/geoprocessing/interfaces/ProjectClientInterface.md b/website/docs/api/geoprocessing/interfaces/ProjectClientInterface.md index 04de2aab18..39f6a615dd 100644 --- a/website/docs/api/geoprocessing/interfaces/ProjectClientInterface.md +++ b/website/docs/api/geoprocessing/interfaces/ProjectClientInterface.md @@ -214,7 +214,7 @@ Optional, constrain datasource to smaller bbox classKeys: string[]; ``` -keys to generate classes for. Vector - property names +properties whose values define classes of data. ##### datasourceId diff --git a/website/docs/api/geoprocessing/interfaces/RasterStatsOptions.md b/website/docs/api/geoprocessing/interfaces/RasterStatsOptions.md index d957908016..f9cc998d74 100644 --- a/website/docs/api/geoprocessing/interfaces/RasterStatsOptions.md +++ b/website/docs/api/geoprocessing/interfaces/RasterStatsOptions.md @@ -6,6 +6,10 @@ options accepted by rasterStats - [`CalcStatsOptions`](CalcStatsOptions.md) +## Extended by + +- [`OverlapRasterOptions`](OverlapRasterOptions.md) + ## Properties ### categorical? @@ -39,7 +43,7 @@ If categorical raster, metric property name that categories are organized. Defau optional categoryMetricValues: string[]; ``` -If categorical raster, array of values to create metrics for +If categorical raster, array of values to create metrics for. Any values not provided won't be counted *** diff --git a/website/docs/api/geoprocessing/interfaces/ReportResult.md b/website/docs/api/geoprocessing/interfaces/ReportResult.md index 9f206592b6..0f4561f94a 100644 --- a/website/docs/api/geoprocessing/interfaces/ReportResult.md +++ b/website/docs/api/geoprocessing/interfaces/ReportResult.md @@ -12,10 +12,10 @@ metrics: object[]; *** -### sketch +### sketch? ```ts -sketch: NullSketch | NullSketchCollection; +optional sketch: NullSketch | NullSketchCollection; ``` The sketch used, without geometry diff --git a/website/docs/api/geoprocessing/type-aliases/Metric.md b/website/docs/api/geoprocessing/type-aliases/Metric.md index e64dded1f4..387c24452b 100644 --- a/website/docs/api/geoprocessing/type-aliases/Metric.md +++ b/website/docs/api/geoprocessing/type-aliases/Metric.md @@ -4,5 +4,5 @@ type Metric: z.infer; ``` -Represents a single record of a metric with a value, stratified by one or more dimensions. -The naming is a bit of a misnomer, you can think of it as a MetricValue +Single record of value, stratified in one or more dimensions. +The name Metric is an overgeneralization, you can think of it as a MetricValue. diff --git a/website/docs/api/geoprocessing/type-aliases/SketchProperties.md b/website/docs/api/geoprocessing/type-aliases/SketchProperties.md index 268b00ad06..a6ba881cd0 100644 --- a/website/docs/api/geoprocessing/type-aliases/SketchProperties.md +++ b/website/docs/api/geoprocessing/type-aliases/SketchProperties.md @@ -14,24 +14,32 @@ Properties of a Sketch, defines known keys as well as unknown for extensiblity optional childProperties: SketchProperties[]; ``` +This is used on rare occasion to provide the sketch properties of a SketchCollections child sketches + ### createdAt ```ts createdAt: ISO8601DateTime; ``` +Last updated ISO 8601 timestamp + ### id ```ts id: string; ``` +Unique sketch ID + ### isCollection ```ts isCollection: boolean; ``` +True if these are properties for a SketchCollection, false if Sketch + ### name ```ts @@ -46,14 +54,20 @@ Name specified by the author of the sketch sketchClassId: string; ``` +Unique ID of class of sketch + ### updatedAt ```ts updatedAt: ISO8601DateTime; ``` +Last updated ISO 8601 timestamp + ### userAttributes ```ts userAttributes: UserAttribute[]; ``` + +User-defined attributes with values for Sketch. Defines known keys as well as unknown for extensiblity diff --git a/website/docs/api/geoprocessing/variables/globalDatasources.md b/website/docs/api/geoprocessing/variables/globalDatasources.md index 396918da3a..42982db391 100644 --- a/website/docs/api/geoprocessing/variables/globalDatasources.md +++ b/website/docs/api/geoprocessing/variables/globalDatasources.md @@ -1,7 +1,7 @@ # globalDatasources ```ts -const globalDatasources: Datasource[]; +const globalDatasources: (ExternalVectorDatasource | ExternalRasterDatasource)[]; ``` Definitive list of global datasources for geoprocessing framework diff --git a/website/docs/api/geoprocessing/variables/globalDatasourcesById.md b/website/docs/api/geoprocessing/variables/globalDatasourcesById.md new file mode 100644 index 0000000000..7386a8187f --- /dev/null +++ b/website/docs/api/geoprocessing/variables/globalDatasourcesById.md @@ -0,0 +1,5 @@ +# globalDatasourcesById + +```ts +const globalDatasourcesById: Record; +``` diff --git a/website/docs/api/geoprocessing/variables/metricGroupSchema.md b/website/docs/api/geoprocessing/variables/metricGroupSchema.md index 7d629f712a..6ca51f1180 100644 --- a/website/docs/api/geoprocessing/variables/metricGroupSchema.md +++ b/website/docs/api/geoprocessing/variables/metricGroupSchema.md @@ -59,7 +59,7 @@ group level objective, applies to all classes ### type ```ts -type: ZodString; +type: ZodOptional; ``` -Metric type +unique identifier of what the metric represents, such as its type and method for calculation - e.g. areaOverlap, valueOverlap. To be defined by the user diff --git a/website/docs/api/geoprocessing/variables/objectiveSchema.md b/website/docs/api/geoprocessing/variables/objectiveSchema.md index 323f045ac3..68f61c472e 100644 --- a/website/docs/api/geoprocessing/variables/objectiveSchema.md +++ b/website/docs/api/geoprocessing/variables/objectiveSchema.md @@ -14,7 +14,7 @@ Base planning objective, extend as needed for specific classification system or countsToward: ZodRecord> = objectiveAnswerMapSchema; ``` -Generic map of MPA protection levels to whether they count towards objective +Generic map of group names (e.g. MPA protection levels) to whether they count towards objective ### objectiveId diff --git a/website/docs/api/geoprocessing/variables/version.md b/website/docs/api/geoprocessing/variables/version.md index 7ae300b12c..0a5b42180b 100644 --- a/website/docs/api/geoprocessing/variables/version.md +++ b/website/docs/api/geoprocessing/variables/version.md @@ -495,7 +495,7 @@ flatbush: string = "^3.3.0"; ### dependencies.flatgeobuf ```ts -flatgeobuf: string = "3.33.0"; +flatgeobuf: string = "3.36.0"; ``` ### dependencies.fs-extra @@ -852,12 +852,6 @@ vitest: string = "^2.0.5"; vitest-fetch-mock: string = "^0.3.0"; ``` -### dependencies.web-streams-polyfill - -```ts -web-streams-polyfill: string = "4.0.0"; -``` - ### dependencies.ws ```ts diff --git a/website/docs/api/typedoc-sidebar.cjs b/website/docs/api/typedoc-sidebar.cjs index 07d9531b53..84c46c77ea 100644 --- a/website/docs/api/typedoc-sidebar.cjs +++ b/website/docs/api/typedoc-sidebar.cjs @@ -826,50 +826,9 @@ const typedocSidebar = { items: [ } }, { - "type": "category", - "label": "dataproviders", - "items": [ - { - "type": "category", - "label": "Functions", - "items": [ - { - "type": "doc", - "id": "api/dataproviders/functions/fgbFetchAll", - "label": "fgbFetchAll" - }, - { - "type": "doc", - "id": "api/dataproviders/functions/fgBoundingBox", - "label": "fgBoundingBox" - }, - { - "type": "doc", - "id": "api/dataproviders/functions/genClipLoader", - "label": "genClipLoader" - }, - { - "type": "doc", - "id": "api/dataproviders/functions/getFeatures", - "label": "getFeatures" - }, - { - "type": "doc", - "id": "api/dataproviders/functions/loadCog", - "label": "loadCog" - }, - { - "type": "doc", - "id": "api/dataproviders/functions/loadCogWindow", - "label": "loadCogWindow" - } - ] - } - ], - "link": { - "type": "doc", - "id": "api/dataproviders/index" - } + "type": "doc", + "id": "api/dataproviders/index", + "label": "dataproviders" }, { "type": "category", @@ -970,6 +929,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/interfaces/FeatureTree", "label": "FeatureTree" }, + { + "type": "doc", + "id": "api/geoprocessing/interfaces/FgBoundingBox", + "label": "FgBoundingBox" + }, { "type": "doc", "id": "api/geoprocessing/interfaces/GeogProp", @@ -1080,6 +1044,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/interfaces/NullSketchCollection", "label": "NullSketchCollection" }, + { + "type": "doc", + "id": "api/geoprocessing/interfaces/OverlapRasterOptions", + "label": "OverlapRasterOptions" + }, { "type": "doc", "id": "api/geoprocessing/interfaces/PercentEdgeOptions", @@ -1327,6 +1296,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/classifyZone", "label": "classifyZone" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/cleanBBox", + "label": "cleanBBox" + }, { "type": "doc", "id": "api/geoprocessing/functions/cleanCoords", @@ -1342,6 +1316,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/clipMultiMerge", "label": "clipMultiMerge" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/clipToPolygonDatasources", + "label": "clipToPolygonDatasources" + }, { "type": "doc", "id": "api/geoprocessing/functions/clipToPolygonFeatures", @@ -1362,6 +1341,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/createMetrics", "label": "createMetrics" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/ensureValidPolygon", + "label": "ensureValidPolygon" + }, { "type": "doc", "id": "api/geoprocessing/functions/featureToSketch", @@ -1377,6 +1361,16 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/fetchGeoJSON", "label": "fetchGeoJSON" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/fgbFetchAll", + "label": "fgbFetchAll" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/fgBoundingBox", + "label": "fgBoundingBox" + }, { "type": "doc", "id": "api/geoprocessing/functions/findAndUpdateMetricValue", @@ -1417,6 +1411,21 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/gearTypeScore", "label": "gearTypeScore" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/genClipLoader", + "label": "genClipLoader" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/genClipToPolygonDatasources", + "label": "genClipToPolygonDatasources" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/genClipToPolygonFeatures", + "label": "genClipToPolygonFeatures" + }, { "type": "doc", "id": "api/geoprocessing/functions/genFeature", @@ -1427,11 +1436,6 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/genFeatureCollection", "label": "genFeatureCollection" }, - { - "type": "doc", - "id": "api/geoprocessing/functions/genPreprocessor", - "label": "genPreprocessor" - }, { "type": "doc", "id": "api/geoprocessing/functions/genRandomPolygons", @@ -1527,6 +1531,16 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/getExternalVectorDatasourceById", "label": "getExternalVectorDatasourceById" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/getFeatures", + "label": "getFeatures" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/getFeaturesForSketchBBoxes", + "label": "getFeaturesForSketchBBoxes" + }, { "type": "doc", "id": "api/geoprocessing/functions/getFirstFromParam", @@ -1697,6 +1711,21 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/includeVirtualSketch", "label": "includeVirtualSketch" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/intersectInChunks", + "label": "intersectInChunks" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/intersectInChunksArea", + "label": "intersectInChunksArea" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/intersectSum", + "label": "intersectSum" + }, { "type": "doc", "id": "api/geoprocessing/functions/isExternalDatasource", @@ -1882,6 +1911,16 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/keyBy", "label": "keyBy" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/loadCog", + "label": "loadCog" + }, + { + "type": "doc", + "id": "api/geoprocessing/functions/loadFgb", + "label": "loadFgb" + }, { "type": "doc", "id": "api/geoprocessing/functions/maxWidth", @@ -1927,6 +1966,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/nestMetrics", "label": "nestMetrics" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/numberFormat", + "label": "numberFormat" + }, { "type": "doc", "id": "api/geoprocessing/functions/overlapArea", @@ -1952,11 +1996,6 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/overlapGroupMetrics", "label": "overlapGroupMetrics" }, - { - "type": "doc", - "id": "api/geoprocessing/functions/overlapRaster", - "label": "overlapRaster" - }, { "type": "doc", "id": "api/geoprocessing/functions/overlapRasterClass", @@ -2057,6 +2096,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/roundDecimal", "label": "roundDecimal" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/roundDecimalFormat", + "label": "roundDecimalFormat" + }, { "type": "doc", "id": "api/geoprocessing/functions/roundLower", @@ -2097,6 +2141,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/sortMetricsDisplayOrder", "label": "sortMetricsDisplayOrder" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/splitBBoxAntimeridian", + "label": "splitBBoxAntimeridian" + }, { "type": "doc", "id": "api/geoprocessing/functions/splitFeatureAntimeridian", @@ -2122,6 +2171,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/testWithinPerc", "label": "testWithinPerc" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/toChildProperties", + "label": "toChildProperties" + }, { "type": "doc", "id": "api/geoprocessing/functions/toFeatureArray", @@ -2162,6 +2216,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/functions/toSketchArray", "label": "toSketchArray" }, + { + "type": "doc", + "id": "api/geoprocessing/functions/toSketchPropertiesArray", + "label": "toSketchPropertiesArray" + }, { "type": "doc", "id": "api/geoprocessing/functions/unpackMetrics", @@ -2814,6 +2873,11 @@ const typedocSidebar = { items: [ "id": "api/geoprocessing/variables/globalDatasources", "label": "globalDatasources" }, + { + "type": "doc", + "id": "api/geoprocessing/variables/globalDatasourcesById", + "label": "globalDatasourcesById" + }, { "type": "doc", "id": "api/geoprocessing/variables/highColor", diff --git a/website/docs/architecture/Architecture.md b/website/docs/architecture/Architecture.md index 24b66fc3f9..7fd2ab689a 100644 --- a/website/docs/architecture/Architecture.md +++ b/website/docs/architecture/Architecture.md @@ -2,15 +2,27 @@ slug: "/architecture" --- +# Architecture + ## Library -The geoprocessing library is modeled after [create-react-app](https://github.com/facebook/create-react-app) in that it allows a new project to be generated with a single command. +This document quickly walks through how the geoprocessing framework is put together. How it generates a new report project, publishes it to Amazon Web Services as a CloudFormation stack, and then integrate with a SeaSketch project. + +## Project Init + +Everything starts with creating a new geoprocessing project. The [init](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/init/init.ts) command asks the user a few configuration questions and then [generates a new project](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/init/createProject.ts) on the users system. + +The geoprocessing library is modeled loosely after [create-react-app](https://github.com/facebook/create-react-app) in that it allows a new project to be generated with a single command, and a lot of the complexities are pre-configured and hidden to let the report developer focus on writing code. -It publishes a CLI (command line interface) via the `geoprocessing` command [registered](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/package.json#L45), which runs the accompanying [script](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/geoprocessing.ts), which publishes all of the CLI commands. +## Build and Deploy -The [init](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/init/init.ts) command is runnable using `npx` without installing the geoprocessing library (see Tutorials). The init command [creates a new project](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/init/createProject.ts) using the [base-project](https://github.com/seasketch/geoprocessing/tree/dev/packages) as a template followed by merging in one of the available [templates](https://github.com/seasketch/geoprocessing/tree/dev/packages). +The geoprocessing library offers a much broader set of commands to a project through its [CLI](../CLI.md) (command line interface). Internally these are exposed via the projects [package.json](https://github.com/seasketch/geoprocessing/blob/dev/packages/base-project/package.json) file and the built-in [geoprocessing script](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/geoprocessing.ts). -The new generated project takes the geoprocessing library as a dependency, allowing the projects report clients access to the `gp-ui` module and preprocessing/geoprocessing functions access to the `gp-core` module. This also gives the project access to the remaining CLI commands via its [package.json](https://github.com/seasketch/geoprocessing/blob/dev/packages/base-project/package.json), including the ability to [build](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/build/build.sh) client and function bundles using [webpack](https://webpack.js.org/) and [deploy](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/deploy/deploy.sh) the project using [aws-cdk](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-javascript.html). +A geoprocessing project utilizes the many base UI components published through the `gp-ui` module, as well as , allowing the projects report clients access to the `gp-ui` module and preprocessing/geoprocessing functions access to the `gp-core` module. + +A [build](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/build/build.sh) process is used to bundle individual report components into report clients ready to be loaded by SeaSketch. And to bundle preprocessing and geoprocessing functions so they are ready to be run within an AWS Lambda function. + +A project is then [deployed](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/scripts/deploy/deploy.sh) to the Amazon public cloud using [aws-cdk](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-javascript.html). ## Published Project @@ -20,10 +32,13 @@ A published geoprocessing project at its heart is a single monolithic [Geoproces ### 1. Registering with SeaSketch -The root URL of the REST API returns a manifest of all project assets. This includes names, URL's, and configuration for all of the projects report clients, preprocessing functions, and geoprocessing functions. +The root URL of the REST API returns a service manifest of all project assets. This includes names, URL's, and configuration for all of the projects report clients, preprocessing functions, and geoprocessing functions. Example for FSM: [https://yo04tf0re1.execute-api.us-west-2.amazonaws.com/prod/](https://yo04tf0re1.execute-api.us-west-2.amazonaws.com/prod/) +

+Example Service Manifest + ```json { "title": "fsm-reports", @@ -215,7 +230,9 @@ Example for FSM: [https://yo04tf0re1.execute-api.us-west-2.amazonaws.com/prod/]( } ``` -SeaSketch allows you to add a preprocessor for your Sketch Class, populating the list from the manifest. +
+ +Given the URL to this service manifest, SeaSketch allows you to add a preprocessor for your Sketch Class, populating the list from the manifest. ![System Model](assets/AddPreprocessor.jpg "Add Preprocessor") SeaSketch also allows you to add a reporting client for your Sketch Class, populating the list from the manifest. @@ -364,6 +381,6 @@ These 2 execution modes create 4 different request scenarios. A lambda is create - determining whether sketches within a collection overlap with each other and remove the overlap ensuring there is no double counting. - assessing the protection level of each sketch and calculating metrics by protection level. Overlap of sketches within each protection level can also be removed ensuring there is not double counting. -The result can take any form but typically are [metrics](/concepts/Concepts.md#metrics). +The result can take any form but typically are [metrics](../concepts/Concepts.md#metrics)). [Boundary overlap example](https://github.com/seasketch/fsm-reports/blob/main/src/functions/boundaryAreaOverlap.ts#L23) diff --git a/website/docs/tutorials/assets/AddCodespace.jpg b/website/docs/codespaces/assets/AddCodespace.jpg similarity index 100% rename from website/docs/tutorials/assets/AddCodespace.jpg rename to website/docs/codespaces/assets/AddCodespace.jpg diff --git a/website/docs/tutorials/assets/AddSecrets.jpg b/website/docs/codespaces/assets/AddSecrets.jpg similarity index 100% rename from website/docs/tutorials/assets/AddSecrets.jpg rename to website/docs/codespaces/assets/AddSecrets.jpg diff --git a/website/docs/tutorials/assets/ConfigCodespace.jpg b/website/docs/codespaces/assets/ConfigCodespace.jpg similarity index 100% rename from website/docs/tutorials/assets/ConfigCodespace.jpg rename to website/docs/codespaces/assets/ConfigCodespace.jpg diff --git a/website/docs/tutorials/assets/CreateFromTemplate.jpg b/website/docs/codespaces/assets/CreateFromTemplate.jpg similarity index 100% rename from website/docs/tutorials/assets/CreateFromTemplate.jpg rename to website/docs/codespaces/assets/CreateFromTemplate.jpg diff --git a/website/docs/tutorials/assets/WorkspacePermissions.jpg b/website/docs/codespaces/assets/WorkspacePermissions.jpg similarity index 100% rename from website/docs/tutorials/assets/WorkspacePermissions.jpg rename to website/docs/codespaces/assets/WorkspacePermissions.jpg diff --git a/website/docs/codespaces/codespaces.md b/website/docs/codespaces/codespaces.md new file mode 100644 index 0000000000..addef58e69 --- /dev/null +++ b/website/docs/codespaces/codespaces.md @@ -0,0 +1,52 @@ +# Github Codespaces + +- Github provides a server running Ubuntu Linux, pre-configured to develop your geoprocessing project. Your local VSCode editor connects to it. +- Best for: beginners trying things out, you don't need to use Docker Desktop on your system. +- Pros + - Easiest to get started. The codespace is managed by Github and connection to VSCode running locally is seamless. +- Cons + - limited to storing data directly in your repository. + +## System Setup + +Using Codespaces is a variation on using the Docker Desktop devcontainer setup (option 1) in the tutorial. You will init your project from within your codespace.. + +- You will need to create your own devcontainer repository in your own Github user account, or your own organization. +- Go to this [devcontainer repository](https://github.com/seasketch/geoprocessing-devcontainer-tpl). +- Click the green `Use this template` button and `Create a new repository`. + +![Create from template](./assets/CreateFromTemplate.jpg "Create from template") + +- You can call this repository `geoprocessing-devcontainer`. And if you create it under a Github organization, then everyone in the organization will be able to utilize it. + +Now you're ready to setup codespaces for this devcontainer: + +- Configure Github secrets for all environment variables your codespace will need for accessing POEditor and Amazon Web Services. + - Go to your [Github codespace settings](https://github.com/settings/codespaces) + - Define each of the following Codespaces secrets found in the screenshot. + - your POEditor API token you can find here - https://poeditor.com/account/api. If you don't have one, then follow the instructions to [create your own](../gip/GIP-1-i18n.md) + - You can leave your AWS credentials blank until you set them up in a later tutorial when you want to deploy your project. + +![Add Secrets](./assets/AddSecrets.jpg "Add Secrets") + +- Browse to `https://github.com/seasketch/geoprocessing-devcontainer` +- Click the green `Code` button, then the `Codespaces` tab, then `New with options...` + +![Add Codespace](./assets/AddCodespace.jpg "Add Codespace") + +- Accept all defaults, except choose a Machine type of `4-core` which provides the minimum 8GB of ram needed. See [Github codespace pricing](https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces) for more information. + +![Configure Codespace](./assets/ConfigCodespace.jpg "Configure Codespace") + +- It will automatically attempt to open your local VSCode editor and connect it to the codespace. You will be prompted to allow this to happen. + +## Create new geoprocessing project + +When developing within a codespace, you need to give it permission to read and write files from other repositories. You should have VSCode open and connected to your devcontainer codespace, with no outstanding uncommitted work. Then do the following: + +- In VSCode, edit the .devcontainer/devcontainer.json and add your new geoprocessing project repository `[your_organization_or_username]/fsm-report-test` to the list. You will do this for each geoprocessing project you create and maintain in this devcontainer, which can be many. +- Commit and push these changes. + +![Workspace Permissions](./assets/WorkspacePermissions.jpg "Workspace Permissions") + +At this point, you need to close your VSCode codespace session and `delete` your existing codespace. Wait at least one minute for the codespace to be fully delete. Then recreate a new codespace and it will allow you to enable the new write permissions to your geoprocessing project repository. It's unfortunate that you need to delete your codespace and recreate it for you to be prompted to enable these permissions, hopefully it will be made simpler in the future. You can read more [here](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces#authorizing-requested-permissions) diff --git a/website/docs/concepts/Concepts.md b/website/docs/concepts/Concepts.md index d0238d71ca..fc4428614f 100644 --- a/website/docs/concepts/Concepts.md +++ b/website/docs/concepts/Concepts.md @@ -4,53 +4,75 @@ slug: /concepts # Concepts -The SeaSketch platform supports the following planning process workflow: +## Process + +Geoprocessing projects built with this framework support step #2 and #4 in the following planning workflow, the [SeaSketch platform](https://docs.seasketch.org/seasketch-documentation) supports the rest. They work together to provide a complete solution. + +1. Allow a user to draw a design (sketch) and define attributes (e.g. allowed activities, etc.). +2. **Preprocess that sketch to ensure it meets project guidelines, for example to ensure that it has a valid shape and is within the designated planning area.** +3. Allow a user to organize one or more sketches into a proposal (collection). +4. **Provide feedback (reports) on how well sketches and sketch collections meet measurable planning objectives and their targets (using geoprocessing functions).** +5. Allow users to share and iterate on designs as a group until they come to a decision. ![System Model](assets/SystemModelBasic.jpg "System Model Basic") -1. Captures user input in the form of spatial features (sketches) with attributes (e.g. allowed activities, notes, etc.). Sketches are then organized into proposals (sketch collections). -2. Provides feedback (reports) on how well sketches and sketch collections meet measurable planning objectives and their targets (using geoprocessing functions). -3. Users then share and iterate on their designs until the group together can make proposals, narrow them down, and come to a decision. +### Terminology + +There are a number of terms and concepts to be familiar with. Many of them are implemented as features of the framework. -The project goal is met if all measurable objectives are met and the proposal is legally viable. +
+General Terms + +- `Goal` - also known as vision or aim. These are general summaries of the desired future state of an area. -The `core SeaSketch platform` is designed to accomplish #1 and #3. The `geoprocessing framework` is primarily used to accomplish #2, as well as #1 (using preprocessing functions). The two systems work together to provide an end-to-end spatial planning solution. + - Example - Protect biological diversity, productivity, and ecological function across all habitat types -What's unique about the geoprocessing framework is it's flexibility. It's not one-size-fits-all. A developer can create custom reports through code starting with a template. +- `Objective` - These are specific statements that describe how a planning goal will be reached and are typically measurable or quantifiable in some way. -## Where to start + - Example - Designate a minimum of 20% of planning area as protected areas. -A geoprocessing project starts with a design phase, using a [planning tool design template](https://docs.google.com/document/d/1Qe7pZYmwg7ggRY9ocu3tpdTQkvuIHMr38wLxrjSitpU/edit?usp=sharing). +- `Target` - The measurement to reach to say that an objective has been met. -There are a number of terms and concepts to be familiar with: + - Example - 20% of the EEZ, 15% of a species habitat within planning area, -- `MPA` - [marine protected area]. Protected areas of seas, oceans, estuaries. (https://en.wikipedia.org/wiki/Marine_protected_area) +- `Metric` - an individual piece of data, a measurement. For example a spatial statistic or an area calculation. -- `Goal` - also known as vision or aim. These are general summaries of the desired future state of an area. +- `Sketch` - a user-drawn feature, typically a Polygon, that can be shared, further altered or put into a Sketch Collection. A Sketch is an extension of a GeoJSON [Feature](https://www.rfc-editor.org/rfc/rfc7946#section-3.2). - - Example - Protect biological diversity, productivity, and ecological function across all habitat types +- `Geography` - one or more geographic boundaries for the project. Primarily used to define project planning boundaries. -- [`Objective`](https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#Objective) - aka purpose. These are specific statements that describe how the goal will be reached and are typically measurable or quantifiable in some way. +- `Datasource` - a published dataset within the project. It can be either Vector or Raster spatial data. A datasource can contain vector features that define the extent of a Geography or provide spatial data for calculating Metrics for sketches. - - Example - Designate a minimum of 20% of the EEZ as fully protected no-take Marine Protected Areas. +
-- `Target` - The measurement to reach to say that an objective has been met. +
+Marine Spatial Planning Terms - - Example - 20% of the EEZ +- `MPA` - marine protected area. An area designated for marine protection with defined allowed uses. -One or more [Geographies](#geographies) are then defined that define the planning boundaries for the project. This can be one large overarching boundary for the project, and/or multiple smaller planning boundaries. +- `Territorial Sea` - A belt of coastal waters extending at most 12 nautical miles from the baseline (usually the mean low-water mark) of a coastal state. -[Datasources](#datasources) are then created/gathered to defined the extent of each Geography, and to provide data that measures progress towards an objective. For example: +- `EEZ` - exclusive economic zone aka "Offshore". An area of the sea in which a sovereign state has exclusive rights regarding the exploration and use of marine resources. It stretches from the outer edge of the territorial sea, 12 nautical miles out from the baseline, to 200 nautical miles. May also be defined as the "Offshore". -- A polygon boundary of a countries Exclusive Economic Zone is used to measure what % of the EEZ a proposed area covers. -- A coral reef dataset can be used to measure whether a proposed area covers at least 50% of each coral type. -- A geomorphology dataset can be used to measure whether a proposed area covers at least 20% of each seabottom type. +- `Nearshore` - a shorthand name used in marine planning projects, which often matches up with the definition of Territorial Sea, but it may not. + +- `Offshore` - a shorthand name used in marine planning projects, which often matches up with the definition of EEZ, but it may not. + +
+ +Here's a couple examples putting it all together: + +- A polygon boundary Datasource containing a countries Exclusive Economic Zone is used to measure what % of the EEZ a proposed area covers. +- A coral reef Datasource can be used to measure whether a proposed area covers at least 50% of each coral type. +- A geomorphology Datasource can be used to measure whether a proposed area covers at least 20% of each seabottom type. + +### Classification Systems Planning processes may leverage a `classification system` for defining what levels of protection can be assigned to proposed areas. They then decide what protection levels are required at minimum to count towards meeting a planning objective. Marine Protected Areas or MPA's for example have multiple [classification schemes](https://docs.google.com/document/d/1i0baxgK8JEUjtU8mnzFiG5VB_gO8lmxCrAtJ5rltk30/edit?usp=sharing) to choose from. ## Sketching -The core SeaSketch platform allows users to create and collaborate on the design of areas or features. They are the main input to a geoprocessing project for processing and display of reports. +The core SeaSketch platform allows users to create and collaborate on the design of areas to be managed or used in a specific way. Sketches are the main input to a geoprocessing project for processing and display of reports. ### Sketch @@ -173,15 +195,9 @@ A [Sketch Collection](https://seasketch.github.io/geoprocessing/api/interfaces/g ## Geographies -A `Geography` represents one or more geographic boundaries for the project, and is primarily used to define project planning boundaries. Geographies are contained in `project/geographies.json`. - -By default, a report will only display results for one geography at a time if the geoprocessing functions are designed to only process one geography at a time. A `GeographySwitcher` is typically used to provide the ability to switch geographies, which will run the geoprocessing functions with a different geography input. - -You could write a geoprocessing function that processes all geographies in one run, you just have to take into consideration the processing time required to complete it. - -The default Geography for a new blank project is the entire world. The default Geography for a new Ocean EEZ project is the EEZ boundary you chose at creation time. +`Geographies` identify polygon or multipolygon boundaries that serve specific purposes in your project. The main use case is to define planning boundaries for your project, if you have them. -World geography: +Geographies are contained in `project/geographies.json`. The default Geography for a new project is the `world` geography. It uses the `world` datasource which is a polygon covering the entire extent of the world. ```json { @@ -193,7 +209,49 @@ World geography: } ``` -EEZ geography: +Here is an example of a project with the `world` geography used as the outer boundary, and then 4 subregion geographies: + +```json +[ + { + "geographyId": "world", + "datasourceId": "world", + "display": "World", + "groups": ["default-boundary"], + "precalc": true + }, + { + "geographyId": "north_sr", + "datasourceId": "north_sr", + "display": "North Planning Region", + "groups": [], + "precalc": true + }, + { + "geographyId": "northcentral_sr", + "datasourceId": "northcentral_sr", + "display": "North Central Planning Region", + "groups": [], + "precalc": true + }, + { + "geographyId": "central_sr", + "datasourceId": "central_sr", + "display": "Central Planning Region", + "groups": [], + "precalc": true + }, + { + "geographyId": "south_sr", + "datasourceId": "south_sr", + "display": "South Planning Region", + "groups": [], + "precalc": true + } +] +``` + +Here is an example of a more elaborate exclusive economic geography. Its boundary polygon(s) are uniquely identified within the larger global EEZ dataset using a `propertyFilter` and `bboxFilter`. ```json { @@ -226,14 +284,14 @@ EEZ geography: } ``` -Each `Geography` points to a [datasource](#datasources), which provides the polygon or multipolygon boundary for that Geography. +Once defined, geographies are used in the following ways: -The way that Geographies are used in reporting is that sketches and datasources are clipped to these geographies, in order to produce metrics that are representative of that geographic boundary. Project code is geography-aware at multiple points including: +- `Preprocessing functions` - a preprocessing function can clip a user-drawn sketch to one or more geographies so that they are guaranteed to be within it. +- `Precalc` - the precalc command calculates overall metrics (total area, count, sum of value) within each geography for each datasource. These precalc metrics are used to report a sketches % overlap with a datasource "per geography". +- `Geoprocessing functions` - geoprocessing functions can perform spatial analysis and report results "per geography" by clipping a user-drawn sketch to each geography and doing the analysis once for each. +- `Report clients` - report clients are able to display metrics "per geography" and even allow the user to switch between geographies, viewing results for them one at a time. -- preprocessing functions - when sketches should be clipped to a geography beforehand. -- geoprocessing functions - when sketches should be clipped to a geography at runtime (common in multi-geography use case) -- precalc - to calculate overall metrics (total area, count, sum of value) within each geography for each datasource. These precalc metrics are used in the denominator when calculating a sketches % overlap with a given datasource within a given geography. -- report clients - to retrieve precalculated metrics, allow the user to potentially switch between geographies, and to pass the current user-selected geography to the geoprocessing functions. +You are not required to use the Geographies feature, though it has first-class in the framework. ### Geography Properties @@ -250,6 +308,12 @@ The way that Geographies are used in reporting is that sketches and datasources - `bboxFilter` ([number, number, number, number]) - constrain geography to only features within a bounding box +### Geography Switcher + +By default, a report will only display results for one geography at a time if the geoprocessing functions are designed to only process one geography at a time. A `GeographySwitcher` is typically used to provide the ability to switch geographies, which will run the geoprocessing functions with a different geography input. + +You could write a geoprocessing function that processes all geographies in one run, you just have to take into consideration the processing time required to complete it. + ## Datasources A datasource represents a spatial dataset, including what type it is, how to acces it, and optionally some key statistics for the whole dataset (count, sum, area). Datasources are a combination of `vector` or `raster` and `internal` or `external`. @@ -285,7 +349,7 @@ Internal: - `src` - local file path to access the datasource at -## External Datasources +### External Datasources External [vector](https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#ExternalVectorDatasource) and [raster](https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#ExternalRasterDatasource) datasources are published on the Internet, external to the geoprocessing project and its stack. This is commonly used for what are called `global` datasets that any geoprocessing project can use. @@ -333,8 +397,48 @@ This example is for an `eez` boundary datasets, that is imported from the `curre ## Metrics +Metrics are measurements, whether statistical, geometric, or something more qualitative. + +In the geoprocessing framework a [Metric](../api/geoprocessing/type-aliases/Metric.md) refers specifically to a single recorded `value`, for one or more dimensions. A geoprocessing function might return an array with hundreds of `Metric` values. + +The following is an example of a single Metric object. + +```json +{ + "metricId": "boundary-area", + "sketchId": "abc123", + "classId": "eez", + "groupId": null, + "geographyId": null, + "value": 75066893245.88089, + "extra": { + "sketchName": "fsm-east-west" + } +} +``` + +It's a metric measuring the area of boundaries for sketch `abc123`, measuring an overlap of `75066893245.88089 square meters` with the `eez` boundary. There is no associated group or geography. The name of the sketch is additionally included for human readability. + +The base properties for a `Metric` are: + +- `metricId` - the unique id of the metric +- `value` - the numeric value of the measurement. +- `extra` - additional properties that can be added as needed. + +A Metric has properties for one or more standard [dimensions](https://github.com/seasketch/geoprocessing/blob/d633b20/packages/geoprocessing/src/types/metrics.ts#L5). These are used for [stratifying](https://en.wikipedia.org/wiki/Stratified_sampling) data. A `null` value for an individual metric object property indicates the dimension does not apply. + +- `sketchId` - optional id of sketch this measurement is for. +- `classId` - optional id of data class that this metric is for. + - Example - boundary overlap metrics may be categorized by boundary type (e.g. eez, offshore, nearshore). This ID can often be used to represent informal geographic boundaries instead of formal `Geographies` like with `geographyId` +- `groupId` - optional id of group that this metric is for. Groups are typically not defined by the datasource, but by the planning process. + - Example - protections levels, where all of the sketches in a collection may be grouped by the protection level they achieve (low, high, full) and their metrics combined into an aggregate value for each level. +- `geographyId` - optional id of a `Geography` that this metric is for. + - Example - you want to stratify by multiple jurisdictional boundaries (eez, nearshore, offshore) and you also want to stratify by multiple distinct environmental regions defined by natural clusterings of depth, species, seabottom, etc. (region 1, region 2, region 3). This allows you to answer for example how much does a sketch overlap with areas that are nearshore and environmental region 1? You can use classId for the jurisdictional boundaries and `groupId` for the environmental regions. + ### What can be measured? +A number of metrics can be calculated by overlaying a sketch with a vector or raster datasource. See the [geoprocessing](../geoprocessing.md) guide for more information. Common `metricIds` include: + Vector: ```typescript @@ -344,8 +448,6 @@ area: number; count: number; ``` -High-level toolbox functions include: `overlapFeatures()` - Raster: ```typescript @@ -369,7 +471,7 @@ median?: Nullable; mode?: Nullable; /** Different between min and max value */ range?: Nullable; -/** Sum of all valid cennls in raster */ +/** Sum of all valid cells in raster */ sum?: number; /** Standard deviation of valid cells in raster */ std?: Nullable; @@ -378,15 +480,9 @@ variance?: Nullable; **/ ``` -High level toolbox functions include: `rasterMetrics()` (multi-band capable), and the now-deprecated `overlapRaster()`, `overlapRasterClass` (not multi-band capable) - -Low level toolbox functions include: `rasterStats()` (multi-band capable) as well as `getSum()`, `getArea` (not multi-band capable) - -If these don't meet your needs, you can create your own raster functions by using `geoblaze` library methods directly, or by copying and modifying a function like `getSum`, which knows how to generate and return an array of `Metric` objects, and adapt it to meet your needs. - ### Metric Group -A [MetricGroup](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts#L11) represents a specific metric for your project, with a base metric type, and one or more data classes. Think of it as a unifying object, that pulls everything together. +A [MetricGroup](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts#L11) defines a specific type of metric for your project, with a base metric type, and one or more data classes. Think of it as a unifying configuration object, that pulls everything together. - [DataClass](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts#L8) - represents a single class of data. It ties it to an underlying datasource, and holds attributes used for displaying the class in user interfaces. @@ -428,43 +524,121 @@ This defines a `boundaryAreaOverlap` metric of type `areaOverlap`, which we defi - offshore - typically 12-200 nautical miles - nearshore - typically 0-12 nautical miles, aka territorial sea boundary. -In thise case, each data class has their own datasource, each of which contains a polygon boundary. A single top-level datasource could also be used, with classes defined using an attribute, if the data happened to be structured that way. Each data class is tied to its own planning objective, and its own layer published on the map as a visual representation of its spatial extent. +Each data class points to its own datasource. And you can assume each of those datasources contain a single polygon boundary. It's also acceptable to have a single datasource, with 3 different boundaries in it, and an attribute to differentiate them, which would become the `classId`. -### Metric Value +Each data `class` can be tied to its own planning `objective`, and its own map `layer`. -A metric value is a quantifiable measure of something, a single measurement. In this framework, the value is just called a [Metric](https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.Metric.html)for short. It has the following base properties: +### Metric group with two data sources -- `metricId` - the unique id of the metric -- `value` - the numeric value of the measurement. -- `extra` - additional properties that can be added as needed. +You can have a metric group where each class references a different datasource. If we wanted both the reef extent data and benthic habitat data in one report, the metric group can look as follows: -A Metric has properties for one or more standard [dimensions](https://github.com/seasketch/geoprocessing/blob/d633b20/packages/geoprocessing/src/types/metrics.ts#L5). These are used for [stratifying](https://en.wikipedia.org/wiki/Stratified_sampling) data. A `null` value for an individual metric object property indicates the dimension does not apply. +```json +{ + "metricId": "benthicHabitat", + "type": "areaOverlap", + "classes": [ + { + "classId": "reefextent", + "display": "Coral Reef", + "datasourceId": "reefextent" + }, + { + "classId": "Sand", + "classKey": "class", + "display": "Sand", + "datasourceId": "benthic" + }, + { + "classId": "Rock", + "classKey": "class", + "display": "Rock", + "datasourceId": "benthic" + }, + { + "classId": "Rubble", + "classKey": "class", + "display": "Rubble", + "datasourceId": "benthic" + } + ] +} +``` -- `sketchId` - optional id of sketch this measurement is for. -- `classId` - optional id of data class that this metric is for. - - Example - boundary overlap metrics may be categorized by boundary type (e.g. eez, offshore, nearshore). This ID can often be used to represent informal geographic boundaries instead of formal `Geographies` like with `geographyId` -- `groupId` - optional id of group that this metric is for. Groups are typically not defined by the datasource, but by the planning process. - - Example - protections levels, where all of the sketches in a collection may be grouped by the protection level they achieve (low, high, full) and their metrics combined into an aggregate value for each level. -- `geographyId` - optional id of a `Geography` that this metric is for. - - Example - you want to stratify by multiple jurisdictional boundaries (eez, nearshore, offshore) and you also want to stratify by multiple distinct environmental regions defined by natural clusterings of depth, species, seabottom, etc. (region 1, region 2, region 3). This allows you to answer for example how much does a sketch overlap with areas that are nearshore and environmental region 1? You can use classId for the jurisdictional boundaries and `groupId` for the environmental regions. +### Metric group with quantitative raster data sources -The following is an example of a single Metric object. +An example of a metric group `fishingEffort` which displays multiple quantitative raster data files. This report has been made using [Global Fishing Watch Apparent Fishing Effort data](https://globalfishingwatch.org/dataset-and-code-fishing-effort/), which reports fishing effort in hours. To calculate for the sum of fishing effort within our plan, we would use `type = valueOverlap`. ```json { - "metricId": "boundary-area", - "sketchId": "abc123", - "classId": "eez", - "groupId": null, - "geographyId": null, - "value": 75066893245.88089, - "extra": { - "sketchName": "fsm-east-west" - } + "metricId": "fishingEffort", + "type": "valueOverlap", + "classes": [ + { + "datasourceId": "all-fishing", + "classId": "all-fishing", + "display": "All Fishing 2019-2022" + }, + { + "datasourceId": "drifting-longlines", + "classId": "drifting-longlines", + "display": "Drifting Longline" + }, + { + "datasourceId": "pole-and-line", + "classId": "pole-and-line", + "display": "Pole and Line" + }, + { + "datasourceId": "set-longlines", + "classId": "set-longlines", + "display": "Set Longline" + }, + { + "datasourceId": "fixed-gear", + "classId": "fixed-gear", + "display": "Fixed Gear" + } + ] } ``` -It's a metric measuring the area of boundaries for sketch `abc123`, measuring an overlap of `75066893245.88089 square meters` with the `eez` boundary. There is no associated group or geography. The name of the sketch is additionally included for human readability. +### Metric group with categorical raster data sources + +An example of a metric group `fishRichness` which displays a categorical raster `fishRichness.tif`. The raster data displays the number of key fish species present in each raster cell -- from 1 to 5 species. `classId` should be set to the corresponding numerical value within the raster. + +```json +{ + "metricId": "fishRichness", + "type": "countOverlap", + "classes": [ + { + "datasourceId": "fishRichness", + "classId": "1", + "display": "1 species" + }, + { + "datasourceId": "fishRichness", + "classId": "2", + "display": "2 species" + }, + { + "datasourceId": "fishRichness", + "classId": "3", + "display": "3 species" + }, + { + "datasourceId": "fishRichness", + "classId": "4", + "display": "4 species" + }, + { + "datasourceId": "fixed-gear", + "classId": "5", + "display": "5 species" + } + ] +} +``` ## Objectives diff --git a/website/docs/concepts/assets/SystemModelBasic.jpg b/website/docs/concepts/assets/SystemModelBasic.jpg index 43b1502e8618ed3d808cdcd439f220375923952a..f7cce2a133cd02a4922a3ad48b06ae443baac598 100644 GIT binary patch literal 18320 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 J2`uRJ{{tdiYqF2oMOt-Q6X)yB97A?h>@> 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 V|E>*x|9?IIUDV + | SketchCollection, + extraParams: DefaultExtraParams = {} +): Promise { +``` + +The first goal of a geoprocessing function might be to validate the sketch. + +```typescript +import { + isPolygonFeature, + isPolygonSketchCollection, +} from "@seasketch/geoprocessing"; + +if (!isPolygonFeature(sketch) || isPolygonSketchCollection(sketch)) { + throw new Error("Invalid sketch, expected Polygon or MultiPolygon"); +} +``` + +A next step might be to extract extraParams and use [ProjectClient](./api/geoprocessing/classes/ProjectClientBase.md) helper methods to access project configuration such as geographies, datasources, etc. + +```typescript +const mg = project.getMetricGroup("protectionCountOverlap"); +const geographyId = getFirstFromParam("geographyIds", extraParams); +const curGeography = project.getGeographyById(geographyId, { + fallbackGroup: "default-boundary", +}); + +const finalSketch = await clipToGeography(sketch, curGeography); +``` + +Another goal might be to extract custom attributes from the sketch and use that in analysis. + +```typescript +const sketchFeatures = getSketchFeatures(sketch); + +const protectionLevels = sketchFeatures.reduce>( + (levels, sketch) => { + console.log(sketch.properties); + const designation = getUserAttribute(sketch.properties, "designation", ""); + if (!designation) throw new Error("Malformed sketch, no designation level"); + + levels[designation] = 1 + (levels[designation] || 0); + return levels; + }, + {}, +); +``` + +The key part of most geoprocessing functions is to take the parameters you've collected, use a pre-defined MetricGroup to retrieve and load datasources, then finally run the an analysis function to produce [Metrics](./concepts/Concepts.md#metrics), append additional IDs to those metrics (class, geography, etc.) so that it's explicitly clear what the value represents, and merge those metrics into a single result. + +```typescript +const metrics: Metric[] = ( + await Promise.all( + metricGroup.classes.map(async (curClass) => { + if (!curClass.datasourceId) + throw new Error(`Expected datasourceId for ${curClass}`); + const url = `${project.dataBucketUrl()}${getCogFilename( + project.getInternalRasterDatasourceById(curClass.datasourceId), + )}`; + const raster = await loadCog(url); + + const overlapResult = await rasterMetrics(raster, { + metricId: metricGroup.metricId, + feature: finalSketch, + }); + return overlapResult.map( + (metrics): Metric => ({ + ...metrics, + classId: curClass.classId, + geographyId: curGeography.geographyId, + }), + ); + }), + ) +).reduce( + // merge + (metricsSoFar, curClassMetrics) => [...metricsSoFar, ...curClassMetrics], + [], +); +``` + +The final goal is to produce a payload to return to the caller. Sorting and rekeying metrics makes them more human readable. + +```typescript +return { + metrics: sortMetrics(rekeyMetrics(metrics)), +}; +``` + +Lastly, you'll pass your function to the GeoprocessingHandler function and export it for use. + +```typescript +export default new GeoprocessingHandler(protection, { + title: "protection", + description: "returns area metrics for protection levels for sketch", + timeout: 60, // seconds + executionMode: "async", + memory: 1024, +}); +``` + +Some things to note: + +- Typically, you will start with the default `memory` of 1024. +- Any function that is expected to take more than 3-5 seconds to run should be configured as `async` instead of `sync`, unless it's a worker function, which should always be `sync`. diff --git a/website/docs/gip/GIP-1-i18n.md b/website/docs/gip/GIP-1-i18n.md index ced67cdd5e..79bccbf36d 100644 --- a/website/docs/gip/GIP-1-i18n.md +++ b/website/docs/gip/GIP-1-i18n.md @@ -1,14 +1,10 @@ -# i18n +# Internationalization (i18n) Geoprocessing Improvement Proposal 1 -## Need - -- SeaSketch Next supports language translation and there is an opportunity for reports to offer language translation in sync (current active language and language switch events). -- Over half of SeaSketch projects would benefit from supporting additional languages in reports, users may want to choose from 2-3 different languages. - ## Glossary +i18n - shorthand name for Internationalization. Term - A unique string to be translated. Typically it will be the exact string to translate in English language, or it may just be a descriptor. ## Requirements @@ -47,19 +43,19 @@ Geoprocessing projects: CLI commands will be the main way developers work with translations. -- `translation:extract` +- `extract:translation` - extracts all translations using babel and [babel-plugin-i18next-extract](https://github.com/gilbsgilbs/babel-plugin-i18next-extract). -- `translation:publish` +- `publish:translation` - Posts translations for all languages to POEDITOR - Behavior is configured via `src/i18n/config.ts`. Translations with namespace specified by `localNamespace` are written to POEditor with context value specified by `remoteContext`. - All english translations are published, overwriting any in POEditor, since the code is their source of truth. - For non-english languages, POEditor is the source of truth, so if a translation is not defined in POEditor, then a local project translation is published if available, to seed it the first time. - - For GP projects, if a project translation is not available, then a base translation will be published as fallback if available. Running `translation:import` after that will then import those base translations back and seed the local project translations. -- `translation:import` + - For GP projects, if a project translation is not available, then a base translation will be published as fallback if available. Running `import:translation` after that will then import those base translations back and seed the local project translations. +- `import:translation` - fetches translations from POEditor for all non-english languages having context value specified by `remotextContex` property in `src/i18n/config.son`. Any existing translation values will be overwritten. Translations are saved to the namespace specified by the `localNamespace` property in `project/i18n.json`. -- `translation:sync` +- `sync:translation` - runs in succession `extract`, `publish`, then `import`. -- `translation:install` (available in gp project only) +- `install:translation` (available in gp project only) - copies base translations from the installed geoprocessing library to the projects `src/i18n/baseLang` directory, overwriting any previous version. Configuration files: @@ -97,7 +93,7 @@ For geoprocessing projects: - CLI commands will live at the root of the project. - When creating a new geoprocessing project, the `base` translations for the current version of the gp library are installed to the project at `src/i18n/baseLang`. Report developers should not edit this. -- Report developers working on a geoprocessing project should not need to make sure that they keep their base translations up to date. They should automatically upgrade on every run of `npm install` using the `prepare` command. +- Report developers working on a geoprocessing project will need to make sure that they keep their base translations up to date. They do this by running `npm run extract:translation`. - Project translations are managed alongside base translations under `src/i18n/lang`. These can be edited but typically will be done via CLI commands (see use cases below). - When initially created, each geoprocessing project will have `base` translations installed. - On publish, always push all local English translations. For all non-english langauges, push translations if it doesn't already exist in POEditor. Additionally, for all languages, if there is no local project translation, fallback to base translation if it exists. @@ -149,7 +145,7 @@ For geoprocessing projects: ### 3. Reports developed by external developer not using POEDITOR but in local repo -- Developer will use `translation:extract` but not `translation:import` and `translation:publish`. +- Developer will use `extract:translation` but not `import:translation` and `publish:translation`. - Developer uses `i18n-ally` (which vscode settings are established for) to translate strings. - A separate translation service could also be integrated other than POEditor. @@ -163,11 +159,11 @@ You do not need to complete this step unless you want to support language transl POEditor offers free translation for open source projects, but you are not required to use it. You can maintain your translations locally. -## Managing Translations Using POEditor +### Managing Translations Using POEditor -There are 4 commands you will commonly use in working with translations: `translation:extract`, `translation:publish`, `translation:import` and `translation:sync`. You can read more about them on the [CLI](/CLI.md) page. +There are 4 commands you will commonly use in working with translations: `extract:translation`, `publish:translation`, `import:translation` and `sync:translation`. You can read more about them on the [CLI](/CLI.md) page. -When you `init` a new project it will automatically run `translation:install` and `translation:extract`, so your local translatiions in `src/i18n/lang` will be up to date. +When you `init` a new project it will automatically install the `src/i18n` directory and base translations from the geoprocessing library, and then run `extract:translation` to extract project-specific translation strings. ### Setup POEditor as a developer on the SeaSketch team @@ -192,13 +188,16 @@ When you `init` a new project it will automatically run `translation:install` an - Add credentials to your `.bashrc` file ```bash +nano ~/.bashrc + export POEDITOR_PROJECT=[YOUR_PROJECT_ID_NUMBER] export POEDITOR_API_TOKEN=[YOUR_API_TOKEN] -``` -[How do I do that?](../Tipsandtricks.md#editing-your-startup-bash-script-in-ubuntu) +Ctrl-O to save +Ctrl-X to exit +``` -Now, verify the environment variables are set +Now source the changes into to your current shell and verify the environment variables are set ```bash source ~/.bashrc @@ -208,7 +207,7 @@ echo $POEDITOR_API_TOKEN ### Publishing Translations to POEditor -Then `npm run translation:publish` to push the new/edited english strings to POEditor. The strings will be tagged in POEditor with the name of the project e.g the context for yours will be (`fsm-reports-test`). +Then `npm run publish:translation` to push the new/edited english strings to POEditor. The strings will be tagged in POEditor with the name of the project e.g the context for yours will be (`fsm-reports-test`). ![POEditor Context](assets/PoeditorContext.png "POEditor Context") @@ -216,7 +215,7 @@ with Someone will then need to translate the strings using the POEditor service ## Importing Translations from POEditor -You will then need to run `npm run translation:import` to bring these translations back into the project. You should see files added/updated for each language code in `src/i18n/lang`. +You will then need to run `npm run import:translation` to bring these translations back into the project. You should see files added/updated for each language code in `src/i18n/lang`. Commit all translation files, including English and non-english, to the code repository. These will be bundled into your production app. @@ -224,7 +223,7 @@ Commit all translation files, including English and non-english, to the code rep If you choose not to use POEditor then the easiest option is to maintain translations in your project code repository. -You will still use the `translation:extract` command to extract your strings. +You will still use the `extract:translation` command to extract your strings. You can then use the [i18n-ally](https://github.com/lokalise/i18n-ally) vscode extension to manage your translations. Your project already includes vscode settings for using this extension in `.vscode/settings.json`. Read the extension documentation to learn how to use for example the auto-translation feature. @@ -236,10 +235,10 @@ If your translations are working in storybook, then there is nothing more to do. If your project needs to add a new language that is not already supported, follow these steps: -- Add the new language to `src/i18n/supported.ts`. The language code should match what [SeaSketch uses](https://github.com/seasketch/next/blob/master/packages/client/src/lang/supported.ts). -- Add the language in your POEditor project. Make sure the language code matches what SeaSketch Next is using, and what you have in supported.ts +- Add more new language codes to the `project/basic.json` languages array. The full set of available languages codes can be found in `src/i18n/languages.json`. The language codes should match what [SeaSketch uses](https://github.com/seasketch/next/blob/master/packages/client/src/lang/supported.ts). +- Make sure the language is defined in your POEditor project with the same language code. - Translate the strings in POEditor to the new language. -- On your next run of `translation:import` a folder for the language will be added to `src/i18n/lang` and include a `translation.json` file with the strings that you translated in POEditor. +- On your next run of `import:translation` a folder for the language will be added to `src/i18n/lang` and include a `translation.json` file with the strings that you translated in POEditor. ## Test report translations @@ -289,7 +288,7 @@ export const TestComponent = () => { Both `t()` and `Trans` can be used within the same file, whatever combination gets the job done. Notice that the `Trans` example includes an `i18nKey` property. This is useful for providing context for where this string is in the codebase, as you'll soon see in the extracted strings. You can do the same thing with the `t` functions using `t('myKey', 'stringValue')`. -Once you've added new strings to your component or edited existing ones, and wrapped them in translation calls, you will then need to run `npm run translation:extract`. You should then see all new/changed english string updated in `src/i18n/lang/en/translation.json`. Here's an example project and its [translations](https://github.com/seasketch/azores-nearshore-reports/blob/main/src/i18n/lang/en/translation.json) +Once you've added new strings to your component or edited existing ones, and wrapped them in translation calls, you will then need to run `npm run extract:translation`. You should then see all new/changed english string updated in `src/i18n/lang/en/translation.json`. Here's an example project and its [translations](https://github.com/seasketch/azores-nearshore-reports/blob/main/src/i18n/lang/en/translation.json) Here is what should be the resulting extracted strings for translation: diff --git a/website/docs/introduction.md b/website/docs/introduction.md index 8e5ccfa457..4828e2bcc3 100644 --- a/website/docs/introduction.md +++ b/website/docs/introduction.md @@ -44,6 +44,22 @@ Wiki docs, including any code snippets in tutorials, are licensed under a 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%0DvHosCp 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 C@|Gvnx*n{0!!-Ty8SS=mYMWG{iF}3G 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 literal 0 HcmV?d00001 diff --git a/website/docs/toolbox/assets/intersection.jpg b/website/docs/toolbox/assets/intersection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c6888c4c134ff8ccd451e5e1b82f5185836a28c GIT binary patch literal 97009 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≫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%0AN-3T&pj$#zhY>6uD? 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 cROvPK@6l=WS9B}=c*c)d_ Open Folder` and create or choose a folder where you keep source code. A folder called `src` or `code` in your users home directory is reasonable. Then click `Select Folder` to finish. + - Press `Ctrl-J` or `Cmd-backtick` to open a terminal. The current directory of the terminal will be your workspace folder. + - Enter the command to clone the geoprocessing-devcontainer repository to your workspace. + - `git clone https://github.com/seasketch/geoprocessing-devcontainer` + - If you had previously cloned this repository then update it now with `cd geoprocessing-devcontainer && git pull` + - Click `Open Folder` button or `File -> Open Folder` and open the repo folder you just cloned. + - Press `Ctrl-J` or `Cmd-backtick` to open a terminal again. +- Install required VSCode extensions. You may be prompted to do this, otherwise go to the `Extension` panel found on the left side of the VSCode window. Then install the following extensions: + - Remote Development + - Remote Explorer + - Docker + - Dev Containers -- Windows 11 -- MacOS 11.6.8 Big Sur -- Linux: untested but recent versions of Linux such as Ubuntu, Debian, or Fedora should be possible that are capable of running VSCode and Docker Desktop. +Once you have added the `Dev Containers` extension you should be prompted to "Reopen folder to develop in a container". _Do not do this yet._ -Web browser: +- In the file `Explorer` panel, open the `.devcontainer` folder. + - This top-level folder contains the configuration for the `stable` geoprocessing devcontainer you will use. +- Make a copy of `.devcontainer/.env.template` file and name it `.env`. + - You don't need to add anything yet to your .env file, but it is required that it exists in the `.devcontainer` folder. -- Chrome is the most common but Firefox, Safari, Edge can also work. Their developer tools will all be a little different. +Now start the devcontainer: -### Install Options +- `Ctrl-Shift-P` or `Cmd-Shift-P` to open the VSCode command palette +- type “Reopen in container” and select the Dev Container command to do so. +- Select the `Geoprocessing Local Stable` environment. +- VSCode will pull the latest `geoprocessing-workspace` docker image, create a container with it, and start a remote code experience inside the container. +- Notice the bottom left blue icon in your vscode window. It may say `Opening remote connection` and eventually will say `Dev Container: Geoprocessing`. This is telling you that this VSCode window is running in a devcontainer environment. -You have 3 options for how to develop geoprocessing projects +![Manage Devcontainers](assets/devcontainer-blue.jpg "Manage Devcontainers") -1. Local Docker environment - - Docker provides a sandboxed Ubuntu Linux environment on your local computer, setup specifically for geoprocessing projects. - - Best for: intermediate to power users doing development every day - - Pros - - Provides a fully configured environment, with installation of many of the third-party dependencies already take care of. - - Docker workspace is isolated from your host operating system. You can remove or recreate these environment as needed. - - You can work completely offline once you are setup. - - Cons - - You will need to get comfortable with Docker Desktop software. - - Docker is slower than running directly on your system (maybe 30%) - - Syncing data from network drives like Box into the Docker container is more challenging. -2. MacOS Bare Metal / Windows WSL - - All geoprocessing dependencies are installed and maintained directly by you on your local computer operating system. For MacOS this means no virtualization is done. For Windows, this means running Ubuntu via WSL2 aka the Windows Subsystem for Linux. - - Best for - power user. - - Pros - fastest speeds because you are running without virtualization (aka bare metal) - - Cons - prone to instability and issues due to progression of dependency versions or operating system changes. Difficult to test and ensure stable support for all operating systems and processors (amd64, arm64). +You now have a devcontainer, ready to create a project in. -Choose an option and follow the instructions below to get started. You can try out different options over time. +To exit your devcontainer: -### If Install Option #1 - Local Docker Environment +- Click the blue icon in the bottom left, and then `Reopen locally`. This will bring VSCode back out of the devcontainer session. +- You can also type `Ctrl-Shift-P` or `Cmd-Shift-P` and select `Dev Containers: Reopen folder locally`. -- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) for either Apple chip or Intel chip as appropriate to your system and make sure it's running. - - If you don't know which you have, click the apple icon in the top left and select `About This Mac` and look for `Processor` -- Install [VS Code](https://code.visualstudio.com) and open it -- Clone the geoprocessing devcontainer repository to your system +![Manage Devcontainers](assets/ManageDevcontainers.jpg "Manage Devcontainers") -```bash -git clone https://github.com/seasketch/geoprocessing-devcontainer -``` +- To update to the latest `geoprocessing-workspace` Docker image at any point you simply use a different VSCode command to start it: + - `Ctrl-Shift-P` or `Cmd-Shift-P` to open the VSCode command palette + - type "Dev Containers: Rebuild Without Cache and Reopen In Container" -- Open the geoprocessing-devcontainer folder in VSCode +See devcontainer advanced usage [guide](../devcontainer/devcontainer.md) to learn more or the [upgrade](../upgrade.md) tutorial - - `File` -> `Open Folder` -> geoprocessing-devcontainer folder +## MacOS Direct Install -- If you are prompted to install suggested extensions, then do so, otherwise go to the Extension panel and install the following: - - Remote Development - - Dev Containers - - Docker - - Remote Explorer -- Once you have DevContainer support, you should be prompted to ”Reopen folder to develop in a container”. _Do not do this yet._ -- Under the `.devcontainer/local-dev` folder, make a copy of the `.env.template` file and rename it to `.env`. - - Fill in your POEditor API token for you account, which you can find here - https://poeditor.com/account/api. If you don't have one, then follow the instructions to [create your own](../gip//GIP-1-i18n.md#setup-poeditor-as-an-independent-developer). -- If you have a data folder to mount into the docker container from your host operating system, edit the `.devcontainer/local-dev/docker-compose.yml` file and uncomment the volume below this comment - - `# Bound host volume for Box data folder` - - The volume is preset to bind to your Box Sync folder in you home directory but you can change it to any path in your operating system where your data resides for all your projects. -- To start the devcontainer at any time - - `Cmd-Shift-P` to open command palette - - type “Reopen in container” and select the Dev Container command to do so. - - VSCode will reload, pull the latest `geoprocessing-workspace` docker image, run it, and start a remote code experience inside the container. -- Once container starts - - It will automatically clone the geoprocessing repository into your environment under `/workspaces/geoprocessing`, and then run `npm install` to install all dependencies. Wait for this process to finish which can take up to 3-4 minutes the first time. - - `Ctrl-J` will open a terminal inside the container. - - Navigate to geoprocessing and verify tests run successfully. - - `cd /workspaces/geoprocessing` - - `npm run test` - -If success, then you're now ready to create a new geoprocessing project in your devcontainer environment. - -- To stop devcontainer at any time - - `Cmd-Shift-P` to open command palette and type `“DevContainers: Rebuild and Reopen locally”` to find command and hit Enter. - - Choose `Local Workspace` - - Your devcontainer will now bootstrap, downloading the geoprocessing docker image and installing everything. -- Notice the bottom left blue icon in your vscode window. It may say `Opening remote connection` and eventually will say `Dev Container: Geoprocessing`. This is telling you that this VSCode window is running in a devcontainer environment. -- To exit your devcontainer: - - Click the blue icon in the bottom left, and click `Reopen locally`. This will bring VSCode back out of the devcontainer session. -- To delete a devcontainer: - - This is often the easiest way to "start over" with your devcontainer. - - First, make sure you've pushed all of your code work to Github. - - Make sure you stop your active VSCODE devcontainer session. - - Open the Remote Explorer panel in the left sidebar. - - You can right-click and delete any existing devcontainers and volumes to start over. - - You can also see and delete them from the Docker Desktop app, but it might not be obvious which containers and volumes are which. The VSCode Remote Explorer window gives you that context. +Requirement: 11.6.8 Big Sur or newer -![Manage Devcontainers](assets/ManageDevcontainers.jpg "Manage Devcontainers") +Install all software dependencies directly on your Apple machine running the MacOS operating system: -- To upgrade your devcontainer: - - The devcontainer settings in this repository may change/improve over time. You can always pull the latest changes for your `geoprocessing-devcontainer` repository, and then `Cmd-Shift-P` to open command palette and type `“DevContainers: Rebuild and Reopen locally”`. -- To upgrade the `geoprocessing-workspace` Docker image - - This devcontainer builds on the `geoprocessing-workspace` Docker image published at [Docker Hub](https://hub.docker.com/r/seasketch/geoprocessing-workspace/tags). It will always install the latest version of this image when you setup your devcontainer for the first time. - - It is up to you to upgrade it after the initial installation. The most likely situation is: - - You see some changes in the [Changelog](https://github.com/seasketch/docker-gp-workspace/blob/main/Changelog.md) that you want to utilize. - - You are upgrading the `geoprocessing` library for your project to a newer version and it requires additional software that isn't in your current devcontainer. This situation should be flagged in the geoprocessing [changelog](https://github.com/seasketch/geoprocessing/blob/dev/CHANGELOG.md). - - In both cases you should be able to simply update your docker image to the latest. The easiest way to do this is to: - - Push all of your unsaved work in your devcontainer to Github. This is in case the Docker `named volume` where your code lives (which is separate from the devcontainer) is somehow lost. There are also ways to make a backup of a named volume and recover it if needed but that is an advanced exercise not discussed at this time. - - Stop your devcontainer session - - Go to the `Images` menu in Docker Desktop, finding your `seasketch/geoprocessing-workspace`. - - If it shows as "IN USE" then switch to the `Containers` menu and stop all containers using `seasketch/geoprocessing-workspace`. - - Now switch back to `Images` and pull a new version of the `seasketch/geoprocessing-image` by hovering your cursor over the image, clicking the 3-dot menu on the right side and the clicking `Pull`. This will pull the newest version of this image. - - Once complete, you should be able to restart your devcontainer and it will be running the latest `geoprocessing-workspace`. - -### Option #3 - MacOS Bare Metal / Windows WSL - -#### MacOS - -- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) - - For MacOS, choose either Apple chip or Intel chip as appropriate to your system and make sure it's running. If you don't know which you have, click the apple icon in the top left and select `About This Mac` and look for `Processor`. -- Install [Node JS](https://nodejs.org/en/download/) >= v16.0.0 - - [nvm](https://github.com/nvm-sh/nvm) is great for this, then `nvm install v16`. May ask you to first install XCode developer tools as well which is available through the App Store or follow the instructions provided when you try to install nvm. +- Install [Node JS](https://nodejs.org/en/download/) >= + - [nvm](https://github.com/nvm-sh/nvm) is great for this + - First, install nvm. May ask you to first install XCode developer tools which is available through the App Store or follow the instructions provided. + - Then nvm install v. - Then open your Terminal app of choice and run `node -v` to check your node version -- Install [VS Code](https://code.visualstudio.com) - - - Install recommended [extensions](https://code.visualstudio.com/docs/editor/extension-marketplace) when prompted. If not prompted, go to the `Extensions` panel on the left side and install the extensions named in [this file](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json) - -- Install [NPM](https://www.npmjs.com/) package manager >= v8.5.0 after installing node. The version that comes with node may not be recent enough. - +- Install latest [NPM](https://www.npmjs.com/) package manager after installing node. - `npm --version` to check - `npm install -g latest` +- Install [VS Code](https://code.visualstudio.com) -- Install [Java runtime](https://www.java.com/en/download/) for MacOS (required by AWS CDK library) - -- Create a free Github account if you don't have one already - - Set your git username - -#### Windows - -For Windows, you won't actually be running bare metal. your `geoprocessing` project and the underlying code run in a Docker container running Ubuntu Linux. This is done using the Windows Subsystem for Linux (WSL2) so performance is actually quite good. Docker Desktop and VSCode both know how to work seamlessly with WSL2. Some of the building blocks you will install in Windows (Git, AWSCLI) and link them into the Ubuntu Docker container. The rest will be installed directly in the Ubuntu Docker container. - -In Windows: - -- Install [WSL2 with Ubuntu distribution](https://learn.microsoft.com/en-us/windows/wsl/install) -- Install [Docker Desktop with WSL2 support](https://docs.docker.com/desktop/windows/wsl/) and make sure Docker is running -- Open start menu -> `Ubuntu on Windows` - - This will start a bash shell in your Ubuntu Linux home directory - -In Ubuntu: - -- Install [Java runtime](https://stackoverflow.com/questions/63866813/what-is-the-proper-way-of-using-jdk-on-wsl2-on-windows-10) in Ubuntu (required by AWS CDK library) -- Install [Git in Ubuntu and Windows](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git) -- Install [VS Code](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode) in Windows and setup with WSL2. - Install recommended [extensions](https://code.visualstudio.com/docs/editor/extension-marketplace) when prompted. If not prompted, go to the `Extensions` panel on the left side and install the extensions named in [this file](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json) -- Install [Node JS](https://nodejs.org/en/download/) >= v16.0.0 in Ubuntu - - [nvm](https://github.com/nvm-sh/nvm) is great for this, then `nvm install v16`. - - Then open your Terminal app of choice and run `node -v` to check version -- Install [NPM](https://www.npmjs.com/) package manager >= v8.5.0 after installing node. The version that comes with node may not be recent enough. - - `npm --version` to check - - `npm install -g latest` - -### Final Steps - -Whichever option you chose, if you haven't already, establish the [username](https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=mac) and email address git should associate with your commits. - -You can set these per repository, or set them globall on your system for all repositories and override them as needed. Here's the commands to set globally for your environment. - -```bash -git config --global user.name "Your Name" -git config --global user.email "yourusername@yourprovider.com" -``` - -Now verify it was set: - -```bash -# If you set global - all repos -cat ~/.gitconfig - -# If you set local - current repo -cat .git/config -``` - -At this point your system is ready for you to `create a new project`, or `setup an existing project` - -## Setup an exising geoprocessing project - -This use case is where a geoprocessing project already exists, but it was developed on a different computer. - -First, clone your existing geoprocessing project to your work environment, whether this is in your local docker devcontainer, Windows WSL, or bare metal on your operating system. - -### Link your source data - -1. figure out [which option](#link-project-data) was used to bring data into your geoprocessing project, and follow the steps to set it up. - -- Option 1, you're good to go, the data should already be in `data/src` and src paths in `project/datasources.json` should have relative paths pointing into it. -- Option 2, Look at `project/datasources.json` for the existing datasource paths and if your data file paths and operating system match you may be good to go. Try re-importing your data as below, and if it fails consider migrating to Option 1 or 3. -- Option 3, if you're running a devcontainer you'll need to have made your data available in workspace by mounting it from the host operating system via docker-compose.yml (see installation tutorial) or have somehow synced or downloaded it directly to your container. Either way, you then just need to symlink the `data/src` directory in your project to your data. Make sure you point it to the right level of your data folder. Check the src paths in `project/datasources.json`. If for example the source paths start with `data/src/Data_Received/...` and your data directory is at `/Users/alex/Library/CloudStorage/Box-Box/ProjectX/Data_Received`, you want to create your symlink as such - -```bash -ln -s /Users/alex/Library/CloudStorage/Box-Box/ProjectX data/src -``` - -Assuming `data/src` is now populated, you need to ensure everything is in order. - -2.Reimport your data - -This will re-import, transform, and export your data to `data/dist`, which is probably currently empty. - -```bash -npm run reimport:data -``` - -Say yes to reimporting all datasources, and no to publishing them (we'll get to that). - -If you see error, look at what they say. If they say datasources are not being found at their path, then something is wrong with your drive sync (files might be missing), or with your symlink if you used option 3. - -If all is well, you should see no error, and `data/dist` should be populated with files. In the Version Control panel your datasources.json file will have changes, including some updated timestamps. - -But what if git changes show a lot of red and green? - -- You should look closer at what's happening. If parts of the smoke test output (examples directory JSON files) are being re-ordered, that may just be because Javascript is being a little bit different in how it generates JSON files from another computer that previously ran the tests. -- If you are seeing changes to your precalc values in precalc.json, then your datasources may be different from the last person that ran it. You will want to make sure you aren't using an outdated older version. If you are using an updated more recent version, then convince yourself the changes are what you expect, for example total area increases or decreases. - -What if you just can't your data synced properly, and you just need to move forward? - -- If the project was deployed to AWS, then there will be a copy of the published data in the `datasets` bucket in AWS S3. -- To copy this data from AWS back to your `data/dist` directory use the following, assuming your git repo is named `fsm-reports-test` - - `aws s3 sync s3://gp-fsm-reports-test-datasets data/dist` - -## Create a New Geoprocessing Project - -Assuming [initial system setup](#initial-system-setup) is complete. - -This tutorial now walks through generating a new geoprocessing project codebase and committing it to Github. - -### Create Github Repository - -First, we'll establish a remote place to store your code. - -- [Create a new Github repository](https://github.com/new) called `fsm-reports-test` (you can pick your own name but the tutorial will assume this name). When creating, do not initialize this repository with any files like a README. -- In your VSCode terminal, make sure you are in your projects top-level directory. A shorthand way to do this is `cd ~/src/fsm-reports-test`. - -### Connect Git Repo - -Now enter the following commands to establish your project as a git repository, connect it to your Github repository you created as a remote called "origin", and finally push your code up to origin. - -```bash -git init -git add . -git commit -m "first commit" -git branch -M main -git remote add origin https://github.com/PUT_YOUR_GITHUB_ORG_OR_USERNAME_HERE/fsm-reports-test.git -git push -u origin main -``` - -It may ask you if it can use the Github extension to sign you in using Github. It will open a browser tab and communicate with the Github website. If you are already logged in there, then it should be done quickly, otherwise it may have you log-in to Github. - -You should eventually see your code commit proceed in the VSCode terminal. You can then browse to your Github repository and see that your first commit is present at https://github.com/[YOUR_GITHUB_ORG_OR_USERNAME]/foo-reports - -After this point, you can continue using git commands right in the terminal to stage code changes and commit them, or you can use VSCode's [built-in git support](https://code.visualstudio.com/docs/sourcecontrol/overview). - -#### If running devcontainer (Install Option 1) - -- Ensure your VSCode workspace is connected to your devcontainer -- You can now create as many geoprocessing projects as you want under `/workspaces` and they will persist as long as the associated docker volume is maintained. Each project you create should be backed by a Github repository which you should regularly commit your code to in order to ensure it's not lost. - -To get started: - -- Open a terminal with Ctrl-J if not already open -- `cd /workspaces` - -#### If Running Bare Metal (Install Option 2) - -Windows: - -- Open start menu -> `Ubuntu on Windows` - - This will start a bash shell in your Ubuntu Linux home directory -- Create a directory to put your source code - - `mkdir -d src` -- Start VSCode in the Ubuntu terminal - - `code .` - - This will install a vscode-server package that bridges your Windows and Ubuntu Linux environments so that VSCode will run in Windows and connect with your source code living in your Ubuntu Linux project directory. -- Open a terminal in VSCode with `Ctrl-J` in Windows or by clicking Terminal -> New Terminal. - - The current directory of the terminal should be your project folder. - -MacOS: - -- Open Finder -> Applications -> VSCode -- Open a terminal in VSCode with `Command-J` or by clicking Terminal -> New Terminal -- Create a directory to put your source code and change to that directory - - `mkdir -d src && cd src` - -### Initialize Geoprocessing Project - -Now we'll create a new project using `geoprocessing init`. - -```sh -npx @seasketch/geoprocessing@latest init -``` - -This command uses `npx`, which comes with `npm` and allows you to execute commands in a package. In this case it will fetch the `geoprocessing` library from the `npm` repository and run the `geoprocessing init` command to create a new project. - -`init` will download the framework, and then collect project metadata from you by asking questions. - -#### Project metadata - -As an example, assume you are developing reports for the country of `The Federated States of Micronesia`. - -```text -? Choose a name for your project fsm-report-test -? Please provide a short description of this project Test drive -``` - -Now paste the URL of the github repository you created in the first step - -```text -? Source code repository location https://github.com/[YOUR_USERNAME_OR_ORG]/fsm-reports-test -``` - -You will then be asked for the name and email that establishes you as the author of this project. It will default to your git settings. Change it as you see fit for establishing you as the author of the project. - -```text -? Your name Alex -? Your email alex@gmail.com -``` - -Now provide your organization name associated with authoring this project - -```text -? Organization name (optional) -``` - -Choose a software license. [SeaSketch](https://github.com/seasketch/next/blob/master/LICENSE) and [Geoprocessing](https://github.com/seasketch/geoprocessing/blob/dev/LICENSE) both use BSD-3 (the default choice). If you are not a member of SeaSketch you are not required to choose this. In fact, you can choose `UNLICENSED` meaning proprietary or "All rights reserved" by you, the creator of the work. - -```text -? What software license would you like to use? BSD-3-Clause -``` - -Choose an AWS region you would like to deploy the project. The most common is to choose `us-west-1` or `us-east-1`, the US coast closest to the project location. In some circumstances it can make sense to choose locations in Europe, Asia, Australia, etc. that are even closer but in practice this usually doesn't make a significant difference. - -```text -? What AWS region would you like to deploy functions in? -``` - -Now enter the type of planning area for your project. Choose Exclusive Economic Zone which is the area from the coastline to 200 nautical miles that a country has jurisdiction over. - -```text -? What type of planning area does your project have? Exclusive Economic Zone (EEZ) -``` - -Since you selected EEZ, it will now ask what countries EEZ to use. Choose Micronesia - -```text -? What countries EEZ is this for? Micronesia. -``` - -If you answered `Other` to type of planning area it will now ask you for the name of this planning area. - -```text -? Is there a more common name for this planning area to use in reports than Micronesia? (Use arrow keys) -❯ Yes - No -``` - -Answer `No`. If you answered yes it would ask you: - -```text -What is the common name for this planning area? -``` - -Finally, you will be asked to choose a starter template. Choose `template-ocean-eez`. It will come with some features out of the box that are designed for EEZ planning. `template-blank-project` is a barebones template and let's you start almost from scratch. - -```text -? What starter-template would you like to install? - template-blank-project - blank starter project -❯ template-ocean-eez - template for ocean EEZ planning project -``` - -After pressing Enter, your project will finish being created and installing all dependencies in `~/src/fsm-reports`. - -##### Blank starter project - -Note, if you had selected `Blank starter project` as your template, it would then ask you for the bounding box extent of your projects planning area, in latitude and longitude. - -```text -? What is the projects minimum longitude (left) in degrees (-180.0 to 180.0)? -? What is the projects minimum latitude (bottom) in degrees (-180.0 to 180.0)? -? What is the projects maximum longitude (right) in degrees (-180.0 to 180.0)? -? What is the projects maximum latitude (top) in degrees (-180.0 to 180.0)? -``` - -The answers to these questions default to the extent of the entire world, which is a reasonable place to start. This can be changed at a later time. - -### Open in VSCode Workspace and Explore Structure - -Next, to take full advantage of VSCode you will need to open your new project and establish it as a workspace. - -#### If Running Devcontainer or (Install Option 1) - -Once you have more than one folder under `/workspaces` backed by a git repository, VSCode will be default to a `multi-root` workspace. - -For the best experience, you will want open a single workspace in your VSCode for a single folder in your devcontainer. - -`File` -> `Open folder` -> /workspaces/fsm-report-test - -VSCode should now reopen the under this new workspace, using the existing devcontainer, and you're ready to go. - -#### If Running Bare Metal (Install Option 2) - -Type `Command-O` on MacOS or `Ctrl-O` on Windows or just click `File`->`Open` and select your project under `[your_username]/src/fsm-reports-test` - -VSCode will re-open and you should see all your project files in the left hand file navigator. - -- Type `Command-J` (MacOS) or `Ctrl-J` (Windows) to reopen your terminal. Make this a habit to have open. - -#### Project Structure - -Next, take some time to learn more about the structure of your new project, and look through the various files. You can revisit this section as you get deeper into things. - -#### Configuration Files and Scripts - -There are a variety of project configuration files. Many have been pre-populated usings your answers to the initial questions. You can hand edit most of these files later to change them, with some noted exceptions. - -- `package.json` - Javascript [package](https://docs.npmjs.com/cli/v9/configuring-npm/package-json) configuration that defines things like the project name, author, and third-party dependencies. The [npm](https://docs.npmjs.com/cli/v6/commands) command is typically used to add, upgrade, or remove dependencies using `npm install`, otherwise it can be hand-edited. -- `tsconfig.json` - contains configuration for the [Typescript](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) compiler -- `project/` - contains project configuration files. - - `basic.json` - contains basic project configuration. - - `planningAreaType`: `eez` or `other` - - bbox - the bounding box of the project as [bottom, top, left, right]. This generally represents the area that users will draw shapes. It can be used as a boundary for clipping, to generate examples sketches, and as a window for fetching from global datasources. - - `planningAreaId` - the unique identifier of the planning region used by the boundary dataset. If your planningAreaType is `eez` and you want to change it, you'll find the full list [in github](https://raw.githubusercontent.com/seasketch/geoprocessing/dev/packages/geoprocessing/scripts/global/datasources/mr-eez-precalc.json), just look at the UNION property for the id to use - - `planningAreaName` - the name of the planning region (e.g. Micronesia) - - `externalLinks` - central store of links that you want to populate in your reports. - - `geoprocessing.json` - file used to register assets to be bundled for deployment. If they aren't registered here, then they won't be included in the bundle. - - `geographies.json` - contains one or more planning geographies for your project. If you chose to start with a blank project template, you will have a default geography of the entire world. If you chose to start with the Ocean EEZ template, you will have a default geography that is the EEZ you chose at creation time. Geographies must be manually added/edited in this file. You will then want to re-run `precalc` and `test` to process the changes and make sure they are working as expected. Learn more about [geographies](../concepts/Concepts.md#geographies) - - `datasources.json` - contains an array of one or more registered datasources, which can be global (url) or local (file path), with a format of vector or raster or subdivided. Global datasources can be manually added/edited in this file, but local datasources should use the [import](#importing-your-data) process. After import, datasources can be manually added/edited in this file. You will then want to run `reimport:data`, `precalc:data`, `precalc:clean`, and `test` to process the changes and make sure they are working as expected. Learn more about [datasources](../concepts/Concepts.md#datasources) - - `metrics.json` - contains an array of one or more metric groups. Each group defines a metric to calculate, with one or more data classes, derived from one or more datasources, measuring progress towards a planning objective. An initial boundaryAreaOverlap metric group is included in the file by default that uses the global eez datasource. Learn more about [metrics](../concepts/Concepts.md#metrics) - - `objectives.json` - contains an array of one or more objectives for your planning process. A default objective is included for protection of `20%` of the EEZ. Objectives must be manually added/edited in this file. Learn more about [objectives](../concepts/Concepts.md#objectives) - - `precalc.json` - contains precalculated metrics for combinations of geographies and datasources. Specifically it calculates for example the total area/count/sum of the portion of a datasources features that overlap with each geography. This file should not be manually edited. If you have custome metrics/precalculations to do, then use a separate file. Learn more about the [precalc](#precalc-data) command. - -The object structure in many of the JSON files, particularly the `project` folder, follow strict naming and structure (schema) that must be maintained or you will get validation errors when running commands. Adding additional undocumented properties may be possible, but is not tested. The schemas are defined here: - -- [Basic](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/projectBasic.ts) -- [Geographies](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/geography.ts) -- [Datasources](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/datasource.ts) -- [MetricGroup](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts) - - [DataClass](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts) -- [Objective](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/objective.ts) -- [Precalc Metrics](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metrics.ts) - -#### Project Assets - -- `src/` - contains all source code - - `clients/` - report clients are React UI components that can be registered with SeaSketch and when given a sketch URL as input, are able to run the appropriate geoprocessing functions and display a complete report. This can include multiple report pages with tabbed navigation. - - `components/` - components are the UI building blocks of report clients. They are small and often reusable UI elements. They can be top-level ReportPage components, ResultCard components within a page that invoke geoprocessing functions and display the results, or much lower level components like custom Table or Chart components. You choose how to build them up into sweet report goodness. - - `functions/` - contains preprocessor and geoprocessor functions that take input (typicall sketch features) and return output (typically metrics). They get bundled into AWS Lambda functions and run on-demand. - - `i18n/` - contains building blocks for localization aka language translation in reports. - - `scripts/` - contains scripts for working with translations - - `lang/` - contains english terms auto-extracted from this projects report clients and their translations in one or more languages. - - `baseLang/` - contains english terms and their translations for all UI components and report client templates available through the geoprocessing library. Used to seed the `lang` folder and as a fallback. - - `config.json` - configuration for integration with POEditor localization service. - - `extraTerms.json` - contains extra translations. Some are auto-generated from configuration on project init, and you can add more such as plural form of terms. - - `i18nAsync.ts` - creates an i18next instance that lazy loads language translations on demand. - - `i18nSync.ts` - creates an i18nnext instance that synchronously imports all language translations ahead of time. This is not quite functional, more for research. - - `supported.ts` - defines all of the supported languages. - -A [ProjectClient](https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html) class is available in `project/projectClients.ts` that is used in project code for quick access to all project configuration including methods that ease working with them. This is the bridge that connects configuration with code and is the backbone of every geoprocessing function and report client. - -#### Other Files - -- `node_modules` - contains all of the npm installed third-party code dependencies defined in package.json -- `README.md` - default readme file that becomes the published front page of your repo on github.com. Edit this with information to help your users understand your project. It could include information or sources on metric calculations and more. -- `package-lock.json` - contains [cached metadata](https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json) on the 3rd party modules you have installed. Updates to this file are made automatically and you should commit the changes to your repository at the same time as changes to your package.json. -- `.nvmrc` - a lesser used config file that works with nvm to define the node version to use for this project. If you use nvm to manage your node version as suggested then you can run `nvm use` in your project and it will install and switch to this version of node. - -To learn more, check out the [Architecture](../architecture/Architecture.md) page - -### Generate Examples - -In order to create and test out the functions and report clients installed with `template-ocean-eez`, we need sample data that is relevant to our planning area. Scripts are available that make this easy. - -`genRandomSketch` - generates a random Sketch polygon within the extent of your planning area, which are most commonly used as input to geoprocessing functions. Run it without any arguments to generate a single Sketch polygon in the `examples/sketches` directory of your project. Run it with an argument of `10` and it will generate a SketchCollection with 10 random Sketch polygons. - -```bash -npx tsx scripts/genRandomSketch.ts -npx tsx scripts/genRandomSketch.ts 10 -``` - -`genRandomFeature` - generates random Feature Polygons within the extent of your planning area, which are most commonly used as input to preprocessing functions. Run it without any arguments to generate a single Sketch polygon in the `examples/features` directory of your project. - -```bash -npx tsx scripts/genRandomFeature.ts -``` - -#### Differences - -Look closely at the difference between the example features and the example sketches and sketch collections. Sketch and sketch collections are just GeoJSON Feature and FeatureCollection's with some extra attributes. That said, sketches and sketch collections are technically not compliant with the GeoJSON spec but they are often passable as such in most tools. - -#### Create Custom Sketches - -In addition to these scripts, you can create features and sketches using your GIS tool of choice, or draw your own polygons using [geojson.io](https://geojson.io). If you already have your SeaSketch project site set-up, you can draw a sketch and export it as geojson, uploading it to the `examples/sketches` directory. - -### Import Data -Navigate to `datasources.json`. This is where available data sources to use in reports are listed. When we import a new datasource, an entry will be automatically added to this file. +- Install [GDAL](https://gdal.org/) -#### Link Project Data + - First install [homebrew](https://brew.sh/) + - `brew install gdal` -In order to `import` and `publish` local project data to the cloud, it will need to be accessible on your local computer. There are multiple ways to do this, choose the appropriate one for you. +- Install [Java runtime](https://www.java.com/en/download/) for MacOS (required for testing with Amazon DynamoDb Local) -##### Option 1. Keep your data where it is - -Nothing to do, you will keep your data where it is on your local computer, and provide a direct path to this location on import. - -Pros: - -- Simple. Can start with this and progress to more elaborate strategies -- Keeps your data separate from your code -- Can import data from different parts of your filesystem - -Cons: +- Create a free Github account if you don't have one already -- Can make it hard to collaborate with others because they'll have to match your file structure, which may not be possible for some reason. +## Windows WSL Install -##### Option 2. Keep your data in your project repository +Requirement: Windows 11 or newer -Copy your datasources directly into the `data/src` directory. +Why use Windows Subsystem for Linux (WSL) to develop geoprocessing projects instead of using the [Docker Desktop](#virtual-install-with-docker-desktop)? Because WSL is faster than Docker Desktop alone. And because WSL provides a built-in filesystem bridge allowing you to access all your Windows drives in the Ubuntu container (via `/mnt` path). -Pros: +To get started in Windows: -- Data and relative import paths are consistent between collaborators -- Data can be kept under version control along with your code. Just check out and it's ready to go. +- Install [Powershell for Windows](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4) +- Install [WSL with Ubuntu distribution](https://learn.microsoft.com/en-us/windows/wsl/install) + - If you already have WSL Version 2 installed, make sure it's up to date by running `wsl --update` in PowerShell + - Install the default Ubuntu distribution as directed. +- Install [Docker Desktop with WSL2 support](https://docs.docker.com/desktop/windows/wsl/). + - Once installed, make sure Docker Desktop is running + - If you already had Docker Desktop installed, make sure it's updated to the latest version. +- Install [VS Code](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode) for Windows with WSL extension. -Cons: +### Geoprocessing Distribution -- You have an additional copy of your data to maintain. You may not have a way to tell if your data is out of data or not from the source of truth. -- The github repository can get big fast if you have or produce large datasets. -- If your data should not be shared publicly, then the code repo will need to be kept private, which works against the idea of transparent and open science. -- If any file is larger than 100MB it will require use of [Git LFS](https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github) - - Maximum of 5gb file size +A version of the [geoprocessing-workspace](https://github.com/seasketch/docker-gp-workspace) Docker image has been packaged by the SeaSketch team for running in WSL. It's pre-configured with all dependencies. You can download, import, and run it right alongside the default Ubuntu distribution. -MacOS this could be as easy as: +- Open Powershell in Windows +- Create a tmp directory ```bash -cp -r /my/project/data data/src +mkdir C:\tmp ``` -Windows, you can copy files from your Windows C drive into Ubuntu Linux using the following: - -```bash -cp -r /mnt/c/my_project_data data/src -``` +- Download the most recent `geoprocessing-workspace` zip file from the [SeaSketch Box folder](https://ucsb.box.com/s/k9477fqzzn0yel5kf5kj2y81tst09f4i) to this tmp directory and then unzip it. -Change the `.gitignore` file to allow you to commit your data/src and data/dist directory to Git. Remove the following lines: +- Create a second directory to import the Geoprocessing tar image too, then import it: ```bash -data/src/** -data/dist/** +mkdir C:\WslDistributions\Geoprocessing +wsl --import Geoprocessing C:\WslDistributions\Geoprocessing\ C:\tmp\geoprocessing-workspace_20230627\geoprocessing-workspace_20230627_65bd30ba63a3.tar ``` -It's up to you to not make sensitive data public. By choosing this option, you are possibly committing to it always being private and under managed access control. +- Be sure to update the filename in the import command above to match the version you downloaded. +- If import is started correctly, you will see the message `Import in progress, this may take a few minutes...`. Once done it should say `The operation completed successfully`. If it didn't import successfully, try restarting your system, WSL may not have been running properly. -##### Option 3. Link Data +- Setup Terminal Profile + - This will create a shortcut to start an instance of Geoprocessing in WSL. + - In PowerShell, click the down arrow in the tab bar, to the right of the (+) icon, then click Settings. -A symbolic link, is a file that points to another directory on your system. What you can do is create a symbolic link at `data/src` that points to the top-level directory where you data is maintained elsewhere on your system. +![Terminal Profile](assets/terminal-profile.jpg "Terminal Profile") -Pros: +- Find the Profiles section in left sidebar -> click `Add a new profile` +- The, under `Duplicate a profile`, click `Ubuntu`, then `Duplicate` button. -- Keeps your data separate from your code but accessed in a consistent way through the `data/src` path. -- Works with cloud-based drive share products like Box and Google Drive which can be your centralized source of truth. +![Profile Duplicate](assets/terminal-duplicate.jpg "Profile Duplicate") -Cons: +- Change the name of the duplicated Ubuntu profiles to `Geoprocessing` +- Change the profiles Terminal command from `C:\WINDOWS\system32\wsl.exe -d Ubuntu` to `C:\WINDOWS\system32\wsl.exe -u vscode -d Geoprocessing`. This will ensure that Geoprocessing starts with the correct user, instead of root. +- Save and exit your new profile +- The Terminal dropdown menu should now have a new `Geoprocessing` choice. Click this to start an instance of the Geoprocessing Distribution. It will open a shell, logged in with the vscode user. -- Symbolic links can be a little harder to understand and manage, but are well documented. -- People managing the source of truth that is linked to may update or remove the data, or change the file structure and not tell you. Running `reimport` scripts will fail and `datasources.json` paths will need to be updated to the correct place. - -Steps: - -- First, if you use a Cloud Drive product to share and sync data files, make sure your data is synced and you know the path to access it. See [access Cloud Drive folder](../Tipsandtricks.md#access-cloud-drive-folder) -- Assuming you are using MacOS and your username is `alex`, your path would be `/Users/alex/Library/CloudStorage/Box-Box` - -To create the symbolic link, open a terminal and make sure you are in the top-level directory of your geoprocessing project: +In the Geoprocessing shell, setup the workspaces directory where you will create projects: ```bash -ln -s /Users/alex/Library/CloudStorage/Box-Box data/src +sudo mkdir /workspaces +sudo chmod 777 /workspaces +cd /workspaces ``` -Confirm that the symbolic link is in place, points back to your data, and you can see your data files +Now open VSCode in your workspaces directory: ```bash -ls -al data -ls -al data/src +code . ``` -If you put your link in the wrong folder or pointed it to the wrong place, you can always just `rm data/src` to remove it, then start over. It will only remove the symbolic link and not the data it points to. - -##### In Summary - -None of these options solve the need for collaborators to manage data carefully, to communicate changes, and to ensure that updates are carried all the way through the data pipeline in a coordinated fashion. The data won't keep itself in sync. - -For all of these options, you can tell if your data is out of sync: - -- `data/src` is out of date if the `Date modified` timestamp for a file is older than the timestamp for the same file wherever you source and copy your data from. -- `data/dist` is out of date with `data/src` if the `Date modified` timestamp for a file is older than the timestamp for the same file in `data/src`. - -##### Example data for tutorial +Install recommended VSCode [extensions](https://code.visualstudio.com/docs/editor/extension-marketplace) when prompted. If not prompted, go to the `Extensions` panel on the left side and install the following extensions -This tutorial will use data for the Federated States of Micronesia downloaded from [Allen Coral Atlas](https://allencoralatlas.org/atlas/#8.67/-13.7942/-171.9575). (Note: you can download this data for free for any country. Turn on Maritime Boundaries, select your country’s EEZ, and download after creating an account.) Download `reefextent.gpkg` and `benthic.gpkg`, and make the data accessible to your project through one of the data linking methods described above. +- Remote Development +- Remote Explorer +- Docker +- Dev Containers -#### Importing Your Data - -The framework supports import of both vector and raster datasources and this tutorial assumes you have datasets that you want to import, accessible in the `data/src` directory, because you have [linked your project data](#link-project-data). If you are using the Allen Coral Atlas data described above, continue with [Import Vector Datasource](#import-vector-datasource). - -#### Import vector datasource - -Vector datasets can be any format supported by [GDAL](https://gdal.org/drivers/vector/index.html) "out of the box". Common formats include: - -- GeoJSON -- GeoPackage -- Shapefile -- File Geodatabase - -Importing a vector dataset into your project will: - -- Reproject the dataset to the WGS84 spherical coordinate system, aka EPSG:4326. -- Transform the dataset into one or more formats including the [flatgeobuf](https://flatgeobuf.org/) cloud-optimized format and GeoJSON -- Strip out any unnecessary feature properties (to reduce file size) -- Optionally, expand multi-part geometries into single part -- Calculates overall statistics including total area, and area by group property -- Output the result to the `data/dist` directory, ready for testing -- Add datasource to `project/datasource.json` - -Start the import process and it will ask you a series of questions, press Enter after each one, and look to see if a default answer is provided that is sufficient: +Check to make sure you have access to your Windows filesystem: ```bash -npm run import:data -? Type of data? Vector +ls /mnt/c ``` -Assuming you are using the [FSM data](#example-data-for-tutorial) from Allen Coral Atlas available now in your `data/src` directory. Let's import the `reefextent` vector data from the geopackage. +Follow the [final configuration steps](#final-configuration---all-install-options) below, then move on to creating a new project. -```bash -? Enter path to src file (with filename) data/src/reefextent.gpkg -``` +[Upgrade](../upgrade.md#upgrade-windows-geoprocessing) steps for the Geoprocessing Distribution are available. -Select the name of the vector layer you want to import. The example reef extent data named `Micronesian Exclusive Economic Zone` in `reefextent.gpkg` +### Default Ubuntu Distribution -```bash -? Select layer to import Micronesian Exclusive Economic Zone -``` +Only follow these install steps if you intend to setup and use the default Ubuntu Distribution in WSL _instead of_ the pre-configured Geoprocessing Distribution (above). -Choose a datasource name that is different than any other datasourceId in `projects/datasources.json`. The command won't let you press enter if it's a duplicate. +Supported Ubuntu version: -```bash -? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename reefextent -``` +- Open Windows start menu -> start typing `Ubuntu on Windows` -> Select `Ubuntu on Windows` + - This will start Ubuntu virtual machine and open a bash shell in your home directory. -If your dataset contains one or more properties that classify the vector features into one or more categories, and you want to report on those categories in your reports, then you can enter those properties now as a comma-separated list. For example a coral reef dataset containing a `type` property that identifies the type of coral present in each polygon. In the case of our EEZ dataset, there are no properties like this so press Enter to continue without. +In Ubuntu shell: -```bash -? Select feature properties that you want to group metrics by (Press to select, to toggle all, to invert selection) -``` +- Install [Java runtime](https://stackoverflow.com/questions/63866813/what-is-the-proper-way-of-using-jdk-on-wsl2-on-windows-10) in Ubuntu (required by AWS CDK library) +- Install [Git in Ubuntu and Windows](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git) +- Install [VS Code](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode) in Windows and setup with WSL2. + - Install recommended [extensions](https://code.visualstudio.com/docs/editor/extension-marketplace) when prompted. If not prompted, go to the `Extensions` panel on the left side and install the extensions named in [this file](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json) +- Install [Node JS](https://nodejs.org/en/download/) >= in Ubuntu + - [nvm](https://github.com/nvm-sh/nvm) is great for this + - First, install nvm. May ask you to first install XCode developer tools which is available through the App Store or follow the instructions provided. + - Then nvm install v. + - Then open your Terminal app of choice and run `node -v` to check your node version +- Install latest [NPM](https://www.npmjs.com/) package manager after installing node. + - `npm --version` to check + - `npm install -g latest` -By default, all extraneous properties will be removed from your vector dataset on import in order to make it as small as possible. Any additional properties that you want to keep in should be specified in this next question. If there are none, just press Enter. +## Ubuntu Direct Install -```bash -? Select additional feature properties to keep in final datasource (Press to select, to toggle all, to invert selection) -``` +Requirement: Ubuntu or newer -Mulitpolygons can be split into polygons for analysis, which can help report performance. +Setup is for a physical machine running the Ubuntu operating system. -```bash -? Should multi-part geometries be split into multiple single-part geometries? (can increase sketch overlap calc performance by reducing number of polygons -to fetch) Yes -``` +From a Ubuntu terminal with root access, simply follow the steps above for [default ubuntu installation](#default-ubuntu-distribution) -Typically you only need to published Flatgeobuf data, which is cloud-optimized so that geoprocessing functions can fetch features for just the window of data they need (such as the bounding box of a sketch). Flatgeobuf is automatically created. GeoJSON is also available if you want to be able to import data directly in your geoprocessing function typescript files, or inspect the data using a human readable format. Just press enter if you are happy with the default. +## Final Configuration - all install options -```bash -? Select additional formats to publish (Press to select, to toggle all, to invert selection) - ◯ json - GeoJSON -``` +The last step, regardless of install option, is to set the [username](https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=mac) and email address git will associate with your commits. -If you want to use your data in analytics, respond `Yes` to allow precalculation. +You can set these per repository, or globally for all repositories on your system (and override as needed). Here's the commands to set globally for your environment. ```bash -? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource) Yes -``` - -At this point the import will proceed and various log output will be generated. Once complete you will find: - -- The output file `data/dist/reefextent.fgb` and possibly `data/dist/reefextent.json` if you chose to generate it. -- An updated `project/datasources.json` file with a new entry at the bottom with a datasourceId of `reefextent` - -Vist `datasources.json` and check out your new datasource entry. Using the example data, the datasource entry should looks as follows: - -```json -{ - "src": "data/src/reefextent.gpkg", - "layerName": "Micronesian Exclusive Economic Zone", - "geo_type": "vector", - "datasourceId": "reefextent", - "formats": ["fgb"], - "classKeys": [], - "created": "2024-02-29T22:54:16.140Z", - "lastUpdated": "2024-02-29T22:54:16.140Z", - "propertiesToKeep": [], - "explodeMulti": true, - "precalc": true -} +git config --global user.name "Your Name" +git config --global user.email "yourusername@youremail.com" ``` -If the import fails, try again double checking everything. It is most likely one of the following: - -- You aren't running Docker Desktop (required for running GDAL commands) -- You provided a source file path that doesn't point to a valid dataset -- You aren't using a file format supported by GDAL -- The layer name or property names you entered are invalid - -##### Vector data with key parameter - -What if you have a vector file with multiple classes you want to group metrics by? The other [downloaded example data](#example-data-for-tutorial) `benthic.gpkg` separates different benthic habitats (Sand, Seagrass, Coral) by a `class` parameter. The import for this datasource looks as follows: +Now verify it was set: ```bash -npm run import:data -> Vector -> data/src/benthic.gpkg -> Micronesian Exclusive Economic Zone -> benthic -> class -> {none} -> Yes -> {none} -> Yes -``` +# If you set global - all repos +cat ~/.gitconfig -The resulting `datasource.json` entry will look as follows: - -```json -{ - "src": "data/src/benthic.gpkg", - "layerName": "Micronesian Exclusive Economic Zone", - "geo_type": "vector", - "datasourceId": "benthic", - "formats": ["fgb"], - "classKeys": ["class"], - "created": "2024-02-29T21:47:44.858Z", - "lastUpdated": "2024-02-29T21:47:44.858Z", - "propertiesToKeep": ["class"], - "explodeMulti": true, - "precalc": true -} +# If you set local - current repo +cat .git/config ``` -#### Import raster datasource - -Raster datasets can be any format supported by [GDAL](https://gdal.org/drivers/raster/index.html) "out of the box". Common formats include: - -- GeoTIFF - -Importing a raster dataset into your project will: - -- Reproject the data to the WGS84 spherical coordinate system, aka EPSG:4326. -- Extract a single band of data -- Transform the raster into a [cloud-optimized GeoTIFF](https://www.cogeo.org/) -- Calculates overall statistics including total count and if categorical raster, a count per category -- Output the result to the `data/dist` directory, ready for testing -- Add datasource to `project/datasource.json` - -Start the import process and it will ask you a series of questions, press Enter after each one, and look to see if a default answer is provided that is sufficient: - -```bash -npm run import:data -? Type of data? Raster -``` - -Assuming you are using the [FSM example data](#link-project-data) package and it is accessible via the `data/src` directory (using [data link option 2 or 3](#link-project-data)). Let's import the `yesson_octocorals` raster which is a `binary` raster containing cells with value 1 where octocorals are predicted to be present, and value 0 otherwise. - -```bash -? Enter path to src file (with filename) data/src/current-raster/offshore/inputs/features/yesson_octocorals.tif -``` - -Choose a datasource name that is different than any other datasourceId in `projects/datasources.json`. The command won't let you press enter if it's a duplicate. - -```bash -? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename octocorals -``` - -If the raster has more than one band of data, select the band you want to import. - -```bash -? Enter band number to import 1 -``` - -Choose what the raster data represents -`Quantitative` - measures one thing. This could be a binary 0 or 1 value thatidentifies the presence or absence of something, or a value that varies over the geographic surface such as temperature. -`Categorical` - measures presence/absence of multiple groups. The value of each cell in the band is a numeric group identifier, and thus each cell can represent one and only one group at a time. - -```bash -❯ Quantitative - values represent amounts, measurement of single thing - Categorical - values represent groups -``` - -At this point the import will proceed and various log output will be generated. - -Do not be concerned about an error that an ".ovr" file could not be found. This is expected. Once complete you will find: - -- The output file `data/dist/octocorals.tif` -- An updated `project/datasources.json` file with a new entry at the bottom with a datasourceId of `octocorals`. - -If the import fails, try again double checking everything. It is most likely one of the following: - -- You aren't running Docker Desktop (required for running GDAL commands) -- You provided a source file path that doesn't point to a valid dataset -- You aren't using a file format supported by GDAL - -#### Global datasource - -You are also able to use one of the global data sources already provided in `datasources.json`. They are already imported. - -### Precalc Data - -Once you have geographies and datasources configured, you can precalculate metrics for them. - -```bash -npm run precalc:data -``` - -To avoid precalculating data you don't require, when asked if you wish to precalcate specific metrics, select `Yes, by datasource` and then select `global-eez-mr-v12` (used in the provided Size report) and your imported datasource (in this tutorial: `reefextent`). - -Precalc will start a web server on localhost port 8001 that serves up data from `data/dist` access by this command. - -You need to have at least one geography in geographies.json and one datasource in datasources.json with the `precalc` property set to true. The command will measure (total area, feature count, value sum) the portion of a datasources features that fall within the geography (intersection). - -These overall metric values are used almost exclusively for calculating % sketch overlap, they provide the denominator value. For example, if you have a geography representing the EEZ of a country, and you have a sketch polygon, and you have a datasource representing presence of seagrass. And you want to know the percentage of seagrass that is within the sketch, relative to how much seagrass is in the whole EEZ boundary. - -`seagrass sketch % = seagrass area within sketch / seagrass area within EEZ` - -We can and often need to precalculate that denominator for all possible geographies. That is what the `precalc:data` command does, it precalculates a set of metrics for all datasources against all geographies, where the `precalc` property is set to true in both the datasource and the geography. - -Precalc metrics are then imported into a report client, and combined with the sketch overlap metrics returned from the geoprocessing function, to produce a percentage. - -Tips for precalculation: - -- You have to re-run `precalc:data` every time you change a geography or datasource. -- Set `precalc:false` for datasources that are not currently used, or are only used to define a geography (not displayed in reports). This is why the datasource for the default geography for a project is always set by default to `precalc: false`. -- If you are using one of the [global-datasources](https://github.com/seasketch/global-datasources) in your project, and you want to use it in reporting % sketch overlap, so you've set `precalc:true`, strongly consider defining a `bboxFilter`. This will ensure that precalc doesn't have to fetch the entire datasource when precalculating a metric, which can be over 1 Gigabyte in size. Also consider setting a `propertyFilter` to narrow down to just the features you need. This filter is applied on the client-side so it won't reduce the number of features you are sending over the wire. - -#### Precalc Data Cleanup - -If you remove a geography/datasource, then in order to remove their precalculated metrics from `precalc.json`, you will need to run the cleanup command. - -```bash -npm run precalc:data:cleanup -``` - -### Create Metric Group - -The metric group is your report configuration. There is one metric group per individual report. It links everything together and defines what data you want to show in the individual report. The metric group is used in both the function that calculates statistics and the component which displays the results. Often, projects will include ~8 reports, with each report focusing on a goal or type of data. - -Navigate to `metrics.json`, where metric groups are stored. There is already a report here – `boundaryAreaOverlap`. This is the metric group used to calculate how much of the EEZ is within our sketch, using the `global-eez-mr-v12` datasource we [precalculated](#precalc-data). - -We’re going to create a report that uses the vector layer just imported. We want to see how much our sketch overlaps with the vector layer. Pick a metricId to be the title of your report in camelCase (`coralReef`), the type of report (`areaOverlap`), and the classes you want to show in the report. Your classes can look a myriad of ways, depending on whether all the data is from a single file, or multiple files. All data within a metric group must be in the same format (raster or vector). - -Our example `reefextent` data is a simple vector file. We can set classId to be anything. Our metric group looked as follows: - -```json -{ - "metricId": "coralReef", - "type": "areaOverlap", - "classes": [ - { - "classId": "reefextent", - "display": "Coral Reef", - "datasourceId": "reefextent" - } - ] -} -``` - -#### Metric group for vector data source with multiple classes - -Our example data `benthic` is a single file with different habitats defined by a `class` parameter. While there were many types of habitats, we may want to only focus on Sand, Rubble, and Rock. In this case, `classKey` must be `class` and `classIds` have to match the features in the vector file. My metric group would look like this: - -```json -{ - "metricId": "benthicHabitat", - "type": "areaOverlap", - "classes": [ - { - "classId": "Sand", - "classKey": "class", - "display": "Sand", - "datasourceId": "benthic" - }, - { - "classId": "Rock", - "classKey": "class", - "display": "Rock", - "datasourceId": "benthic" - }, - { - "classId": "Rubble", - "classKey": "class", - "display": "Rubble", - "datasourceId": "benthic" - } - ] -} -``` - -#### Metric group with two data sources - -You can have classes from multiple data sources in one metric group. If we wanted both the reef extent data and benthic habitat data in one report, the metric group can look as follows: - -```json -{ - "metricId": "benthicHabitat", - "type": "areaOverlap", - "classes": [ - { - "classId": "reefextent", - "display": "Coral Reef", - "datasourceId": "reefextent" - }, - { - "classId": "Sand", - "classKey": "class", - "display": "Sand", - "datasourceId": "benthic" - }, - { - "classId": "Rock", - "classKey": "class", - "display": "Rock", - "datasourceId": "benthic" - }, - { - "classId": "Rubble", - "classKey": "class", - "display": "Rubble", - "datasourceId": "benthic" - } - ] -} -``` - -#### Metric group with quantitative raster data sources - -An example of a metric group `fishingEffort` which displays multiple quantitative raster data files. This report has been made using [Global Fishing Watch Apparent Fishing Effort data](https://globalfishingwatch.org/dataset-and-code-fishing-effort/), which reports fishing effort in hours. To calculate for the sum of fishing effort within our plan, we would use `type = valueOverlap`. - -```json -{ - "metricId": "fishingEffort", - "type": "valueOverlap", - "classes": [ - { - "datasourceId": "all-fishing", - "classId": "all-fishing", - "display": "All Fishing 2019-2022" - }, - { - "datasourceId": "drifting-longlines", - "classId": "drifting-longlines", - "display": "Drifting Longline" - }, - { - "datasourceId": "pole-and-line", - "classId": "pole-and-line", - "display": "Pole and Line" - }, - { - "datasourceId": "set-longlines", - "classId": "set-longlines", - "display": "Set Longline" - }, - { - "datasourceId": "fixed-gear", - "classId": "fixed-gear", - "display": "Fixed Gear" - } - ] -} -``` - -#### Metric group with categorical raster data sources - -An example of a metric group `fishRichness` which displays a categorical raster `fishRichness.tif`. The raster data displays the number of key fish species present in each raster cell -- from 1 to 5 species. `classId` should be set to the corresponding numerical value within the raster. - -```json -{ - "metricId": "fishRichness", - "type": "countOverlap", - "classes": [ - { - "datasourceId": "fishRichness", - "classId": "1", - "display": "1 species" - }, - { - "datasourceId": "fishRichness", - "classId": "2", - "display": "2 species" - }, - { - "datasourceId": "fishRichness", - "classId": "3", - "display": "3 species" - }, - { - "datasourceId": "fishRichness", - "classId": "4", - "display": "4 species" - }, - { - "datasourceId": "fixed-gear", - "classId": "5", - "display": "5 species" - } - ] -} -``` - -### Create Report - -```bash -npm run create:report -``` - -Select the type of report you need for your data (`vector` or `raster`), and the name of your new metric group. For this tutorial, select `Vector overlap report` and [`benthicHabitat`](#metric-group-with-two-data-sources). - -This command does a lot for you: - -- Adds a function to `src/functions` -- Adds a test file to `src/functions` -- Adds a component (the front-end of any report) to `src/components` -- Adds a story to `src/components` -- Adds your new function to a list in `geoprocessing.json` that is used by AWS lambda - -Open these outputs and take a look at them. Edits to the statistic you want calculated (i.e.calculating average instead of sum, etc) should happen in your function (in this tutorial: `src/functions/benthicHabitat.ts`). Edits to the way the analytics are displayed (i.e. changing labels, converting units, adding text context, etc) should happen in your component (in this tutorial: `src/components/BenthicHabitat.tsx`). - -Add your new component to `src/components/ViabilityPage.tsx` or `src/components/RepresentationPage.tsx`. For example, `Viability.tsx` can now look like this, so our new report appears beneath the Size report and the Sketch Attributes report: - -```typescript -import React from "react"; -import { SizeCard } from "./SizeCard"; -import { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui"; -import { BenthicHabitat } from "./BenthicHabitat"; - -const ReportPage = () => { - return ( - <> - - - - - ); -}; - -export default ReportPage; -``` - -### Test your project - -Now that you have sample sketches and features, you can run the test suite. - -```bash -npm run test -``` - -This will start a web server on port 8080 that serves up the `data/dist` folder. Smoke tests will run geoprocessing functions against all of the sketches and features in the `examples` folder. `projectClient.getDatasourceUrl` will automatically read data from localhost:8080 instead of the production S3 bucket url using functions like `fgbFetchAll()`, `geoblaze.parse()`. - -#### Smoke Tests - -Smoke tests, in the context of a geoprocessing project, verify that your preprocessing and geoprocessing function are working, and produce an output, for a given input. It doesn't ensure that the output is correct, just that something is produced. The input in this case is a suite of features and sketches that you manage. - -Preprocessing function smoke tests (in this case `src/functions/clipToOceanEezSmoke.test.ts`) will run against every feature in `examples/features` and output the results to `examples/output`. - -All geoprocessing function smoke tests (in this case `src/functions/boundaryAreaOverlapSmoke.test.ts`) will run against every feature in `examples/sketches` and output the results to `examples/output`. - -Smoke tests are your chance to convince yourself that functions are outputting the right results. This output is committed to the code repository as a source of truth, and if the results change in the future (due to a code change or an input data change or a dependency upgrade) then you will be able to clearly see the difference and convince yourself again that they are correct. All changes to smoke test output are for a reason and should not be skipped over. - -#### Unit Tests - -Units tests go further than smoke tests, and verify that output or behavior is correct for a given input. - -You should have unit tests at least for utility or helper methods that you write of any complexity, whether for geoprocessing functions (backend) or report clients (frontend). - -- [Example](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/helpers/groupBy.test.ts) - -You can also write unit tests for your UI components using [testing-library](https://testing-library.com/docs/react-testing-library/intro/). - -- [Example](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/components/SketchAttributesCard.test.tsx) - -Each project you create includes a debug launcher which is useful for debugging your function. With the geoprocessing repo checked out and open in VSCode, just add a breakpoint or a `debugger` call in one of your tests or in one of your functions, click the `Debug` menu in the left toolbar (picture of a bug) and select the appropriate package. The debugger should break at the appropriate place. - -#### Debugging Tests - -See the [Testing](../Testing.md) page for additional options for testing your project. - -#### Default geography - -When smoke tests run, they should run for the default geography, without needing to be told so, but you can still override it. That's why this is the standard boilerplate for a geoprocessing function. - -```typescript - export async function boundaryAreaOverlap( - sketch: Sketch | SketchCollection, - extraParams: DefaultExtraParams = {} -): Promise { - const geographyId = getFirstFromParam("geographyIds", extraParams); - const curGeography = project.getGeographyById(geographyId, { - fallbackGroup: "default-boundary", - }); -``` - -If you call boundaryAreaOverlap with only a sketch as input (no extraParams), then `getFirstFromParam()` will return `undefined`, so -`project.getGeographyById` will receive `undefined` and fallback to the geography assigned to the `default-boundary` group, which every project should have at least one, or throw an error. - -If you want to run smoke tests against a different geography, just to see what it produces, then you will have to do it explicitly: - -```typescript -const metrics = await boundaryAreaOverlap(sketch, { - geographyIds: ["my-other-geography"], -}); -``` - -if you use a `GeographySwitcher` UI component in your story, then it will allow you to switch geographies, but the story will still only receive the metrics for the smoke test you ran, which may only have been run for the default geography. In this situation, the report will load the precalc metrics for the geography you've chosen in the denominator for percentages, but the numerator metrics will always be for the default geography, or whatever geography you passed to your smoke test. - -If you've used template-ocean-eez and selected an EEZ, the default geography is your selected EEZ, and you're ready to run your storybook and check out your reports! - -### Storybook - -You can view the results of your smoke tests using Storybook. It's already configured to load all of the smoke test output for each story. - -```bash -npm run storybook -``` - -Check out [advanced storybook usage](#advanced-storybook-usage) when necessary. - -From here on, you can continue to extend your reports -- adding more, [adding language translation](../gip/GIP-1-i18n.md#language-translation-tutorial), adding additional data and new analytics, etc. After this point, we need to integrate with AWS so the reports can be hosted and connected to your seasketch.com project. - -### First Project Build - -A `build` of your application packages it for deployment, so you don't have to build it until you are ready. Specifically it: - -- Checks all the Typescript code to make sure it's valid and types are used properly. -- Transpiles all Typescript to Javascript -- Bundles UI report clients into the `.build-web` directory -- Bundles geoprocessing and preprocessing functions into the `.build` directory. - -To build your application run the following: - -```bash -npm run build -``` - -#### Debugging build failure - -If the build step fails, you will need to look at the error message and figure out what you need to do. Did it fail in building the functions or the clients? 99% of the time you should be able to catch these errors sooner. If VSCode finds invalid Typescript code, it will warn you with files marked in `red` in the Explorer panel or with red markes and squiggle text in any of the files. - -If you're still not sure try some of the following: - -- Run your smoke tests, see if they pass -- When was the last time your build did succeed? You can be sure the error is caused by a change you made since then either in your project code, by upgrading your geoprocessing library version and not migratin fully, or by changing something on your system. -- You can stash your current changes or commit them to a branch so they are not lost. Then sequentially check out previous commits of the code until you find one that builds properly. Now you know that the next commit cause the build error. - -### Deploy your project - -A `deploy` of your application uses [`aws-cdk`](https://aws.amazon.com/cdk/) to inspect your local build and automatically provision all of the necessary AWS resources as a single [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) stack. - -This includes: - -- S3 storage buckets for publishing datasources and containing bundled Report UI components -- Lambda functions that run preprocessing and geoprocessing functions on-demand -- A Gateway with REST API and Web Socket API for clients like SeaSketch to discover, access, and run all project resources over the Internet. -- A DynamoDB database for caching function results - -For every deploy after the first, it is smart enough to compute the changeset between your local build and the published stack and modify the stack automatically. - -#### Setup AWS - -You are not required to complete this step until you want to deploy your project and integrate it with SeaSketch. Until then, you can do everything except `publish` data or `deploy` your project. - -You will need to create an AWS account with an admin user, allowing the framework to deploy your project using CloudFormation. A payment method such as a credit card will be required. - -Expected cost: [free](https://aws.amazon.com/free) to a few dollars per month. You will be able to track this. - -- Create an Amazon [AWS account] such that you can login and access the main AWS Console page (https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/). -- Create an AWS IAM [admin account](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html). This is what you will use to manage projects. - -#### AWSCLI - -If you are using a Docker devcontaine to develop reports you should already have access to the `aws` command. But if you are running directly on your host operating system you will need to install [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) and [configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) it with your IAM account credentials. - -##### Extra steps for Windows - -Windows you have the option of installing [awscli for Windows](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) and then exposing your credentials in your Ubuntu container. This allows you to manage one set of credentials. - -Assuming your username is `alex`, once you've installed awscli in Windows, confirm you now have the following files under Windows. - -```bash -C:\Users\alex\.aws\credentials -C:\Users\alex\.aws\config -``` - -Now, open a Ubuntu shell and edit your bash environment variables to [point to those files](https://stackoverflow.com/questions/52238512/how-to-access-aws-config-file-from-wsl-windows-subsystem-for-linux/53083079#53083079). - -Add the following to your startup `.bashrc` file. - -```bash -export AWS_SHARED_CREDENTIALS_FILE=/mnt/c/Users/alex/.aws/credentials -export AWS_CONFIG_FILE=/mnt/c/Users/alex/.aws/config -``` - -[How do I do that?](../Tipsandtricks.md#editing-your-startup-bash-script-in-ubuntu) - -Now, verify the environment variables are set - -```bash -source ~/.bashrc -echo $AWS_SHARED_CREDENTIALS_FILE -echo $AWS_CONFIG_FILE -``` - -#### Confirm awscli is working - -To check if awscli is configured run the following: - -```bash -aws configure list -``` - -If no values are listed, then the AWS CLI is not configured properly. Go back and check everything over for this step. - -#### Do the deploy - -To deploy your project run the following: - -```bash -npm run deploy -``` - -When the command completes, the stack should now be deployed. It should print out a list of URL's for accessing stack resources. You do not need to write these down. You can run the `npm run url` command at any time and it will output the RestApiUrl, which is the main URL you care about for integration with SeaSketch. After deploy a `cdk-outputs.json` file will also have been generated in the top-level directory of your project with the full list of URL's. This file is not checked into the code repository. - -Example: - -```json -{ - "gp-fsm-reports-test": { - "clientDistributionUrl": "abcdefg.cloudfront.net", - "clientBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-client", - "datasetBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-datasets", - "GpRestApiEndpointBF901973": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/", - "restApiUrl": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/", - "socketApiUrl": "wss://lmnop.execute-api.us-west-2.amazonaws.com" - } -} -``` - -##### Debugging deploy - -- If your AWS credentials are not setup and linked properly, you will get an error here. Go back and [fix it](#setup-aws). -- The very first time you deploy any project to a given AWS data center (e.g. us-west-1), it may ask you to bootstrap cdk first. Simply run the following: - -```bash -npm run bootstrap -``` - -Then `deploy` again. - -- If your deploy fails and it's not the first time you deployed, it may tell you it has performed a `Rollback` on the deployed stack to its previous state. This may or may not be successful. You'll want to verify that your project is still working properly within SeaSketch. If it's not you can always destroy your stack by running: - -```bash -npm run destroy -``` - -Once complete, you will need to `build` and `deploy` again. - -### Publish your datasources - -Once you have deployed your project to AWS, it will have an S3 bucket for publishing `datasources` to. - -Your datasources will need to have already been imported using `import:data` and exist in data/dist for this to work. - -```bash -npm run publish:data -``` - -It will ask you if you want to publish all datasources, or choose from a list. - -- Note if you don't publish your datasources, then your smoke tests may work properly, but your geoprocessing functions will throw file not found errors in production. - -### Creating SeaSketch Project and Exporting Test Sketches - -Using `genRandomSketch` and `genRandomFeature` is a quick way to get started with sample sketches that let's you run your smoke tests for your geoprocessing function and view them in a storybook. Once you do that, you can move on to creating example sketches for very specific locations within your planning area with exactly the sketch properties you want to test. This is most easily done using SeaSketch directly. - -First, follow the [instructions](https://docs.seasketch.org/seasketch-documentation/administrators-guide/getting-started) to create a new SeaSketch project. This includes defining the planning bounds and [creating a Sketch class](https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes). You will want to create a `Polygon` sketch class with a name that makes sense for you project (e.g. MPA for Marine Protected Area) and then also a `Collection` sketch class to group instances of your polygon sketch class into. Note that sketch classes are where you will integrate your geoprocessing services to view reports, but you will not do it at this time. - -One you've created your sketch classes, follow the instructions for [sketching tools](https://docs.seasketch.org/seasketch-documentation/users-guide/sketching-tools) to draw one or more of your polygon sketches. You can also create one or more collections and group your sketches into them. - -Finally, [export](https://docs.seasketch.org/seasketch-documentation/users-guide/sketching-tools#downloading-sketches) your sketches and sketch collections as GeoJSON, and move them into your geoprocessing projects `examples/sketches` folder. - -```bash - /examples/ - sketches/ # <-- examples used by geoprocessing functions - features/ # <-- examples used by preprocessing functions -``` - -Once you add your example sketches and collections to this folder, you can `npm run test` and any smoke tests will automatically include these new examples and generate output for them for each geoprocessing function. You can then look at the smoke test output and ensure that it is as expected. - -It's now possible for you to quickly create examples that cover common as well as specific use cases. For example are you sure your geoprocessing function works with both Sketches and Sketch Collections? Then include examples of both types. Maybe even include Sketches that overlap outside the planning area to make sure error conditions are handled appropriately. Or create a giant sketch that covers the entire planning area to make sure your reports are picking up all of the data and % overlap metrics are 100% or very close. Does your geoprocessing project handle overlapping sketches within a collection properly? Create all kinds of overlap scenarios. - -### Integrating Your Project with SeaSketch - -Once you've deployed your project, you will find a file called `cdk.outputs` which contains the URL to the service manifest for your project. - -```json -"restApiUrl": "https://xxxyyyyzzz.execute-api.us-west-2.amazonaws.com/prod/", -``` - -Now follow the [SeaSketch instructions](https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes) to assign services to each of your sketch classes. - -If your sketch class is a Polygon or other feature type, you should assign it both a preprocessing function (for clipping) and a report client. If you installed the `template-ocean-eez` starter template then your preprocessor is called `clipToOceanEez` and report client is named `MpaTabReport`. - -If your sketch class is a collection then you only need to assign it a report client. Since we build report clients that work on both individual sketches and sketch collections, you can assign the same report client to your collection as you assigned to your individual sketch class(es). - -This should give you the sense that you can create different report clients for different sketch classes within the same project. Or even make reports for sketch collections completely different from reports for individual sketches. - -Create a sketch and run your reports to make sure it all works! - -### Upgrading your project - -First, make sure you don't have any unsaved work. Then run the upgrade script. - -```bash -npm run upgrade -``` - -- Review the code changes made to your project. If you have made customizations to any scripts or config files, you may need to recover those changes now. -- Check the [release notes](https://github.com/seasketch/geoprocessing/releases) for any additional required steps. - -Run the following and verify your reports are working as expected: - -```bash -npm install -npm test -npm storybook -npm run build -``` - -When ready re-deploy your project as normal. - -```bash -npm run deploy -``` - -If you are seeing errors or unexpected behavior, try any one of the following steps: - -- Rebuild dependencies: `rm -rf node_modules && rm package-lock.json && npm install` -- Reimport all datasources: `npm run reimport:data` -- Republish all datasources: `npm run publish:data` -- Clear AWS cache: `npm run clear-all-results` - -## Additional Tutorials - -### Creating a geoprocessing function - -The `create:report` function builds both a geoprocessing function and component based on a metric group. If you instead wish to strictly create a function, you can use: - -```bash -npm run create:function -``` - -Enter some information about this function: - -``` -? Function type Geoprocessing - For sketch reports -? Title for this function, in camelCase simpleFunction -? Describe what this function does Calculates area overlap with coral cover dataset -? Choose an execution mode Async - Better for long-running processes -``` - -The command should then return the following output: - -``` -✔ created simpleFunction function in src/functions/ - -Geoprocessing function initialized - -Next Steps: - * Update your function definition in src/functions/simpleFunction.ts - * Smoke test in simpleFunctionSmoke.test.ts will be run the next time you execut 'npm test' - * Populate examples/sketches folder with sketches for smoke test to run against -``` - -The function will have been added to `project/geoprocessing.json` in the `geoprocessingFunctions` section. - -The geoprocessing function file starts off with boilerplate code every geoprocessing function should have. It then includes an example of loading both vector data and raster data from [global datasources](https://github.com/seasketch/global-datasources) and calculating some simple stats, and returning a `Result` payload. To explain in more detail: - -First a Typescript interface is defined that defines the shape of the data that the geoprocessing function will return. This defines an `object` with properties `area` and `nearbyEcoregions`, `minTemp`, and `maxTemp`. - -```typescript -export interface SimpleResults { - /** area of sketch within geography in square meters */ - area: number; - /** list of ecoregions within bounding box of sketch */ - nearbyEcoregions: string[]; - /** minimum surface temperature within sketch */ - minTemp: number; - /** maximum surface temperature within sketch */ - maxTemp: number; -} -``` - -Then comes the actual geoprocessing function, which accepts a `sketch` as its first parameters. It can be either a single Sketch Polygon/Multipolygon, or a SketchCollection containing Polygons/MultiPolygons. The second parameter is `extraParams`, which is an object that may contain [one or more identifiers] passed by the report client when invoking the geoprocessing function (https://seasketch.github.io/geoprocessing/api/interfaces/geoprocessing.DefaultExtraParams.html) - -```typescript -async function yourFunction( - sketch: - | Sketch - | SketchCollection, - extraParams: DefaultExtraParams = {} -): Promise { -``` - -First, the function will get any `geographyIds` that may have been passed by the report client via `extraParams` to specify which geography to run the function for. It will then use `getGeographyById` to get the geography object with that id from `geographies.json`. If the `geographyId` is undefined, then it will return the default geography. - -```typescript -// Use caller-provided geographyId if provided -const geographyId = getFirstFromParam("geographyIds", extraParams); -// Get geography features, falling back to geography assigned to default-boundary group -const curGeography = project.getGeographyById(geographyId, { - fallbackGroup: "default-boundary", -}); -``` - -Next, the function will handle the situation where the `sketch` crosses the 180 degree antimeridian (essentially the dateline) by calling `splitSketchAntimeridian`. If the sketch crosses the antimeridian, it will clean (adjust) the coordinates to all be within -180 to 180 degrees. Then it will split the sketch into two pieces, one on the left side of the antimeridan, one on the right side. This splitting is required by many spatial libraries to perform operations on the sketch. Vector datasources are also split on import for this reason. - -```typescript -// Support sketches crossing antimeridian -const splitSketch = splitSketchAntimeridian(sketch); -``` - -After that, the sketch is clipped to the current geography, so that only the portion of the sketch that is within the geography remains. - -```typescript -// Clip to portion of sketch within current geography -const clippedSketch = await clipToGeography(splitSketch, curGeography); -``` - -Now we get to the core of what this particularly geoprocessing function is designed to do. Think of this as a starting point that you can adapt to meet your needs. - -First, we'll fetch the [Marine Ecoregions of the World](https://github.com/seasketch/global-datasources?tab=readme-ov-file#marine-ecoregions-of-the-world) polygon features that overlap with the bounding box of the `clippedSketch`. Then reduce this down to an array of ecoregion names. You could take this further to reduce down to only the ecoregions that intersect with the sketch. - -```typescript -// Fetch eez features overlapping sketch bbox -const ds = project.getExternalVectorDatasourceById("meow-ecos"); -const url = project.getDatasourceUrl(ds); -const eezFeatures = await getFeatures(ds, url, { - bbox: clippedSketch.bbox || bbox(clippedSketch), -}); - -// Reduce to list of ecoregion names -const regionNames = eezFeatures.reduce>( - (regionsSoFar, curFeat) => { - if (curFeat.properties && ds.idProperty) { - const regionName = curFeat.properties[ds.idProperty]; - return { ...regionsSoFar, [regionName]: regionName }; - } else { - return { ...regionsSoFar, unknown: "unknown" }; - } - }, - {}, -); -``` - -Next, we'll fetch all the [minimum](https://github.com/seasketch/global-datasources?tab=readme-ov-file#biooracle-present-day-surface-temperature-maximum) and [maximum](https://github.com/seasketch/global-datasources?tab=readme-ov-file#biooracle-present-day-surface-temperature-maximum) surface temperature measurements within the `clippedSketch` and then calculate the single minimum and maximum values. - -```typescript -const minDs = project.getRasterDatasourceById("bo-present-surface-temp-min"); -const minUrl = project.getDatasourceUrl(minDs); -const minRaster = await loadCog(minUrl); -const minResult = await geoblaze.min(minRaster, clippedSketch); -const minTemp = minResult[0]; // extract value from band 1 - -const maxDs = project.getRasterDatasourceById("bo-present-surface-temp-max"); -const maxUrl = project.getDatasourceUrl(maxDs); -const maxRaster = await loadCog(maxUrl); -const maxResult = await geoblaze.max(maxRaster, clippedSketch); -const maxTemp = maxResult[0]; // extract value from band 1 -``` - -The final step of the function is always to return the result payload back to the report client - -```typescript -return { - area: turfArea(clippedSketch), - nearbyEcoregions: Object.keys(regionNames), - minTemp, - maxTemp, -}; -``` - -At the bottom of the file, the geoprocessing function is wrapped into a `GeoprocessingHandler` which is what gets exported by the file. This handler provides what the geoprocessing function needs to run in an AWS Lambda environemnt, specifically to be called via REST API by a report client, receive input parameters and send back function results. It also lets you fine tune the hardware characteristics of the Lambda to meet performance requirements at the lowest cost. Specifically, you can increase the memory available to the Lambda up to `10240` KB, which will also increase the cpu size and number. You can also increase the timeout up `900` seconds or 15 minutes for long running analysis, though `180` - `300` seconds is probably the longest amount a user is willing to wait. You will want to use an `async` function over `sync` if the function runs for more than say 5 seconds with a typical payload. The `title` and `description` fields are published in the projects service manifest to list what functions are available. - -```typescript -export default new GeoprocessingHandler(calculateArea, { - title: "calculateArea", - description: "Function description", - timeout: 60, // seconds - memory: 1024, // megabytes - executionMode: "async", - // Specify any Sketch Class form attributes that are required - requiresProperties: [], -}); -``` - -To publish your new function: - -- Add it to the `project/geoprocessing.json` file under the `geoprocessingFunctions` section. -- Build and publish your project as normal. - -### Creating a Report Client - -To create a new report client simply run: - -```bash -npm run create:client -``` - -Enter some information about this report client: - -``` -? Name for this client, in PascalCase ReefReport -? Describe what this client is for calculating reef overlap -? What is the name of geoprocessing function this client will invoke? (in camelCase) reefAreaOverlap -``` - -The command should then return the following output: - -``` -✔ created ReefReport client in src/clients/ - -Geoprocessing client initialized - -Next Steps: - * Update your client definition in src/clients/ReefReport.tsx - * View your report client using 'npm storybook' with smoke test output for all geoprocessing functions -``` - -Assuming you named your client the default `SimpleReport`, it will have been been added to `project/geoprocessing.json` in the `clients` section. A `SimpleReport.tsx` file will have been added to `src/clients` folder. It is responsible for rendering your new `SimpleCard` component from the `src/components` folder and wrapping it in a language `Translator`. Think of the Card component as one section of a report. It executes a geoprocessing function and renders the results in a way that is readable to the user. You can add one or more Cards to your Report client. If your report gets too long, you can split it into multiple ReportPages. See the [TabReport](https://github.com/seasketch/geoprocessing/blob/dev/packages/template-blank-project/src/clients/TabReport.tsx) example of how to add a `SegmentControl` with multiple pages. - -`SimpleReport.stories.tsx` and `SimpleCard.stories.tsx` files will both be included that allows you to view your Report and Card components in [storybook](#storybook) to dial in how they should render for every example sketch and their smoke test output. - -After adding a report client, be sure to properly setup user displayed text for [translation](../gip/GIP-1-i18n.md#making-report-strings-translatable). You'll need to follow the full workflow to extract the english translation and add the translations for other languages. - -### Updating A Datasource - -When updating a datasource, you should try to take it all the way through the process of `import`, `precalc`, and `publish` so that there's no confusion about which step you are on. It's easy to leave things in an incomplete state and its not obvious when you pick it back up. - -- Edit/update your data in data/src -- Run `npm run reimport:data`, choose your source datasource and choose to not publish right away. `data/dist` will now contain your updated datasource file(s). -- Run `npm run precalc:data`, choose the datasource to precalculate stats for. -- `npm test` to run your smoke tests which read data from `data/dist` and make sure the geoprocessing function results change as you would expect based on the data changes. Are you expecting result values to go up or down? Stay about or exactly the same? Try not to accept changes that you don't understand. -- Add additional sketches or features to your smoke tests as needed. Exporting sketches from SeaSketch as geojson and copying to `examples/sketches` is a great way to do this. Convince yourself the results are correct. -- Publish your updated datasets with `npm run publish:data`. -- Clear the cache for all reports that use this datasource with `npm run clear-results` and type the name of your geoprocessing function (e.g. `boundaryAreaOverlap`). You can also opt to just clear results for all reports with `npm run clear-all-results`. Cached results are cleared one record at a time in dynamodb so this can take quite a while. In fact, the process can run out of memory and suddenly die. In this case, you can simply rerun the clear command and it will continue. Eventually you will get through them all. -- Test your reports in SeaSketch. Any sketches you exported should produce the same numbers. Test with any really big sketches, make sure your data updates haven't reached any new limit. This can happen if your updated data is much larger, has more features, higher resolution, etc. - -### Custom Sketch Attributes - -Sketch attributes are additional properties provided with a Sketch Feature or a Sketch Collection. They can be user-defined at draw time or by the SeaSketch platform itself. The SeaSketch admin tool lets you add custom attributes to your [sketch classes](https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes). SeaSketch will pass these sketch attributes on to both preprocessing and geoprocessing functions. - -Common use cases: - -- Preprocessor - - Passing an extra yes/no attribute for whether to include existing protected areas as part of your sketch, or whether to allow the sketch to extend beyond the EEZ, or to include land. - - Passing a numeric value to be used with a buffer. -- Geoprocessor - - Provide language translations for each sketch attribute name and description, for each language enabled for the project. - - Assign a protection level or type to an area, such that the function (and resulting report) can assess against the required amount of protection for each level. - - Assign activities to an area, that the function can assign a protection level. This is particularly useful when reporting on an entire SketchCollection. The function can group results by protection level and ensure that overlap is not double counted within each group, but allow overlap between groups to go to the higher protection level. - -#### Accessing sketch properties from report client - -The main way to access sketch attributes from a browser client is the [useSketchProperties()](https://seasketch.github.io/geoprocessing/api/modules/client_ui.html#useSketchProperties) hook. Examples include: - -- [SketchAttributesCard](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/components/SketchAttributesCard.tsx) and [story](https://seasketch.github.io/geoprocessing/storybook/?path=/story/components-card-sketchattributescard--next) with [source](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/components/SketchAttributesNextCard.stories.tsx) - -#### Accessing sketch properties from function - -Withing a preprocessing or geoprocessing function, the [SketchProperties](https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#SketchProperties) are provided within every sketch. Within that are [userAttributes](https://seasketch.github.io/geoprocessing/api/modules/geoprocessing.html#UserAttribute) that contain all of the user-defined attributes. - -For example, assume your Polygon sketch class contains an attribute called `ACTIVITIES` which is an array of allowed activities for this sketch class. And you have a second attribute called `ISLAND` that is a string containing the name of the island this sketch is located. You can access it as follow: - -```javascript -export async function protection( - sketch: Sketch | SketchCollection -): Promise { - const sketches = toSketchArray(sketch); - // Complex attributes are JSON that need to be parsed - const activities = getJsonUserAttribute(sketches[0], 'ACTIVITIES') - // Simple attributes are simple strings or numbers that can be used directly - const island = getUserAttribute(sketches[0], 'ISLAND') -``` - -Examples of working with user attributes: - -- [getIucnCategoryForSketches](https://github.com/seasketch/geoprocessing/blob/1301dc787aeff59ed29ceb07ed2d925984da6abf/packages/geoprocessing/src/iucn/helpers.ts#L36) takes an array of sketches, extracts the list of IUCN `ACTIVITIES` the sketch designated as allowed for each sketch, and returns the category (protection level) for each sketch. The sketch array can be generated from the `sketch` parameter passed to a geoprocessing functions using [toSketchArray()`](https://github.com/seasketch/geoprocessing/blob/1301dc787aeff59ed29ceb07ed2d925984da6abf/packages/geoprocessing/src/helpers/sketch.ts#L83). toSketchArray helps you write single functions that work on either a single sketch or a collection of sketches. -- [isContiguous](https://github.com/seasketch/fsm-reports/blob/main/src/functions/boundaryAreaOverlap.ts#L26) function that optionally merges the contiguous zone with the users sketch. Checks for existence of a [specific user attribute](https://github.com/seasketch/fsm-reports/blob/main/src/util/includeContiguousSketch.ts#L28) - -### Adding and Passing Extra Parameters - -Sometimes you want to pass additional parameters to a preprocessing or geoprocessing function that are defined outside of the sketch creation process by seasketch or through the report itself. These `extraParams` are separate from the `sketch`. They are an additional object passed to every preprocessing and geoprocessing function. - -Use Cases: - -- Preprocessor - - Passing one or more `eezs` to a global clipping function that specifies optional EEZ boundaries to clip the sketch to in addition to removing land. -- Geoprocessor - - Subregional planning. Passing one or more `geographyIds`, as subregions within an EEZ. This can be used to when calculating results for all subregions at once doesn't make sense, or is computationally prohibitive. Instead you may want the user to be able to switch between subregions, and the reports will rerun the geoprocessing function with a different geography and update with the result on-demand. - -#### Passing Extra Parameters To Geoprocessing Functions - -Report developers will pass the extra parameters to a geoprocessing function via the ResultsCard. It must be an object where the keys can be any JSON-compatible value. Even nested objects and arrays are allowed. - -```jsx - -``` - -A common next step for this is to maintain the array of geographyIds in the parent Card, and potentially allow the user to change the values using a UI selector. If the value passed to `extraParams` changes, the card will re-render itself, triggering the run of a new function, and displaying the results. - -Internally the [ResultsCard](https://github.com/seasketch/geoprocessing/blob/7275bd3ddf355259cf99335a761b99472045b6f8/packages/geoprocessing/src/components/ResultsCard.tsx) uses the [useFunction](https://github.com/seasketch/geoprocessing/blob/7275bd3/packages/geoprocessing/src/hooks/useFunction.ts#L44) hook, which accepts `extraParams`. - -```typescript -useFunction('boundaryAreaOverlap', { geographyIds: ['santa-maria'] } -``` - -If invoking functions directly, such as SeaSketch invoking a preprocessing function, the `extraParams` can be provided in the event body. - -```json -{ - "feature": {...}, - "extraParams": { "eezs": ["Azores"], "foos": "blorts", "nested": { "a": 3, "b": 4 }} -} -``` - -#### Accessing Extra Parameters In Functions - -Both preprocessing and geoprocessing functions receive a second `extraParams` parameter. The default type is `Record` but the implementer can provide a narrower type that defines explicit parameters. - -Geoprocessing function: - -```typescript -/** Optional caller-provided parameters */ -interface ExtraParams { - /** Optional ID(s) of geographies to operate on. **/ - geographyIds?: string[]; -} - -export async function boundaryAreaOverlap( - sketch: Sketch | SketchCollection, - extraParams: ExtraParams = {} -): Promise { - const geographyIds = extraParams.geographyIds - console.log('Current geographies', geographyIds) - const results = runAnalysis(geographyIds) - return results -``` - -Preprocessing function: - -```typescript -interface ExtraParams { - /** Array of EEZ ID's to clip to */ - eezs?: string[]; -} - -/** - * Preprocessor takes a Polygon feature/sketch and returns the portion that - * is in the ocean (not on land) and within one or more EEZ boundaries. - */ -export async function clipToOceanEez( - feature: Feature | Sketch, - extraParams: ExtraParams = {}, -): Promise { - if (!isPolygonFeature(feature)) { - throw new ValidationError("Input must be a polygon"); - } - - /** - * Subtract parts of feature/sketch that overlap with land. Uses global land polygons - * unionProperty is specific to subdivided datasets. When defined, it will fetch - * and rebuild all subdivided land features overlapping with the feature/sketch - * with the same gid property (assigned one per country) into one feature before clipping. - * This is useful for preventing slivers from forming and possible for performance. - */ - const removeLand: DatasourceClipOperation = { - datasourceId: "global-clipping-osm-land", - operation: "difference", - options: { - unionProperty: "gid", // gid is assigned per country - }, - }; - - /** - * Optionally, subtract parts of feature/sketch that are outside of one or - * more EEZ's. Using a runtime-provided list of EEZ's via extraParams. - * eezFilterByNames allows this preprocessor to work for any set of EEZ's - * Using a project-configured planningAreaId allows this preprocessor to work - * for a specific EEZ. - */ - const removeOutsideEez: DatasourceClipOperation = { - datasourceId: "global-clipping-eez-land-union", - operation: "intersection", - options: { - propertyFilter: { - property: "UNION", - values: extraParams?.eezs || [project.basic.planningAreaId] || [], - }, - }, - }; - - // Create a function that will perform the clip operations in order - const clipLoader = genClipLoader(project, [removeLand, removeOutsideEez]); - - // Wrap clip function into preprocessing function with additional clip options - return clipToPolygonFeatures(feature, clipLoader, { - maxSize: 500000 * 1000 ** 2, // Default 500,000 KM - enforceMaxSize: false, // throws error if feature is larger than maxSize - ensurePolygon: true, // don't allow multipolygon result, returns largest if multiple - }); -} -``` - -#### Writing stories with extraParams - -Default smoke tests typically don't pass extraParams to the preprocessing or geoprocessing function but they can. Just know that each smoke test can only output results for one configuration of extraParams. And storybook can only load results for one smoke test run. -This means that in order to test multiple variations of extraParams, you will need to create multiple smoke tests. You could even write multiple smoke tests that each write out results all in one file. - -Example smoke test (e.g. boundaryAreaOverlapExtraParamSmoke.test.ts): - -```typescript -test("boundaryAreaOverlapSantaMariaSmoke - tests run with one subregion", async () => { - const examples = await getExamplePolygonSketchAll(); - for (const example of examples) { - const result = await boundaryAreaOverlap(example, { geographyIds: ['santa-maria']}); - expect(result).toBeTruthy(); - writeResultOutput(result, "boundaryAreaOverlapSantaMaria", example.properties.name); - } -} -``` - -### Subdividing Large Datasets - -If you have very large polygon datasets (think country or global data) with very large complex polygon, the standard data import process which uses flatgeobuf, may not be sufficient. An alternative is to use a `VectorDataSource` specially created by SeaSketch. It's based on a method described by Paul Ramsey in [this article](https://blog.cleverelephant.ca/2019/11/subdivide.html) of [subdividing](https://postgis.net/docs/ST_Subdivide.html) your data, cutting it up along the boundaries of a spatial index. - -Once the polygons have been subdivided, they can be put into small files encoded in the geobuf format, and a lookup table created for the index. This entire bundle can be then put into S3 cloud storage. - -![subdivision process](https://user-images.githubusercontent.com/511063/79161015-a0375e80-7d8f-11ea-87a9-0658777f2f90.jpg) - -The magic comes in being able to request polygons from this bundle in our geoprocessing functions. A `VectorDataSource` class is available that lets us request only the polygon chunks from our subdivided bundle that overlap with the bounding box of our sketch that we are currently analyzing. It even caches request results locally so that subsequent requests do not call out to the network if needed. - -`VectorDataSource` can also rebuild the polygon chunks back into the original polygons they came from. Imagine you've subdivide a dataset of country boundary polygons for the entire world. You've subdivided them, and now you can reconstruct them back into country polygons. You simply need to maintain an attribute with your polygons that uniquely identifies how they should be reconstructed. This could be a `countryCode` or just a non-specific `gid`. - -Here is an example of use end-to-end. Note this is quite a manual process. Future framework versions may try to automate it. - -- [data prep script](https://github.com/mcclintock-lab/hawaii-reports-next/blob/main/data/eez-land-union-prep.sh). -- [sql subdivide script](https://github.com/mcclintock-lab/hawaii-reports-next/blob/main/data/eez-land-union.sql) run by the data prep script -- [publish script](https://github.com/mcclintock-lab/hawaii-reports-next/blob/main/data/eez-land-union-publish.sh) brings the subdivided polygons out of postgis, encodes them in geobuf format, builds the index, and publishes it all to a standalone S3 bucket that is independent of your project. The url of the S3 bucket will be provided once complete. You can ``--dry-run` the command to see how many bundles it will create and how big they'll be. The sweet spot is bundles about ~25KB in size. Once you've found that sweet spot you can do the actual run. -- [use of VectorDataSource in gp function](https://github.com/mcclintock-lab/hawaii-reports-next/blob/main/src/functions/clipToOceanEez.ts#L32) - -This is the method that is used for the global `land` and `eez` datasources. Here is a full example of subdividing OpenStreetMap land polygons for the entire world. This is what is used for the `clipToOceanEez` script that comes with the `ocean-eez` starter template. - -- [publish vector data source](https://github.com/mcclintock-lab/hawaii-reports-next/blob/main/data/eez-land-union-publish.sh) - -### Advanced storybook usage - -There are multiple ways to introduce state into your stories. Many components draw their state from the ReportContext, which contains a lot of the information passed to the app on startup from seasketch. - -There are 3 common methods for creating a story with context. All of these methods are built on `ReportStoryLayout`. - -ReportStoryLayout is a component used by storybook that wraps your story in the things that the top-level App component would provide including setting report context, changing language, changing text direction, as well as offering dropdown menus for changing the language and the report width for different device sizes. - -1. ReportDecorator - decorator that wraps story in ReportStoryLayout and otherwise uses default context value. A good starting point because it's simple. (see Card.stories.tsx). Language translation will work in the story with this method. -2. If you want to override the context in your stories use `createReportDecorator()` - decorator generator that wraps story in ReportStoryLayout and lets you override report context. Because a decorator can only be specified for the whole file, you should only use this if you want all stories in the file to be overidden with the same context. (see SegmentControl.stories.tsx). But you can split them up into multiple story files. Language translation will work in the story with this method. -3. For optimal control can use the ReportCardDecorator in combindation with `sampleSketchReportContextValue()` to set the context per story (see LayerToggle.stories.tsx). Language translation will not work with the story in this method. +Your environment is now ready for a project diff --git a/website/docs/tutorials/assets/3-coral-species-add-page.jpg b/website/docs/tutorials/assets/3-coral-species-add-page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7737795df771b746bdd822cf58e829fe6267ad71 GIT binary patch literal 168417 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�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%0AuwqE0ouQc$` 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
o4x7@SLe~v>I8&ll}pvh0v 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 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/3-corals-map.jpg b/website/docs/tutorials/assets/3-corals-map.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b002296f12562e7b7dd0d194b152b53f0e235228 GIT binary patch literal 49531 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 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/benthic-habitat-map.jpg b/website/docs/tutorials/assets/benthic-habitat-map.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd9dc11dfc7cfc38a15ac18e8e0cca1115cab06b GIT binary patch literal 34160 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
41{X2b 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 z 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 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/coral-reef-card-add-to-page.jpg b/website/docs/tutorials/assets/coral-reef-card-add-to-page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1481151cb6d0b81bda159f0ddf50c585ff7488f GIT binary patch literal 125196 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

K(oMe;q?S*=oItn8cX^7f!LlBm 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 !{vI}109)_Tq9RR2N7{A~mNLtG2q#~Q-aNuD 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

VN;elE$JBO&5!OzQ9c_M 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

jB>d+YGv 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 WfXK~#ePNH literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/coral-reef-card-sketch.jpg b/website/docs/tutorials/assets/coral-reef-card-sketch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..002bdf92b761d4f2fb942be57365caa55650b89e GIT binary patch literal 22873 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 XlW|aDsNb$a{C+Lsf9E@#JoG;RR`4Ic literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/eez-bbox.jpg b/website/docs/tutorials/assets/eez-bbox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8e3a11fda7406a64989f25e64bc04404ec0f0fa GIT binary patch literal 210290 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 VPD3p4-9*Wq$cV$YCJz48_Ya~z(}w^6 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/preprocessing-before.jpg b/website/docs/tutorials/assets/preprocessing-before.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51005218a69344bd192b553ecfdbb337c6a36003 GIT binary patch literal 30169 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⁡a55JwdovJ*L3swN9^DRZ@Q` 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®jSwo#hwwsXqc>hyUVj|!Vn?gO}~uo5~m#FQXj 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 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/seamount-add-page.jpg b/website/docs/tutorials/assets/seamount-add-page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79d348ed9f96f9cc621235ab13866ec29349c14a GIT binary patch literal 147813 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 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/seamount-map.jpg b/website/docs/tutorials/assets/seamount-map.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7326d9e2a629535d2a3142ddba57ffb999b103c GIT binary patch literal 41641 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 YSAr1#`?LRdo&4___|IDdh;Oa`2M7>MVgLXD literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/simple-card-table.jpg b/website/docs/tutorials/assets/simple-card-table.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05c7ee3355227818ba89692a4db1f90443afcd21 GIT binary patch literal 76766 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 TLALmRfKvVcN5=(#4o3e6ax>k5 literal 0 HcmV?d00001 diff --git a/website/docs/tutorials/assets/terminal-duplicate.jpg b/website/docs/tutorials/assets/terminal-duplicate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b724f246fdfd3795050f8b9451bb9bd390ef16b5 GIT binary patch literal 96001 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%0DHaYk4i0uUc6LrKp3|IM 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 literal 0 HcmV?d00001 diff --git a/website/docs/Tipsandtricks.md b/website/docs/tutorials/clouddrive.md similarity index 51% rename from website/docs/Tipsandtricks.md rename to website/docs/tutorials/clouddrive.md index 6da355aefc..8546ed1b2e 100644 --- a/website/docs/Tipsandtricks.md +++ b/website/docs/tutorials/clouddrive.md @@ -1,46 +1,6 @@ ---- -slug: "/tipsandtricks" ---- +# Cloud Drive Syncing -# Tips and Tricks - -Essential tips For configuring this framework using a specific operating system (usually Ubuntu). - -## Editing a file in Ubuntu using nano text editor - -Assume you want to add some lines of text to a file called `foo.txt` in your home directory using nano. - -1. Open a Ubuntu shell -2. `nano ~/foo.txt` -3. Copy and paste the following lines into the file - -```text -This is file foo -It doesn't do much -``` - -4. Save and exit with `Ctrl-O` and `Enter` -5. Look at your results - -```bash -echo ~/foo.txt -``` - -6. Now delete the file with `rm ~/.foo.txt` - -## Editing your startup bash script in Ubuntu - -On occasion, you'll need to modify your Ubuntu bash shell environment to load something on startup. Building on the last tip, you can edit your `.bashrc` file - -1. Open a Ubuntu shell -2. `nano ~/.bashrc` -3. Add or paste in your configuration. This can be done at the top or bottom of the file usually. -4. Save and exit with `Ctrl-O` and `Enter` -5. Reload your bashrc with `source ~/.bashrc` or you can just close and restart your Ubuntu shell. - -/Users/MAC-OS-USER/Library/CloudStorage/Box-Box - -## Access Cloud Drive folder +## Box Sync This is useful if you manage your spatial data in Box and collaborators sync it to their local computers. This lets you bring your Box Drive folder into your Ubuntu docker container so that you can symlink it to your `data/src` folder and import data in a consistent way across all users. diff --git a/website/docs/tutorials/deploy.md b/website/docs/tutorials/deploy.md new file mode 100644 index 0000000000..28d999da6a --- /dev/null +++ b/website/docs/tutorials/deploy.md @@ -0,0 +1,114 @@ +# Deploy your project + +A `deploy` of your application uses [`aws-cdk`](https://aws.amazon.com/cdk/) to inspect your local build and automatically provision all of the necessary AWS resources as a single [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) stack. + +This includes: + +- S3 storage buckets for publishing datasources and containing bundled Report UI components +- Lambda functions that run preprocessing and geoprocessing functions on-demand +- A Gateway with REST API and Web Socket API for clients like SeaSketch to discover, access, and run all project resources over the Internet. +- A DynamoDB database for caching function results + +For every deploy after the first, it is smart enough to compute the changeset between your local build and the published stack and modify the stack automatically. + +## Setup AWS + +You are not required to complete this step until you want to deploy your project and integrate it with SeaSketch. Until then, you can do everything except `publish` data or `deploy` your project. + +You will need to create an AWS account with an admin user, allowing the framework to deploy your project using CloudFormation. A payment method such as a credit card will be required. + +Expected cost: [free](https://aws.amazon.com/free) to a few dollars per month. You will be able to track this. + +- Create an Amazon [AWS account] such that you can login and access the main AWS Console page (https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/). +- Create an AWS IAM [admin account](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html). This is what you will use to manage projects. +- Setup IAM role allowing API Gateway to log info to Cloudwatch + - By default, API Gateway does not have the required permission to write logs to CloudWatch. It is necessary to specify an IAM Role. This can be accomplished by logging into the AWS console, switching to the region where you would like to deploy your geoprocessing function, and configuring this role. + - https://coady.tech/aws-cloudwatch-logs-arn/ + +## AWSCLI + +If you are using a Docker devcontaine to develop reports you should already have access to the `aws` command. But if you are running directly on your host operating system you will need to install [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) and [configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) it with your IAM account credentials. + +### Extra steps for Windows + +Windows you have the option of installing [awscli for Windows](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) and then exposing your credentials in your Ubuntu container. This allows you to manage one set of credentials. + +Assuming your username is `alex`, once you've installed awscli in Windows, confirm you now have the following files under Windows. + +```bash +C:\Users\alex\.aws\credentials +C:\Users\alex\.aws\config +``` + +Now, open a Ubuntu shell and edit your bash environment variables to [point to those files](https://stackoverflow.com/questions/52238512/how-to-access-aws-config-file-from-wsl-windows-subsystem-for-linux/53083079#53083079). + +Add the following to your startup `.bashrc` file. + +```bash +nano ~/.bashrc +export AWS_SHARED_CREDENTIALS_FILE=/mnt/c/Users/alex/.aws/credentials +export AWS_CONFIG_FILE=/mnt/c/Users/alex/.aws/config + +Ctrl-o to save +Ctrl-x to exit +``` + +Now, source the file into your current shell environment and verify the environment variables are set + +```bash +source ~/.bashrc +echo $AWS_SHARED_CREDENTIALS_FILE +echo $AWS_CONFIG_FILE +``` + +## Confirm awscli is working + +To check if awscli is configured run the following: + +```bash +aws configure list +``` + +If no values are listed, then the AWS CLI is not configured properly. Go back and check everything over for this step. + +## Do the deploy + +To deploy your project run the following: + +```bash +npm run deploy +``` + +When the command completes, the stack should now be deployed. It should print out a list of URL's for accessing stack resources. You do not need to write these down. You can run the `npm run url` command at any time and it will output the RestApiUrl, which is the main URL you care about for integration with SeaSketch. After deploy a `cdk-outputs.json` file will also have been generated in the top-level directory of your project with the full list of URL's. This file is not checked into the code repository. + +Example: + +```json +{ + "gp-fsm-reports-test": { + "clientDistributionUrl": "abcdefg.cloudfront.net", + "clientBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-client", + "datasetBucketUrl": "https://s3.us-west-2.amazonaws.com/gp-fsm-reports-test-datasets", + "GpRestApiEndpointBF901973": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/", + "restApiUrl": "https://tuvwxyz.execute-api.us-west-2.amazonaws.com/prod/", + "socketApiUrl": "wss://lmnop.execute-api.us-west-2.amazonaws.com" + } +} +``` + +### Debugging deploy + +- If your AWS credentials are not setup and linked properly, you will get an error here. Go back and [fix it](#setup-aws). +- The very first time you deploy any project to a given AWS data center (e.g. us-west-1), it may ask you to bootstrap cdk first. Simply run the following: + +```bash +npm run bootstrap +``` + +Then `deploy` again. + +- If your deploy fails and it's not the first time you deployed, it may tell you it has performed a `Rollback` on the deployed stack to its previous state. This may or may not be successful. You'll want to verify that your project is still working properly within SeaSketch. If it's not you can always destroy your stack by running: + +```bash +npm run destroy +``` diff --git a/website/docs/tutorials/existingproject.md b/website/docs/tutorials/existingproject.md new file mode 100644 index 0000000000..e392f8287a --- /dev/null +++ b/website/docs/tutorials/existingproject.md @@ -0,0 +1,74 @@ +# Setup an exising geoprocessing project + +This use case is where a geoprocessing project already exists, but it was developed on a different computer, and you now need to set it up on your computer, in order to be able to make and deploy modifications. + +This tutorial assumes: + +- Your [system setup](./Tutorials.md) is complete +- You completed the [sample project tutorial](./sampleproject.md) +- Your geoprocessing virtual environment is running (Devcontainer or WSL) +- You have VSCode open in your virtual environment with a terminal pane open + +First, clone your existing geoprocessing project to your workspace + +```sh +cd /workspaces +git clone https://github.com/seasketch/fsm-reports.git +npm install +``` + +## Link your source data + +1. figure out [which option](../linkData.md) was used to bring data into your geoprocessing project, and follow the steps to set it up. + +- Option 1, you're good to go, the data should already be in `data/src` and src paths in `project/datasources.json` should have relative paths pointing into it. +- Option 2, Look at `project/datasources.json` for the existing datasource paths and if your data file paths and operating system match you may be good to go. Try re-importing your data as below, and if it fails consider migrating to Option 1 or 3. +- Option 3, if you're running a devcontainer you'll need to have made your data available in workspace by mounting it from the host operating system via docker-compose.yml (see installation tutorial) or have somehow synced or downloaded it directly to your container. Either way, you then just need to symlink the `data/src` directory in your project to your data. Make sure you point it to the right level of your data folder. Check the src paths in `project/datasources.json`. If for example the source paths start with `data/src/Data_Received/...` and your data directory is at `/Users/alex/Library/CloudStorage/Box-Box/ProjectX/Data_Received`, you want to create your symlink as such + +```bash +ln -s /Users/alex/Library/CloudStorage/Box-Box/ProjectX data/src +``` + +Assuming `data/src` is now populated, you need to ensure everything is in order. + +## Reimport datasources + +This will re-import all datasets to your `data/dist` directory. Make sure that this directory exists first. + +```bash +mkdir -p data/dist +npm run reimport:data +``` + +Say yes to reimporting all datasources, and no to publishing them (we'll get to that). + +If you see errors, look at what they say. If they say datasources are not being found at their path, then something is wrong with your drive sync (files might be missing), or with your symlink if you used option 3. + +If all is well, you should see no error, and `data/dist` should be populated with files. In the Version Control panel your datasources.json file will have changes, including some updated timestamps. + +But what if git changes show a lot of red and green? + +- You should look closer at what's happening. If parts of the smoke test output (examples directory JSON files) are being re-ordered, that may just be because Javascript is being a little bit different in how it generates JSON files from another computer that previously ran the tests. +- If you are seeing changes to your precalc values in precalc.json, then your datasources may be different from the last person that ran it. You will want to make sure you aren't using an outdated older version. If you are using an updated more recent version, then convince yourself the changes are what you expect, for example total area increases or decreases. + +What if you don't have access to the source data, or just can't get your data synced properly, and you just need to move forward? + +- If the project was deployed to AWS, then there will be a copy of the published data in the `datasets` bucket in AWS S3. +- To copy this data from AWS back to your `data/dist` directory use the following, assuming your git repo is named `fsm-reports-test` + - `aws s3 sync s3://gp-fsm-reports-test-datasets data/dist` + +## Run tests + +Assuming data reimport was successful, you can now try to run your smoke tests + +```sh +npm run test +``` + +## Build and Deploy + +```sh +npm run build +``` + +Now follow the guide to [deploy your project](./deploy.md) diff --git a/website/docs/tutorials/extraParams.md b/website/docs/tutorials/extraParams.md new file mode 100644 index 0000000000..a60f684d00 --- /dev/null +++ b/website/docs/tutorials/extraParams.md @@ -0,0 +1,148 @@ +# Adding and Passing Extra Parameters + +Sometimes you want to pass additional parameters to a preprocessing or geoprocessing function that are defined outside of the sketch creation process by seasketch or through the report itself. These `extraParams` are separate from the `sketch`. They are an additional object passed to every preprocessing and geoprocessing function. + +Extra parameters should be JSON serializable. Strings, numbers, objects, etc. but no functions. + +Use Cases: + +- Preprocessor + - Passing one or more `eezs` to a global clipping function that specifies optional EEZ boundaries to clip the sketch to in addition to removing land. +- Geoprocessor + - Subregional planning. Passing one or more `geographyIds`, as subregions within an EEZ. This can be used to when calculating results for all subregions at once doesn't make sense, or is computationally prohibitive. Instead you may want the user to be able to switch between subregions, and the reports will rerun the geoprocessing function with a different geography and update with the result on-demand. + +## Passing Extra Parameters To Geoprocessing Functions + +Report developers will pass the extra parameters to a geoprocessing function via the ResultsCard. It must be an object where the keys can be any JSON-compatible value. Even nested objects and arrays are allowed. + +```jsx + +``` + +A common next step for this is to maintain the array of geographyIds in the parent Card, and potentially allow the user to change the values using a UI selector. If the value passed to `extraParams` changes, the card will re-render itself, triggering the run of a new function, and displaying the results. + +Internally the [ResultsCard](https://github.com/seasketch/geoprocessing/blob/7275bd3ddf355259cf99335a761b99472045b6f8/packages/geoprocessing/src/components/ResultsCard.tsx) uses the [useFunction](https://github.com/seasketch/geoprocessing/blob/7275bd3/packages/geoprocessing/src/hooks/useFunction.ts#L44) hook, which accepts `extraParams`. + +```typescript +useFunction('boundaryAreaOverlap', { geographyIds: ['santa-maria'] } +``` + +If invoking functions directly, such as SeaSketch invoking a preprocessing function, the `extraParams` can be provided in the event body. + +```json +{ + "feature": {...}, + "extraParams": { "eezs": ["Azores"], "foos": "blorts", "nested": { "a": 3, "b": 4 }} +} +``` + +## Accessing Extra Parameters In Functions + +Both preprocessing and geoprocessing functions receive a second `extraParams` parameter. The default type is `Record` but the implementer can provide a narrower type that defines explicit parameters. + +Geoprocessing function: + +```typescript +/** Optional caller-provided parameters */ +interface ExtraParams { + /** Optional ID(s) of geographies to operate on. **/ + geographyIds?: string[]; +} + +export async function boundaryAreaOverlap( + sketch: Sketch | SketchCollection, + extraParams: ExtraParams = {} +): Promise { + const geographyIds = extraParams.geographyIds + console.log('Current geographies', geographyIds) + const results = runAnalysis(geographyIds) + return results +``` + +Preprocessing function: + +```typescript +interface ExtraParams { + /** Array of EEZ ID's to clip to */ + eezs?: string[]; +} + +/** + * Preprocessor takes a Polygon feature/sketch and returns the portion that + * is in the ocean (not on land) and within one or more EEZ boundaries. + */ +export async function clipToOceanEez( + feature: Feature | Sketch, + extraParams: ExtraParams = {}, +): Promise { + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + + /** + * Subtract parts of feature/sketch that overlap with land. Uses global land polygons + * unionProperty is specific to subdivided datasets. When defined, it will fetch + * and rebuild all subdivided land features overlapping with the feature/sketch + * with the same gid property (assigned one per country) into one feature before clipping. + * This is useful for preventing slivers from forming and possible for performance. + */ + const removeLand: DatasourceClipOperation = { + datasourceId: "global-clipping-osm-land", + operation: "difference", + options: { + unionProperty: "gid", // gid is assigned per country + }, + }; + + /** + * Optionally, subtract parts of feature/sketch that are outside of one or + * more EEZ's. Using a runtime-provided list of EEZ's via extraParams. + * eezFilterByNames allows this preprocessor to work for any set of EEZ's + * Using a project-configured planningAreaId allows this preprocessor to work + * for a specific EEZ. + */ + const removeOutsideEez: DatasourceClipOperation = { + datasourceId: "global-clipping-eez-land-union", + operation: "intersection", + options: { + propertyFilter: { + property: "UNION", + values: extraParams?.eezs || [project.basic.planningAreaId] || [], + }, + }, + }; + + // Create a function that will perform the clip operations in order + const clipLoader = genClipLoader(project, [removeLand, removeOutsideEez]); + + // Wrap clip function into preprocessing function with additional clip options + return clipToPolygonFeatures(feature, clipLoader, { + maxSize: 500000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, // throws error if feature is larger than maxSize + ensurePolygon: true, // don't allow multipolygon result, returns largest if multiple + }); +} +``` + +## Writing smoke tests with extraParams + +Default smoke tests typically don't pass extraParams to the preprocessing or geoprocessing function but they can. Just know that each smoke test can only output results for one configuration of extraParams. And storybook can only load results for one smoke test run. +This means that in order to test multiple variations of extraParams, you will need to create multiple smoke tests. You could even write multiple smoke tests that each write out results all in one file. + +Example smoke test (e.g. boundaryAreaOverlapExtraParamSmoke.test.ts): + +```typescript +test("boundaryAreaOverlapSantaMariaSmoke - tests run with one subregion", async () => { + const examples = await getExamplePolygonSketchAll(); + for (const example of examples) { + const result = await boundaryAreaOverlap(example, { geographyIds: ['santa-maria']}); + expect(result).toBeTruthy(); + writeResultOutput(result, "boundaryAreaOverlapSantaMaria", example.properties.name); + } +} +``` diff --git a/website/docs/tutorials/newproject.md b/website/docs/tutorials/newproject.md new file mode 100644 index 0000000000..170daa6bc5 --- /dev/null +++ b/website/docs/tutorials/newproject.md @@ -0,0 +1,190 @@ +# Create New Geoprocessing Project + +This tutorial walks you through designing and creating your own geoprocessing report. It covers many of the questions and decisions you might face along the way. + +This tutorial assumes: + +- Your [system setup](./Tutorials.md) is complete +- You completed the [sample project tutorial](./sampleproject.md) +- Your geoprocessing virtual environment is currently running (Devcontainer or WSL) +- You have VSCode open in your virtual environment with a terminal pane open + +## Where Do I Start? + +Creating a geoprocessing project is not linear, it's iterative. You don't need to have all the answers for your project or understand all the features of the framework. Here's one approach: + +### Design + +- Put together a rough design [template](https://docs.google.com/document/d/1Qe7pZYmwg7ggRY9ocu3tpdTQkvuIHMr38wLxrjSitpU/edit?usp=sharing). This one asks common questions and is a good place to capture decisions. +- Explore the geoprocessing [UI components library](/storybook). +- Look at other SeaSketch Reports and find ideas that match your needs. + +### Start Simple + +If it's not clear at this point, the geoprocessing framework is not a one-side-fits-all solution, it's a set of building blocks. Which ones you use are up to you. + +It takes time to figure out how it all works so keep it simple to start: + +- single planning boundary or none at all +- simple measurable objectives (overlap area, % area overlap, overlap feature count) +- smaller datasets +- no groupno classification of sketch types (e.g. protection levels) +- no need to handle overlapping sketch polygons + +A good example of this is [Oregon](https://github.com/underbluewaters/oregon-next) SeaSketch reports. + +Then as your planning process gets more complex: + +- multiple planning boundaries (offshore/nearshore) +- multiple objectives with targets +- large datasets with multiple data subclasses. +- long running analysis with required precalculation +- use of a sketch classification system (e.g. protection levels) +- need to enforce rules about overlapping sketches + +Your project can benefit from more advanced features: + +- `Geography` records representing project planning boundaries +- `Metric` records for representing multi-dimensional analysis results. +- `Objective` records representing objective targets per sketch class. +- `MetricGroup` records reresenting relationship of metric results to their data classes, datasource, objective target, etc. +- `toolbox` for calculating overlay analysis metrics at the collection level in many dimensions - by data class, by protection level, by planning boundary. + - `overlapFeatures`, `rasterMetrics`, `overlapFeaturesGroupMetrics`, `overlapRasterGroupMetrics` +- UI components that can work multi-dimensional metrics + - `ClassTable`, `SketchClassTable`, `GeographySwitcher` +- `precalc` command automating pre-calculation of overlay stats for combinations of Datasources and Geographies. +- `worker` functions to run spread out geoprocessing work to run in parallel. +- Language `translation` workflow and library of pre-translated UI components. + +Examples of more complex projects: + +- [California](https://github.com/seasketch/california-reports) - multiple geographies presented in reports (planning boundaries, bioregions), worker functions +- [Bermuda](https://github.com/seasketch/bermuda-reports-next) - IUCN classification system with metrics calculated overall, per protection level, and per sketch. worker functions +- [Blue Azores nearshore](https://github.com/seasketch/azores-nearshore-reports) - user switching between planning geographies. +- [Samoa Reports](https://github.com/seasketch/samoa-reports) +- [Azores Nearshore Reports](https://github.com/seasketch/azores-nearshore-reports). + +## Create A SeaSketch Project + +First things first, follow the [instructions](https://docs.seasketch.org/seasketch-documentation/administrators-guide/getting-started) to create a new SeaSketch project. This includes defining the planning bounds and [creating a Sketch class](https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes). You will want to create a `Polygon` sketch class with a name that makes sense for you project (e.g. MPA for Marine Protected Area) and then also a `Collection` sketch class to group instances of your polygon sketch class into. Note that sketch classes are where you will integrate your geoprocessing services to view reports, but you will not do it at this time. + +## Initialize New Geoprocessing Project + +Start with initializing a new project: + +```sh +cd /workspaces +npx @seasketch/geoprocessing@7.0.0-experimental-7x-docs.132 init 7.0.0-experimental-7x-docs.132 +``` + +Tips: + +- the answers to all of the init questions can be changed later, so don't worry if you don't know the answer. +- [SeaSketch](https://github.com/seasketch/next/blob/master/LICENSE) uses a BSD-3 license (the default choice). You can choose any including `UNLICENSED` meaning proprietary or "All rights reserved" . +- The most common AWS region is `us-west-1` or `us-east-2`. [Choose the region](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) closest to your project. + +Learn more about your projects [structure](../structure.md) + +- [Create Github repo and push](./sampleproject.md#create-git-repo) +- [Link data into workspace](../linkData.md) + +## Create Your First Report + +- [Low-level vector report](./sampleproject.md#reef-report) +- [High-level vector report](./sampleproject.md#benthic-habitat-report) +- [Low-level raster report](./sampleproject.md#seamount-report) +- [High-level raster report](./sampleproject.md#coral-species-report) + +## Build Your Project + +The application `build` proceess packages it for deployment. Specifically it: + +- Checks all the Typescript code to make sure it's valid and types are used properly. +- Transpiles all Typescript to Javascript +- Bundles UI report clients into the `.build-web` directory +- Bundles geoprocessing and preprocessing functions into the `.build` directory. + +To build your application run the following: + +```bash +npm run build +``` + +If the build step fails, you will need to look at the error message and figure out what you need to do. Did it fail in building the functions or the clients? 99% of the time you should be able to catch these errors sooner. If VSCode finds invalid Typescript code, it will warn you with files marked in `red` in the Explorer panel or with red markes and squiggle text in any of the files. + +If you're still not sure try some of the following: + +- Run your smoke tests, see if they pass +- When was the last time your build did succeed? You can be sure the error is caused by a change you made since then either in your project code, by upgrading your geoprocessing library version and not migratin fully, or by changing something on your system. +- You can stash your current changes or commit them to a branch so they are not lost. Then sequentially check out previous commits of the code until you find one that builds properly. Now you know that the next commit cause the build error. + +## Deploy Project To AWS + +[Deploy your project](deploy.md) + +- Setup AWSCLI +- Deploy to AWS + +## Publish Datasources + +Once you have deployed your project to AWS, it will have an S3 bucket just for publishing `datasources`. The name of this bucket is based on the name of your project. If your project is named `my-project` (the name assigned in your package.json file), then the bucket name will be: + +``` +s3://gp-my-project-datasets +``` + +To pubish your data run the following command: + +```bash +npm run publish:data +``` + +It will ask you if you want to publish all datasources, or choose from a list. + +Your datasources will need to have already been imported using `import:data` and exist in the `data/dist` for this to work. + +Note if you don't publish your datasources, then your local smoke tests may work properly, but your geoprocessing functions will throw file not found errors in production. + +## Integrate With SeaSketch + +Once you've deployed your project, you will find a file called `cdk.outputs` which contains the URL to the service manifest for your project. + +```json +"restApiUrl": "https://xxxyyyyzzz.execute-api.us-west-2.amazonaws.com/prod/", +``` + +Now follow the [SeaSketch instructions](https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes) to assign services to each of your sketch classes. + +If your sketch class is a Polygon or other feature type, you should assign it both a preprocessing function (for clipping) and a report client. If you installed the `template-ocean-eez` starter template then your preprocessor is called `clipToOceanEez` and report client is named `MpaTabReport`. + +If your sketch class is a collection then you only need to assign it a report client. Since we build report clients that work on both individual sketches and sketch collections, you can assign the same report client to your collection as you assigned to your individual sketch class(es). + +This should give you the sense that you can create different report clients for different sketch classes within the same project. Or even make reports for sketch collections completely different from reports for individual sketches. + +Create a sketch and run your reports to make sure it all works! + +## Build Up Your Tests + +Test different sketch and collection scenarios. Here's some possibilities: + +- draw a sketch that covers the entire planning area +- draw a tiny sketch +- draw two sketches that overlap and put them in a collection. Make sure overlap is handled properly in reports. + +When you find a sketch that produces an error in your reports in SeaSketch, in most cases you should be able to reproduce it in your local environment. To do this, export the sketch as a GeoJSON file, and put it in your `examples/sketches` directory and run your smoke tests. If the geoprocessing functions all succeed, then load storybook and see if you can produce an error in the browser. + +## Additional Guides + +- [Create a custom preprocessing function](../preprocessing.md) +- [Learn more about geoprocessing functions](../geoprocessing.md) +- [Setup language translation (i18n)](../gip/GIP-1-i18n.md#language-translation-tutorial) + - Language translation takes effort to maintain. It is suggested that you get your reports close to final, in the English language, and then dig in. +- [Worker Functions](../workers.md) +- [Custom Sketch Attributes](./sketchAttributes.md) +- [Extra Function Parameters](./extraParams.md) +- [Multi-Boundary](../multiBoundary/multiBoundary.md) +- [Antimeridian](../antimeridian/Antimeridian.md) + +## What Next + +Still have more questions? [Start a discussion](https://github.com/seasketch/geoprocessing/discussions) on Github. diff --git a/website/docs/tutorials/sampleproject.md b/website/docs/tutorials/sampleproject.md new file mode 100644 index 0000000000..80c92ba804 --- /dev/null +++ b/website/docs/tutorials/sampleproject.md @@ -0,0 +1,2565 @@ +# Create Sample Project + +This tutorial walks through creating a sample geoprocessing project for the Federated States of Micronesia. It demonstrates multiple methods for doing spatial analysis and creating reports, from low-level to high-level, so that you can engage with it at any/all of the levels needed for your project. + +The planning area for this example is defined as extending from the Micronesia baseline (coastline/shoreline) to the outer boundary of the Exclusive Economic Zone (200 nautical miles). + +![EEZ with land](./assets/eez-with-land.jpg) + +This tutorial assumes: + +- Your [system setup](./Tutorials.md) is complete +- Your geoprocessing virtual environment is running (Devcontainer or WSL) +- You have VSCode open in your virtual environment with a terminal pane open + +Have questions along the way? Start a [discussion](https://github.com/seasketch/geoprocessing/discussions) on Github + +## Initialize Geoprocessing Project + +Start the project `init` process, which will download the framework, and collect required project metadata. + +```sh +cd /workspaces +npx @seasketch/geoprocessing@7.0.0-experimental-7x-docs.132 init 7.0.0-experimental-7x-docs.132 +``` + +```text +? Choose a name for your project +fsm-reports-test +? Please provide a short description of this project +Micronesia reports +? Source code repository location +[LEAVE BLANK] +? Your name +[YOUR_NAME] +? Your email +[YOUR_EMAIL] +? Organization name (optional) +Example organization +? What software license would you like to use? +BSD-3-Clause +? What AWS region would you like to deploy functions in? +us-west-1 +? What languages will your reports be published in, other than English? (leave blank for none) +Chuukese +Kosraean +``` + +After pressing Enter, your project will be created and all NodeJS software dependencies installed. If your language is not present, you will be able to add it later. + +Now, re-open VSCode one level deeper, in your project folder:: + +```text +File -> Open Folder +Type /workspaces/fsm-reports-test/ +Press Ctrl-J or Ctrl-backtick to open a new terminal +``` + +## Create Git repo + +Before you continue, let's create a local git repository and commit everything so far as a starting point. + +```bash +git init +git add . +git commit -m "first commit" +git branch -M main +``` + +After this point, you can continue using git commands in the terminal to stage code changes and commit them if that's what you know, or you can use VSCode's [built-in git support](https://code.visualstudio.com/docs/sourcecontrol/overview). + +To learn more about your projects folder structure, visit the [structure](../structure.md) page. + +## Preprocessing + +Preprocessing functions are invoked by the SeaSketch platform, on a user-drawn shape, right after the user finishes drawing it. It's a specialized function that validates a drawn shape and potentially modifies it, such as to remove portions of the shape outside the planning boundary. This "clipping" of the shape is useful in that it allows a user to overdraw beyond the planning boundary and it will be clipped right to the edge of that boundary. + +Here is an example of a preprocessor clipping a user drawn polygon to erase any part overlapping with land + +| Before Clip | After Clip | +| ----------------------------------------------------- | -------------------------------------------------- | +| ![Before](./assets/preprocessing-before.jpg "Before") | ![After](./assets/preprocessing-after.jpg "After") | + +In the `src/functions` directory you will find four preprocessing functions that come with every project, and they are further configureable to meet your needs: + +- `validatePolygon` - verifies shape is not self-crossing, is at least 500 square meters in size, and no larger than 1 million square kilometers. +- `clipToLand` - clips the shape to just the portion on land, as defined by OpenStreeMap land polygons. Includes validatePolygon. +- `clipToOcean` - clips the shape to remove the portion on land, as defined by OpenStreetMap land polygons. Includes validatePolygon. +- `clipToOceanEez` - clips the shape to keep the portion within the boundary from the coastline to the outer boundary of the EEZ. Includes validatePolygon. + +### Testing + +Each preprocessing function has its own unit test and smoke test file. For example: + +- Unit: `src/functions/validatePolygon.test.ts` +- Smoke: `src/functions/validatePolygonSmoke.test.ts` + +**Unit tests** ensure the preprocessor produces exact output for very specific input features and configuration, and throws errors properly. + +**Smoke tests** are about ensuring the preprocessor behaves properly for your project location, and that its results "look right" for a variety of input features. It does this by loading example shapes from the project `examples/features` directory. It then runs the preprocessing function on the examples, makes sure they produce output, and saves them to `examples/output`. + +To test your preprocessing functions, we need to create example features within the extent of our Micronesian planning area. To do this, run the following script: + +```bash +npx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" +npx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon2.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" +``` + +This will output an example Feature and an example FeatureCollection to `examples/features`. + +Now run the tests: + +```bash +npm test +``` + +You can now look at the geojson output files in the `examples/output` directory, including visually by opening them in QGIS or pasting the JSON into geojson.io. This is the best way to visually verify the preprocessor worked as expected. + +This is a good checkpoint to commit your latest changes to Github. + +To learn more about preprocessing, check out the [guide](../preprocessing.md) + +## Simple Report + +Your new project comes with a simple report that calculates the area of a sketch or sketch collection and presents it in a human readable format. Let's look at the pieces that go into this report. + +![Simple Card View](./assets/simple-card-view.jpg) + +### simpleFunction + +The area calculation is done within a geoprocessing function in `src/functions/simpleFunction.ts`. + +Geoprocessing functions are invoked by a report client, as soon as its loaded in the browser by SeaSketch. It's a specialized function that takes a Sketch polygon or collection of Sketch polygons, performs some analysis, and returns the result to be displayed in the report client. + +Open `src/functions/simpleFunction.ts` and you will notice this function defines a custom result payload called `SimpleResults`, which in this case is a Javascript object with an `area` property containing a number value. + +```typescript +export interface SimpleResults { + /** area of sketch within geography in square meters */ + area: number; +} +``` + +`simpleFunction` starts off with the basic signature of a geoprocessing function. It accepts a `sketch` parameter that is either a single `Sketch` polygon or a `SketchCollection` with multiple Sketch polygons. Unless your planning project only requires users to design single sketches and not collections, your geoprocessing function must be able to handle both. + +```typescript +async function simpleFunction( + sketch: + | Sketch + | SketchCollection, +): Promise { +``` + +The function then performs its analysis and returns the result. + +```typescript +// Add analysis code +const sketchArea = area(sketch); + +// Custom return type +return { + area: sketchArea, +}; +``` + +Below that, a new `GeoprocessingHandler` is instantiated, with simpleFunction passed into it. Behind the scenes, this wraps simpleFunction in an AWS Lambda handler function, which once deployed to AWS, allows the geoprocessing function to be invoked using an API call, by a report client running in a web browser. + +```typescript +export default new GeoprocessingHandler(simpleFunction, { + title: "simpleFunction", + description: "Function description", + timeout: 60, // seconds + memory: 1024, // megabytes + executionMode: "async", +}); +``` + +`GeoprocessingHandler` requires a `title` and `description`, which uniquely identifies the function that will be published by your project. It also accepts some additional parameters defining what resources the Lamda should have, and its behavior: + +- `timeout`: how many seconds the Lambda will run before it times out in error. +- `memory`: memory allocated to the Lambda, can go up to 10,240 MB. Number of processors increase with memory size automatically. +- `executionMode`: determines how the report client waits for geoprocessing function results, defaults to async. Sync - wait with connection open for immediate results, Async - wait for web socket message that results are ready, then fetch. Sync should only be used for very fast geoprocessing functions (1-2 seconds max). Think of it as a performance optimization. + +You can change all these parameter values to suit your needs, but the default values are suitable for now. + +`simpleFunction` is already registered as a geoprocessing function in `project/geoprocessing.json`. + +Now let's look at the browser report client that invokes this function. + +### SimpleReport + +A report client is a top-level React component for rendering a report in the users web browser. Report clients are located in the `src/clients` directory and are responsible for the layout of one or more `Card` components. Cards are able to invoke geoprocessing functions and display their results. + +The two report clients that come with your project are: + +- `SimpleReport.tsx` - simple one page report client containing a SketchAttributesCard and a SimpleCard. +- `TabReport.tsx` - more complex multi-page report layout controlled by a tab switcher component, so that only one page is in view at a time. + +Both these report clients are already registered in `project/geoprocessing.json`. To start, let's focus on `SimpleReport` and `SimpleCard`. + +```jsx +export const SimpleReport = () => { + return ( + + + + + ); +}; +``` + +SimpleReport renders two cards, `SimpleCard` and `SketchAttributesCard`, wrapping them in a languge `Translator` component (you will learn more about this later). + +`SketchAttributes` card is a card component that displays the properties of the users Sketch. No geoprocessing function is needed to do its work. + +`SimpleCard` is a card component that invokes simpleFunction and displays its results. Let's look at it closer. + +The first thing to notice is that SimpleCard renders a `ResultsCard` component. Behind the scenes ResultsCard invokes the geoprocessing function with the `functionName` provided (simpleFunction). Keep in mind that in a production environment the ResultsCard is rendered in your web browser and the geoprocessing function is a Lambda function in Amazon's cloud invoked via an API call. + +```typescript + +``` + +ResultsCard then contains a render function that is provided with the results. + +```typescript +{ + (data: SimpleResults) => { + const areaSqKm = data.area / 1_000_000; + const areaString = roundDecimalFormat(areaSqKm, 0, { + keepSmallValues: true, + }); + const sketchStr = isCollection ? t("sketch collection") : t("sketch"); + + return ( + <> +

+ + This {{ sketchStr }} is {{ areaString }} square kilometers. + +

+ + ); + }; +} +``` + +This render function takes an input parameter `data` that has the same type (`SimpleResults`) as the return type of `simpleFunction`. This gives you fully typed access to your report results. + +The code in this render function is the heart of each report card. This particular card takes the `area` value it is given in square meters, and converts it to square kilometers. It then rounds it to a whole number, and formats it to make it more readable. Also notice that it renders a slightly different message depending on whether it is a single sketch or a sketch collection being reported on. + +### Language Translation + +The last thing to notice is that SimpleCard contains a lot of boilerplate for language translation of its strings (using [`react-i18next`](https://react.i18next.com/)). If your reports need to be multi-lingual you will need to to use these, otherwise you can drop them. + +Language translation is a multi-part process: + +- First, a combination of `useTranslation`, `t` function, and `Trans` components are used to establish which strings in your report client and components should be translated. +- Next, those translateable strings are extracted using the `extract:translation` command, and output to `src/i18n/lang/en/translation.json`. The strings extracted for SimpleCard are: + +```text +{ + "sketch": "sketch", + "sketch collection": "sketch collection", + "SimpleCard sketch size message": "This {{sketchStr}} is {{areaString}} square kilometers.", +} +``` + +- The English translation file is then translated to the other needed languages and put into their own translation files +- The `Translator` component in your report client is then responsible for inspecting the users language at runtime in the browser and swapping the English strings for strings in the appropriate language. + +This process is covered in more detail in a separate doc. + +### Generate Examples + +With a working geoprocessing function and report client already in place, you're ready to generate example sketches for testing them. We'll use the same `genRandomPolygon` script as before. But let's look closer at how we figured out the bounding box extent of the Micronesian planning area. First, use ogrinfo to inspect the Micronesia EEZ polygon data layer in your data package. + +```bash +ogrinfo -so -json data/src/eez_withland_mr.fgb +``` + +Deep in its output you will see a `geometryFields` property, which contains the bounding box extent of the EEZ feature. Use the `jq` utility to extract this extent: + +```bash +ogrinfo -so -json data/src/eez_withland_mr.fgb | jq -c .layers[0].geometryFields[0].extent +[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298] +``` + +This will output an array with the extent of the EEZ. This is just one of multiple possible methods to get this extent. You are welcome to use the method that works best for you. + +Now run the genRandomPolygon script with this extent. The following examples will create a Sketch polygon, and then a SketchCollection containing 10 Sketch polygons. + +```bash +npx tsx scripts/genRandomPolygon.ts --outDir examples/sketches --filename sketch1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" --bboxShrinkFactor 5 --sketch +npx tsx scripts/genRandomPolygon.ts --outDir examples/sketches --filename sketchCollection1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" --bboxShrinkFactor 5 --sketch --numFeatures 10 +``` + +The `--bboxShrinkFactor` argument used shrinks the height and width of the given bbox by a factor of 5, and then generates random features that are within that reduced bbox. A suitable shrink factor value was discovered through trial and error. Simply visualize the resulting json file in QGIS or other software and find a value that produces polygons that are completely within the planning area polygon. (see image below). + +![EEZ bbox](./assets/eez-bbox.jpg) +Image: cluster of 10 random sketches (in orange) within Micronesia EEZ + +Learn more about the options for `genRandomPolygon` by running: + +``` +npx tsx scripts/genRandomPolygon.ts --help +``` + +### Run test suite + +Now that you have example features and sketches, you can test `simpleFunction`. Run the test suite now: + +```bash +npm test +``` + +- Using `simpleFunctionSmoke.test.ts`, simpleFunction will be run against all of the polygon Sketches in `examples/sketches`. +- The results of all smokes tests are output to the `examples/output` directory. +- You can inspect the output files, and see the calculated area values for each sketch input. + +Commit the output files to your git repository at this time. + +You can make changes to simpleFunction, then rerun tests to regenerate them at any time, and delete any that are stale and no longer needed. For advanced use, check out the [testing](../Testing.md) guide. + +### Storybook + +Storybook is used to view your reports. + +```bash +npm run storybook +``` + +This will: + +- Generate a story for every combination of report client registered in `project/geoprocessing.json` and sketch present in `examples/sketches`. +- Load all of the smoke test output for every sketch (to load in stories instead of running geoprocessing functions) +- Start the storybook server and give you the URL. + +Open the storybook URL in your browser and click through the stories. + +![Simple Card View](./assets/simple-card-view.jpg) + +A powerful feature of Storybook is that when you save edits to your report client or component code, storybook will refresh the browser automatically with the changes. This lets you develop your reports and debug them more quickly. + +There are a couple of situations that will cause you to need to stop your storybook server (Ctrl-C) and then restart it to pick up the changes. + +- you add more sketch examples to your `examples/sketch` directory +- you rerun smoke tests and generate new test output + +Learn more in the [storybook guide](./storybook.md). + +### Simple Function Modifications + +Let's enhance your simple geoprocessing function to calculate more detailed information when the report is run on a sketch collection. It should calculate the area of the entire collection, and the area of each child sketch in the collection. + +First modify SimpleResults with an additional property `childSketchAreas` that can store this information: + +```typescript +export interface SimpleResults { + /** area of reef within sketch in square meters */ + area: number; + childSketchAreas: { + /** Name of the sketch */ + name: string; + /** Area of the sketch in square meters */ + area: number; + }[]; +} +``` + +Then calculate the additional values and return them in the result payload: + +```typescript +// Add analysis code +const sketchArea = area(sketch); + +let childSketchAreas: SimpleResults["childSketchAreas"] = []; +if (sketch.properties.isCollection) { + childSketchAreas = toSketchArray(sketch).map((sketch) => ({ + name: sketch.properties.name, + area: area(sketch), + })); +} + +// Custom return type +return { + area: sketchArea, + childSketchAreas, +}; +``` + +Here's what the final `simpleFunction` code should look like: + +
+src/functions/simpleFunction.ts + +```typescript +import { + Sketch, + SketchCollection, + Polygon, + MultiPolygon, + GeoprocessingHandler, + toSketchArray, +} from "@seasketch/geoprocessing"; +import { area } from "@turf/turf"; + +export interface SimpleResults { + /** area of reef within sketch in square meters */ + area: number; + childSketchAreas: { + /** Name of the sketch */ + name: string; + /** Area of the sketch in square meters */ + area: number; + }[]; +} + +/** + * Simple geoprocessing function with custom result payload + */ +async function simpleFunction( + sketch: + | Sketch + | SketchCollection, +): Promise { + // Add analysis code + const sketchArea = area(sketch); + + let childSketchAreas: SimpleResults["childSketchAreas"] = []; + if (sketch.properties.isCollection) { + childSketchAreas = toSketchArray(sketch).map((sketch) => ({ + name: sketch.properties.name, + area: area(sketch), + })); + } + + // Custom return type + return { + area: sketchArea, + childSketchAreas, + }; +} + +export default new GeoprocessingHandler(simpleFunction, { + title: "simpleFunction", + description: "Function description", + timeout: 60, // seconds + memory: 1024, // megabytes + executionMode: "async", +}); +``` + +
+ +Run your tests again to generate the new smoke test output: + +```bash +npm run test +``` + +### Simple Report Modification + +Now let's modify SimpleReportCard to display the new data. You will add a new `Collapse` section with a `Table` component that lists out the sketch areas by name. + +```jsx +

+ + This {{ sketchStr }} is {{ areaString }} km². + +

+{isCollection && ( + + + roundDecimalFormat(row.area / 1_000_000, 0, { + keepSmallValues: true, + }), + }, + ]} + /> + +)} +``` + +Here's what the final SimpleCard code should look like: + +
+ src/components/SimpleCard.tsx + +```jsx +import React from "react"; +import { Trans, useTranslation } from "react-i18next"; +import { + Collapse, + ResultsCard, + Table, + useSketchProperties, +} from "@seasketch/geoprocessing/client-ui"; +// Import SimpleResults to type-check data access in ResultsCard render function +import { SimpleResults } from "../functions/simpleFunction.js"; +import { roundDecimalFormat } from "@seasketch/geoprocessing/client-core"; + +export const SimpleCard = () => { + const { t } = useTranslation(); + const [{ isCollection }] = useSketchProperties(); + const titleTrans = t("SimpleCard title", "Simple Report"); + return ( + <> + + {(data: SimpleResults) => { + const areaSqKm = data.area / 1_000_000; + const areaString = roundDecimalFormat(areaSqKm, 0, { + keepSmallValues: true, + }); + const sketchStr = isCollection ? t("sketch collection") : t("sketch"); + + return ( + <> +

+ + This {{ sketchStr }} is {{ areaString }} km². + +

+ {isCollection && ( + +
+ roundDecimalFormat(row.area / 1_000_000, 0, { + keepSmallValues: true, + }), + }, + ]} + /> + + )} + + ); + }} + + + ); +}; +``` + + + +If your storybook is still running from last time, you will need to restart it to pick up the new smoke test output. + +```bash +Ctrl-C +npm run storybook +``` + +Your updated report should have a new collapsible table, that when expanded looks like the following: +![Simple Card with table](./assets/simple-card-table.jpg) + +### First Project Build + +Now that you have confirmed your function is working properly, and your report client displays properly for a variety of example sketches, you are ready to do your first build. The application `build` proceess packages it for deployment. Specifically it: + +- Checks all the Typescript code to make sure it's valid and types are used properly. +- Transpiles all Typescript to Javascript +- Bundles UI report clients into the `.build-web` directory +- Bundles geoprocessing and preprocessing functions into the `.build` directory. + +To build your application run the following: + +```bash +npm run build +``` + +Once your build is successful, you should stage and commit all your changes to git. + +## Reef Report + +Next you will create a coral reef report that uses the reef extent dataset. Here is an image of it displayed in QGIS. Notice that the coral is entirely in shallow water around the island coastline and atolls. + +![Reef Extent](./assets/reef-extent.jpg) + +### Import Data + +To access this datasource, first download a data package prepared for FSM to your project space and unzip it: + +```bash +wget -P data/src https://github.com/user-attachments/files/18030075/FSM_MSP_Data_Example_v2.zip +unzip data/src/FSM_MSP_Data_Example_v2.zip -d data/src +rm data/src/FSM_MSP_Data_Example_v2.zip +``` + +Now import the datasource to your project. + +```bash +npm run import:data +``` + +```text +? Type of data? +Vector +? Enter path to src file (with filename) +data/src/reefextent.fgb +? Select layer to import +reefextent +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename +reefextent +? Should multi-part geometries be split into single-part geometries? +Yes +? (Optional) additional formats to create (besides fgb) +[Press enter to skip] +? Select feature properties that you want to group metrics by +[Press enter to skip] +? Select additional feature properties to keep in final datasource +[Press enter to skip] +? These formats are automatically created: fgb. Select any additional formats you want created +[Press enter to skip] +? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource) +Yes +``` + +The import process will: + +- reproject your data to the WGS84 reference system, if not already (required by Turf.JS) +- split any features that cross the 180 degree [antimeridian](../antimeridian/Antimeridian.md) +- reduce the source dataset down to only the necessary attributes (saving network bandwidth later) +- output a new file in the cloud-optimized flatgeobuf format to the `data/dist` directory. +- register the datasource in `project/datasources.json`, along with additional metadata. This allows you to: + - quickly access project datasources in your reports using the `projectClient` (more on this later) + - quickly reimport datasources using the `reimport:data` command, without having to answer questions again. + +Once the import is finished, you are ready to use your datasources for `local` report development. You can add, edit, or delete records in datasources.json manually to meet your need as long as the records meet the expected [schema](../concepts/Concepts.md#datasources). + +### Precalc Data + +Next, you will create a standalone script to calculate the total area of the polygons in the reef extent datasource for use in the report. By doing this calculation ahead of time, you won't need to do it every time your geoprocessing function runs. There is an automated way of precalculating the area of a datasource, but the purpose of this is to teach you a workflow for doing it on your own. + +Create a new file with the following code and save it to `scripts/coralReefPrecalc.ts`: + +```typescript +// Run the following command from the project root directory +// npx tsx scripts/coralReefPrecalc.ts + +import { area } from "@turf/turf"; +import { geojson } from "flatgeobuf"; +import { readFileSync } from "fs"; +import fs from "fs-extra"; + +// Fetch all reef features and calculate total area +const buffer = readFileSync( + `${import.meta.dirname}/../data/dist/reefextent.fgb`, +); +const reefFeatures = geojson.deserialize(new Uint8Array(buffer)); +const totalArea = area(reefFeatures); + +const reefPrecalc = { + totalAreaSqMeters: totalArea, +}; + +fs.ensureDirSync(`${import.meta.dirname}/../data/precalc`); +fs.writeJsonSync( + `${import.meta.dirname}/../data/precalc/reefextent.json`, + reefPrecalc, +); +``` + +Now run it. Your shell needs to be in the root directory of your project to run this Typescript file directly using `npx`: + +```bash +npx tsx scripts/coralReefPrecalc.ts +``` + +The script fetches all features from the reef extent flatgeobuf file, calculates their total area and writes it to `data/precalc/reefextent.json`. + +```text +{ + "totalArea": 716100906.2570591 +} +``` + +We are going to use this precalculated value in a geoprocessing function in the next step. + +### Create Report + +To create a blank report ready to build on, run the following: + +```bash +npm run create:report +``` + +```text +? Type of report to create +Blank report - empty report ready to build from scratch + +? Describe what this reports geoprocessing function will calculate (e.g. Calculate sketch overlap with boundary polygons) +Calculate sketch overlap with reef extent datasource + +? Title for this report, in camelCase +coralReef + +✔ Created coralReef report +✔ Registered report assets in project/geoprocessing.json + +Geoprocessing function: src/functions/coralReef.ts +Smoke test: src/functions/coralReefSmoke.test.ts +Report component: src/components/CoralReefCard.tsx +Story generator: src/components/CoralReefCard.example-stories.ts + +Next Steps: + * 'npm test' to run smoke tests against your new geoprocessing function + * 'npm run storybook' to view your new report with smoke test output + * Add to a top-level report client or page when ready +``` + +Open `src/functions/coralReef.ts`. + +You will now update this code to answer the following questions: + +- What percentage of all coral reef is within the current sketch polygon (or sketch collection polygons)? +- If it is a sketch collection, does it meet the planning objective of protecting 20% of all coral reef? + +Replace the existing code with the following: + +
+src/functions/coralReef.ts + +```typescript +import { + Sketch, + SketchCollection, + Polygon, + MultiPolygon, + GeoprocessingHandler, + getFeaturesForSketchBBoxes, + toSketchArray, + clipMultiMerge, + isSketchCollection, + clip, + Feature, +} from "@seasketch/geoprocessing"; +import project from "../../project/projectClient.js"; +import { area, featureCollection } from "@turf/turf"; +import reefPrecalc from "../../data/precalc/reefextent.json"; + +export interface CoralReefResults { + /** area of all reef extent polygons in square meters */ + totalArea: number; + /** area of reef extent within sketch or sketch collection in square meters */ + sketchArea: number; + childSketchAreas: { + /** Name of the sketch */ + name: string; + /** Area of reef extent within child sketch in square meters */ + area: number | null; + }[]; +} + +/** + * Simple geoprocessing function with custom result payload + */ +export async function coralReef( + sketch: + | Sketch + | SketchCollection, +): Promise { + // Load just the reef features that intersect with the sketch bounding box + // or in case of a sketch collection, the child sketch bounding boxes + const ds = project.getInternalVectorDatasourceById("reefextent"); + const url = project.getDatasourceUrl(ds); + const reefFeatures = await getFeaturesForSketchBBoxes(sketch, url); + + // Add analysis code + + // If collection, calculate area of each sketches intersection with reef + let childSketchAreas: CoralReefResults["childSketchAreas"] = []; + if (sketch.properties.isCollection) { + childSketchAreas = toSketchArray(sketch).map((sketch) => { + const sketchReefOverlap = clipMultiMerge( + sketch, + featureCollection(reefFeatures), + "intersection", + ); + return { + name: sketch.properties.name, + area: sketchReefOverlap ? area(sketchReefOverlap) : 0, + }; + }); + } + + // Calculate area of overall sketch intersection with reef + const sketchArea = (() => { + // Figure out feature to clip + let clipFeature: Feature | null; + if (reefFeatures.length === 0) { + return 0; + } else if (isSketchCollection(sketch)) { + // union sketches to remove overlap and avoid double count + clipFeature = clip(sketch, "union"); + if (!clipFeature) return 0; + } else { + clipFeature = sketch; + } + //Merge reefFeatures into a single multipolygon, then intersect + const sketchReefOverlap = clipMultiMerge( + clipFeature, + featureCollection(reefFeatures), + "intersection", + ); + return sketchReefOverlap ? area(sketchReefOverlap) : 0; + })(); + + // Custom return type + return { + totalArea: reefPrecalc.totalAreaSqMeters, + sketchArea: sketchArea, + childSketchAreas, + }; +} + +export default new GeoprocessingHandler(coralReef, { + title: "coralReef", + description: "calculate sketch overlap with reef extent datasource", + timeout: 60, // seconds + memory: 1024, // megabytes + executionMode: "async", +}); +``` + +
+ +Notice that the code imports the totalArea value you precalculated and inserts it into the result payload, avoiding the need to recalculate it each time. + +```typescript +import reefPrecalc from "../../data/precalc/reefextent.json"; + +reefPrecalc.totalArea; +``` + +Then it fetches only the reef features whose bounding box intersects with the sketch bounding box, or in case of a sketch collection, that intersects with each of its child sketch bounding boxes. This is more efficient than fetching the entire reef dataset, saving time and network bandwidth. + +```typescript +// Load just the reef features that intersect with the sketch bounding box +// or in case of a sketch collection, the child sketch bounding boxes +const ds = project.getInternalVectorDatasourceById("reefextent"); +const url = project.getDatasourceUrl(ds); +const reefFeatures = await getFeaturesForSketchBBoxes(sketch, url); +``` + +Next, if the sketch is a collection, it calculates how much coral reef overlaps with each individual sketch. To do this, it needs to figure out the areas where the sketches and coral reef `intersect`. This is calculated using the `clipMultiMerge` function. It is essential that this function is used because it merges the reefFeatures collection into a single multipolygon before intersecting it with the sketch. If you were to use the `clip` function you would need to loop through each reef feature and clip the sketch to it. + +```typescript +// If collection, calculate area of each sketches intersection with reef +let childSketchAreas: CoralReefResults["childSketchAreas"] = []; +if (sketch.properties.isCollection) { + childSketchAreas = toSketchArray(sketch).map((sketch) => { + const sketchReefOverlap = clipMultiMerge( + sketch, + featureCollection(reefFeatures), + "intersection", + ); + return { + name: sketch.properties.name, + area: sketchReefOverlap ? area(sketchReefOverlap) : 0, + }; + }); +} +``` + +Finally, it calculates how much coral reef overlaps with the entire sketch/collection. + +- If there is no overlap between the reef and sketch, then it simply returns zero. +- If it's a sketch collection it first performs a `union` operation that merges all of the sketches into a single Multipolygon, dissolving any overlap between the sketches so that area is not double counted. +- If it's a single sketch polygon then it just calculates its area and returns it. + +```typescript +// Calculate area of overall sketch intersection with reef +const sketchArea = (() => { + // Figure out feature to clip + let clipFeature: Feature | null; + if (reefFeatures.length === 0) { + return 0; + } else if (isSketchCollection(sketch)) { + // union sketches to remove overlap and avoid double count + clipFeature = clip(sketch, "union"); + if (!clipFeature) return 0; + } else { + clipFeature = sketch; + } + //Merge reefFeatures into a single multipolygon, then intersect + const sketchReefOverlap = clipMultiMerge( + clipFeature, + featureCollection(reefFeatures), + "intersection", + ); + return sketchReefOverlap ? area(sketchReefOverlap) : 0; +})(); + +// Custom return type +return { + totalArea: reefPrecalc.totalAreaSqMeters, + sketchArea: sketchArea, + childSketchAreas, +}; +``` + +Now run tests to generate updated output for each of the sample sketches: + +```bash +npm run test +``` + +Confirm that the output looks as expected. + +
+Example sketch collection output + +```text +{ + "totalArea": 716100906.2570591, + "sketchArea": 367734.86730626615, + "childSketchAreas": [ + { + "name": "sketchCollection1-1", + "area": 428611581.5348215 + }, + { + "name": "sketchCollection1-2", + "area": 258701691.8012635 + }, + { + "name": "sketchCollection1-3", + "area": 599831752.2377243 + }, + { + "name": "sketchCollection1-4", + "area": 372585470.74404347 + }, + { + "name": "sketchCollection1-5", + "area": 562781719.588172 + }, + { + "name": "sketchCollection1-6", + "area": 528237794.83984125 + }, + { + "name": "sketchCollection1-7", + "area": 253970548.59694752 + }, + { + "name": "sketchCollection1-8", + "area": 376674659.1741572 + }, + { + "name": "sketchCollection1-9", + "area": 657788539.6501052 + }, + { + "name": "sketchCollection1-10", + "area": 712233449.0549812 + } + ] +} +``` + +
+ +Now open src/components/CoralReefCard.tsx. + +You will now update this code to: + +- Display the % of total coral reef captured within this sketch +- If it is a sketch collection + - Indicate whether the objective of protecting 20% of all coral reef has been met. + - Display a collapsible area with a breakdown of the area and % area of coral reef within each individual sketch in the collection. + +Replace the existing code with the following: + +
+src/components/CoralReefCard.tsx + +```javascript +import React from "react"; +import { Trans, useTranslation } from "react-i18next"; +import { + ResultsCard, + useSketchProperties, + HorizontalStackedBar, + Collapse, + Table, + ObjectiveStatus, + VerticalSpacer, +} from "@seasketch/geoprocessing/client-ui"; +import { + percentWithEdge, + roundDecimalFormat, + squareMeterToKilometer, +} from "@seasketch/geoprocessing/client-core"; + +// Import CoralReefResults to type-check data access in ResultsCard render function +import { CoralReefResults } from "../functions/coralReef.js"; + +export const CoralReefCard = () => { + const { t } = useTranslation(); + const [{ isCollection }] = useSketchProperties(); + const titleTrans = t("CoralReefCard title", "Coral Reef"); + return ( + <> + + {(data: CoralReefResults) => { + const target = 0.2; // 20% + const reefPerc = data.sketchArea / data.totalArea; + const reefPercString = percentWithEdge(reefPerc); + const targetPercString = percentWithEdge(target); + + const meetsObjective = reefPerc >= target; + + // Adjust values for chart to be in range 0-100 + const chartRows = [[[reefPerc * 100]]]; + + const sketchTypeStr = isCollection + ? t("sketch collection") + : t("sketch"); + + const meetsOrNotElement = meetsObjective ? ( + + This {{ sketchTypeStr }} meets the objective of protecting{" "} + {{ targetPercString }} of coral reef + + ) : ( + + This {{ sketchTypeStr }} does not meet the objective of protecting{" "} + {{ targetPercString }} of coral reef + + ); + + return ( + <> +

+ + {{ reefPercString }} of all Micronesia coral reef is within + this {{ sketchTypeStr }}. + +

+ {isCollection && ( + + )} + + + percentWithEdge(value / 100)} + max={4} + target={20} + targetValueFormatter={(targetValue) => ( + + Target {{ targetValue: percentWithEdge(targetValue / 100) }} + + )} + rowConfigs={[ + { + title: t("Total coral reef"), + }, + ]} + blockGroupNames={[]} + blockGroupStyles={[{ backgroundColor: "#64c2a6" }]} + /> + {isCollection && ( + +
+ roundDecimalFormat(squareMeterToKilometer(row.area)), + }, + { + Header: t("% Reef within Sketch"), + accessor: (row: any) => + percentWithEdge(row.area / data.totalArea), + }, + ]} + /> + + )} + + ); + }} + + + ); +}; +``` + + + +There are multiple things worth noticing: + +- `squareMeterToKilometer` conversion helper function is used +- `percentWithEdge` and `roundDecimalFormat` helper functions are used to format values to be more human readable. Will use locale settings of the users browser when formatting decimal and percent. +- `HorizontalStackedBar` and `ObjectiveStatus` core UI components present information in a more visually interesting way that can be reused across reports. See core [storybook](/storybook) for more examples of their use. + +Now, start storybook and view the result: + +```bash +npm run storybook +``` + +When viewing a sketch example, it should display the following: + +![CoralReefCard sketch view](./assets/coral-reef-card-sketch.jpg) + +Keep in mind your sketch polygon examples are randomly generated so your numbers will vary thw ones shown. + +And when viewing a sketch collection example, it should display the additional "Show By Sketch" list: + +![CoralReefCard collection view](./assets/coral-reef-card-collection.jpg) + +### Add to Tab Report + +Now add the CoralReefCard to a new page in your top-level TabReport. + +Open `src/clients/TabReport.tsx` and replace the code with the following: + +
+src/clients/TabReport.tsx + +```javascript +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +import { + SegmentControl, + ReportPage, + SketchAttributesCard, +} from "@seasketch/geoprocessing/client-ui"; +import Translator from "../components/TranslatorAsync.js"; +import { SimpleCard } from "../components/SimpleCard.js"; +import { CoralReefCard } from "../components/CoralReefCard.js"; + +const BaseReport = () => { + const { t } = useTranslation(); + const segments = [ + { id: "OVERVIEW", label: t("Overview") }, + { id: "BIOLOGICAL", label: t("Biological") }, + ]; + const [tab, setTab] = useState < string > "OVERVIEW"; + + return ( + <> +
+ setTab(segment)} + segments={segments} + /> +
+ + + + ); +}; + +// Named export loaded by storybook +export const TabReport = () => { + return ( + + + + ); +}; + +// Default export lazy-loaded by production ReportApp +export default TabReport; +``` + +
+ +Storybook should update on save and display the following: + +![CoralReefCard add to page](./assets/coral-reef-card-add-to-page.jpg) + +You should be able to click the tabs and switch between report pages. + +## Benthic Habitat Report + +Next you will create a report summarizing sketch overlap with 3 classes of rocky substrate (rock, rubble, sand) in the benthic zone (seabottom). Here is an image of it displayed in QGIS within the Micronesian EEZ boundary. Similar to the coral reefs, notice that these 3 types of rocky seabottom are mostly in shallower water near the islands and atolls. + +![Benthic habitat map](./assets/benthic-habitat-map.jpg) + +### Import Data + +First, import the data. + +```bash +npm run import:data +``` + +```text +? Type of data? +Vector +? Enter path to src file (with filename) +data/src/benthic-rock.fgb +? Select layer to import +benthic-rock +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename +benthic-rock +? Should multi-part geometries be split into single-part geometries? +Yes +? (Optional) additional formats to create (besides fgb) +[Press Enter to skip] +? Select feature properties that you want to group metrics by +class +? Select additional feature properties to keep in final datasource +[Press Enter to skip] + +Adding benthic-rock record in project/datasources.json file +``` + +### Precalc Data + +Before you can use your benthic report, you need to precalculate the area of your benthic polygons. Rather than writing your own script for this, the `precalc:data` command is available that will inspect your vector datasources and precalculate basic summary metrics (total feature area, total feature count, etc). Let's look at the datasource record generated for our benthic-rock datasource to understand what precalc will do. + +
+project/datasources.json + +```typescript +{ + "src": "data/src/benthic-rock.fgb", + "layerName": "benthic-rock", + "geo_type": "vector", + "datasourceId": "benthic-rock", + "formats": [ + "fgb" + ], + "classKeys": [ + "class" + ], + "created": "2024-11-28T05:58:26.284Z", + "lastUpdated": "2024-11-28T05:58:26.284Z", + "propertiesToKeep": [ + "class" + ], + "explodeMulti": true, + "precalc": true +} +``` + +
+ +You'll notice that the `precalc` property is set to true. That means that it is made available for precalculation. You can disable precalculation for any datasource you want at any time by setting it to `false`. + +You'll also notice that the `class` attribute is configured under `classKeys`. + +```json +"classKeys": [ + "class" +], +``` + +This is because when importing your datasource, when asked to select feature properties that you want to group metrics by, you selected `class`. If present, the precalc command will use this to precalculate metrics by each unique value present in the dataset for the `class` attribute. If not present, you can simply add it now and save your file. + +You're now ready to precalculate your metrics. + +```bash +npm run precalc:data + +? Do you want to precalculate only a subset? +No, just precalculate everything (may take a while) + +... + +2 datasource/geography combinations precalculated successfully +2 datasource/geography combinations skipped due to precalc disabled +``` + +You should now have precalculated `area` and `count` metrics for both reefextent and benthic-rock datasources. Let's look closer at the output. + +
+project/precalc.json + +```json +[ + { + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-Rock", + "sketchId": null, + "groupId": null, + "value": 16604057.106034255 + }, + { + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-Rubble", + "sketchId": null, + "groupId": null, + "value": 14568314.003883593 + }, + { + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-Sand", + "sketchId": null, + "groupId": null, + "value": 41378302.21403051 + }, + { + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-total", + "sketchId": null, + "groupId": null, + "value": 72550673.32394843 + }, + { + "geographyId": "world", + "metricId": "area", + "classId": "reefextent-total", + "sketchId": null, + "groupId": null, + "value": 716231422.607066 + }, + { + "geographyId": "world", + "metricId": "count", + "classId": "benthic-rock-Rock", + "sketchId": null, + "groupId": null, + "value": 2712 + }, + { + "geographyId": "world", + "metricId": "count", + "classId": "benthic-rock-Rubble", + "sketchId": null, + "groupId": null, + "value": 2002 + }, + { + "geographyId": "world", + "metricId": "count", + "classId": "benthic-rock-Sand", + "sketchId": null, + "groupId": null, + "value": 2658 + }, + { + "geographyId": "world", + "metricId": "count", + "classId": "benthic-rock-total", + "sketchId": null, + "groupId": null, + "value": 7372 + }, + { + "geographyId": "world", + "metricId": "count", + "classId": "reefextent-total", + "sketchId": null, + "groupId": null, + "value": 14406 + } +] +``` + +
+ +Within this array of precalc metric records you will see four that represent the total area of all benthic-rock polygons and the total area for each of the 3 benthic rock classes: + +```json +{ + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-total", + "sketchId": null, + "groupId": null, + "value": 72550673.32394843 +}, +{ + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-Rock", + "sketchId": null, + "groupId": null, + "value": 16604057.106034255 +}, +{ + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-Rubble", + "sketchId": null, + "groupId": null, + "value": 14568314.003883593 +}, +{ + "geographyId": "world", + "metricId": "area", + "classId": "benthic-rock-Sand", + "sketchId": null, + "groupId": null, + "value": 41378302.21403051 +} +``` + +These will get loaded and used by the BenthicReefCard as the denominator value when calculating percent sketch overlap. + +:::note + +If at any point the process of using `import:data`, `precalc:data` or the `projectClient` don't meet your needs, you are welcome to create your own separate workflow. As long as datasources get to the `data/dist` directory for publishing, in the format (fgb, cog) and projection required (EPSG 4326 for vector, EPSG 6933 for raster) you can create your own solution. + +::: + +### World Geography + +You might have noticed in the precalculated metrics that they are assigned a geographyId of `world`. `Geographies` are a higher level feature of the framework that define polygon boundaries that serve a specfic purpose in your project. The main use case is to define planning boundaries for your project, if you have them. + +The default Geography for a new project is the `world` geography, which establishes the entire world as your planning boundary. This is sufficient for your needs until you have a more specific planning boundary that you want to work with. For example you can clip your sketches and your data to a geography in order to report metrics for a specific geography. Since your data is already pre-clipped to the planning area, and there is only one planning area, you don't need to do anything more with this feature. You can just leave it to use the `world` geography. + +Geographies are defined in `project/geographies.json`. To learn more visit the [advanced concepts](../concepts/Concepts.md#geographies) page. + +### Add Metric Group + +A metric group is a higher-level entity that defines a metric to be measured, for one or more classes of data. `MetricGroup` **records** can defined in `project/metrics.json` and accessed using the project client in your geoprocessing functions and reports. + +Let's create a metric group by first looking at the benthic dataset. It represents where multiple classes of benthic habitat are present - sand, rock, rubble. Each polygon is assigned with a single habitat type using the `class` attribute and given a value of `Sand`, `Rock`, or `Rubble`. + +Add the following metric group object to `project/metrics.json` and save the file. + +```json +{ + "metricId": "benthicHabitat", + "classKey": "class", + "datasourceId": "benthic-rock", + "classes": [ + { + "classId": "Sand", + "display": "Sand" + }, + { + "classId": "Rock", + "display": "Rock" + }, + { + "classId": "Rubble", + "display": "Rubble" + } + ] +} +``` + +This defines a `benthicHabitat` metric that sources data from the `benthic` datasource. The `classKey` indicates this datasource has an attribute named `class` used to identify which data class each polygon is a member of. 3 data classes are defined with a `classId` serving as the unique identifier for the data class, and it also matches the value used in the data at the `classKey` attribute. + +To learn more about metric groups, visit the [advanced concepts](../concepts/Concepts.md#metric-group) page. + +### Create Report + +Next you will create a report that uses your metric group. Run the following command and answer the questions: + +```bash +npm run create:report +``` + +```text +? Type of report to create +Vector overlap report - calculates sketch overlap with vector datasources +? Describe what this reports geoprocessing function will calculate (e.g. Calculate sketch overlap with boundary polygons) +Calculate sketch overlap with benthic habitat +? Select the metric group to report on +benthicHabitat + +✔ Created benthicHabitat report +✔ Registered report assets in project/geoprocessing.json + +Geoprocessing function: src/functions/benthicHabitat.ts +Smoke test: src/functions/benthicHabitatSmoke.test.ts +Report component: src/components/BenthicHabitatCard.tsx +Story generator: src/components/BenthicHabitatCard.example-stories.ts + +Next Steps: + * 'npm test' to run smoke tests against your new geoprocessing function + * 'npm run storybook' to view your new report with smoke test output + * Add to a top-level report client or page when ready +``` + +You should now have a geoprocessing function and card component ready to go that will iterate through your data classes and calculate/report area overlap with your sketch. + +### Test New Example Sketch + +Now run `npm run test` again look at the new smoke test output for your geoprocessing function in `examples/output`. + +It's very likely that none of your random sketchs overlapped with any benthic polygons and all display zero. Add the following example sketch that we know will overlap. + +
+examples/sketches/sketch2.json + +```json +{ + "type": "Feature", + "properties": { + "id": "78f6e916-20f0-471e-a15e-6d632650cf68", + "isCollection": false, + "userAttributes": [ + { + "label": "Type", + "fieldType": "ChoiceField", + "exportId": "TYPE", + "value": "sketch" + }, + { + "label": "Notes", + "value": "NOTES", + "fieldType": "TextArea" + } + ], + "sketchClassId": "3ac026ad-c3eb-471a-b6ad-58782aa5e949", + "createdAt": "2024-11-26T02:48:33.985Z", + "updatedAt": "2024-11-26T02:48:33.985Z", + "name": "sketch2" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [151.31665625673213, 7.749571426060996], + [151.31665625673213, 5.925462431466443], + [153.9861009666032, 5.925462431466443], + [153.9861009666032, 7.749571426060996], + [151.31665625673213, 7.749571426060996] + ] + ] + }, + "id": "78f6e916-20f0-471e-a15e-6d632650cf68" +} +``` + +
+ +Now `npm run test` and you should now see non-zero output for each benthic class for the sketch2 example: + +
+examples/output/sketch2/benthicHabitat.json + +```json +{ + "metrics": [ + { + "geographyId": "world", + "metricId": "benthicHabitat", + "classId": "Rock", + "sketchId": "78f6e916-20f0-471e-a15e-6d632650cf68", + "groupId": null, + "value": 11210186.968081, + "extra": { + "sketchName": "sketch2" + } + }, + { + "geographyId": "world", + "metricId": "benthicHabitat", + "classId": "Rubble", + "sketchId": "78f6e916-20f0-471e-a15e-6d632650cf68", + "groupId": null, + "value": 11210186.968081, + "extra": { + "sketchName": "sketch2" + } + }, + { + "geographyId": "world", + "metricId": "benthicHabitat", + "classId": "Sand", + "sketchId": "78f6e916-20f0-471e-a15e-6d632650cf68", + "groupId": null, + "value": 11210186.968081, + "extra": { + "sketchName": "sketch2" + } + } + ] +} +``` + +
+ +### Add To Tab Report + +Next, add BenthicHabitatCard to a new **Habitat** page in TabReport. Open `src/clients/TabReport.tsx` and replace the code with the following: + +
+src/clients/TabReport.tsx + +```javascript +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +import { + SegmentControl, + ReportPage, + SketchAttributesCard, +} from "@seasketch/geoprocessing/client-ui"; +import Translator from "../components/TranslatorAsync.js"; +import { SimpleCard } from "../components/SimpleCard.js"; +import { CoralReefCard } from "../components/CoralReefCard.js"; +import { BenthicHabitatCard } from "../components/BenthicHabitatCard.js"; + +const BaseReport = () => { + const { t } = useTranslation(); + const segments = [ + { id: "OVERVIEW", label: t("Overview") }, + { id: "BIOLOGICAL", label: t("Biological") }, + { id: "HABITAT", label: t("Habitat") }, + ]; + const [tab, setTab] = useState < string > "OVERVIEW"; + + return ( + <> +
+ setTab(segment)} + segments={segments} + /> +
+ + + + + ); +}; + +// Named export loaded by storybook +export const TabReport = () => { + return ( + + + + ); +}; + +// Default export lazy-loaded by production ReportApp +export default TabReport; +``` + +
+ +Storybook should update on save and display the following: + +![CoralReefCard add to page](./assets/benthic-habitats-add-page.jpg) + +## Seamount Report + +Next you will create a report summarizing sketch overlap with areas that are within 40k kilometers of a seamount, which is an underwater mountain that rises at least 1,000 meters above the surrounding ocean. Here is an image of these areas displayed in QGIS within the Micronesian EEZ boundary. + +![Seamount](./assets/seamount-map.jpg) + +The seamount dataset is in a raster format. It is a binary raster such that each raster cell has a value of zero or one. Rasters are like digital images, in that each pixel or cell represents a specific rectangular area of the world and gives it a value. This particular dataset is a binary raster. Each cell has a value of zero or one. A one value indicates that the cell is within 40 kilemeters of a seamount, a zero value indicates it is not. + +### Import Data + +Next you will import this seamount raster: + +```bash +npm run import:data + +? Type of data? +Raster + +? Enter path to src file (with filename) +data/src/seamounts_40km.tif + +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename +seamounts_40km + +? Select raster band to import +1 + +? What type of measurement is used for this raster data? +Quantitative - cell value (number) represents a measurement of a single thing + +Adding seamounts_40km record in project/datasources.json file +``` + +### Precalc Data + +Now, precalculating metrics for a cloud-optimized geotiff raster is a little more complicated than for a flatgeobuf. For this reason, we want to make use of the built-in `precalc` feature. Run the precalc command as follow: + +```bash +npm run precalc:data + +? Do you want to precalculate only a subset? +Yes, by datasource + +? Which datasources do you want to precalculate? (will precalculate for all geographies) +Let me choose + +? What datasources would you like to precalculate? (select as many as you want) +seamounts_40km - raster + +Precalculating datasource seamounts_40km for geography world +1 datasource/geography combinations precalculated successfully +``` + +Now look at project/precalc.json. You should see 4 new precalculated metrics for octocorals: + +- `valid` - count of all raster cells with value (not nodata cells) +- `count` - count of all cells in the raster, both valid and invalid (nodata) +- `sum` - sum of value of all valid cell values in raster +- `area` - area of valid cells in raster in square meters + +```json + { + "geographyId": "world", + "metricId": "area", + "classId": "seamounts_40km-total", + "sketchId": null, + "groupId": "band-0", + "value": 400949272332.4638 + }, + { + "geographyId": "world", + "metricId": "count", + "classId": "seamounts_40km-total", + "sketchId": null, + "groupId": "band-0", + "value": 18748 + }, + { + "geographyId": "world", + "metricId": "sum", + "classId": "seamounts_40km-total", + "sketchId": null, + "groupId": "band-0", + "value": 1365 + }, + { + "geographyId": "world", + "metricId": "valid", + "classId": "seamounts_40km-total", + "sketchId": null, + "groupId": "band-0", + "value": 1365 + } +``` + +The area calculation is made possible by the fact that the raster is in an equal area projection, making all raster cells a consistent size. Area is calculated as: + +- `area = raster cell width in meters x cell height in meters x number of valid cells + +Notice that the precalculated `sum` and `valid` values are the same at `1365`. That is because the valid cells all have a value of 1 and the sum of the values in valid cells is the same as the count of valid cells. + +### Add Objective + +You will also use the built-in framework support for objectives. It allows you to configure a target value and measure progress toward it in a report. Open `project/objectives.json` and add the following objective: + +```json +[ + { + "objectiveId": "seamounts", + "shortDesc": "Seamounts 30%", + "target": 0.3, + "countsToward": {} + } +] +``` + +The `countsToward` property isn't necessary for this sample project but it allows you to indicate which of one or more categories count towards meeting the target. For example if you allow a user to assign a protection level to their sketch, you can allow only the two highest levels of protection to count toward meeting the target. + +Example (do not add): + +```json +{ + "countsToward": { + "Full Protection": "yes", + "High Protection": "yes", + "Low Protection": "no" + } +} +``` + +### Add Metric Group + +The last bit of preparation is you will create a metric group. This will allow you to easily access your precalc metrics and your objective in your report card. + +Create a seamount metric group that uses the objective in `project/metrics.json`. + +```json +{ + "metricId": "seamounts", + "datasourceId": "seamounts_40km", + "classes": [ + { + "classId": "seamounts", + "display": "Seamounts", + "objectiveId": "seamounts" + } + ] +} +``` + +### Create Report + +Now create a blank seamount report + +```text +npm run create:report + +? Type of report to create +Blank report - empty report ready to build from scratch + +? Describe what this reports geoprocessing function will calculate (e.g. Calculate sketch overlap with boundary polygons) +Calculate sketch overlap with seamount raster + +? Title for this report, in camelCase +seamounts + +✔ Created seamounts report +✔ Registered report assets in project/geoprocessing.json + +Geoprocessing function: src/functions/seamounts.ts +Smoke test: src/functions/seamountsSmoke.test.ts +Report component: src/components/SeamountsCard.tsx +Story generator: src/components/SeamountsCard.example-stories.ts + +Next Steps: + * 'npm test' to run smoke tests against your new geoprocessing function + * 'npm run storybook' to view your new report with smoke test output + * Add to a top-level report client or page when ready +``` + +This creates both a geoprocessing function and report card, and registers them in `project/geoprocessing.json`. + +Open `src/functions/seamounts.ts`. + +You will now update this code answer the following questions: + +- What percentage of area within 40 kilometers of a seamount is within the current sketch polygon (or sketch collection polygons)? +- If it is a sketch collection, does it meet the planning objective of protecting 30% of all area within 40 kilometers of a seamount? + +Replace the existing code with the following: + +
+src/functions/seamounts.ts + +```typescript +import { + Sketch, + SketchCollection, + Polygon, + MultiPolygon, + GeoprocessingHandler, + DefaultExtraParams, + loadCog, + rasterStats, + toSketchArray, + StatsObject, +} from "@seasketch/geoprocessing"; +import project from "../../project/projectClient.js"; + +export interface SeamountResult { + /** Sum of valid seamount raster cells overlapping with sketch */ + stats: StatsObject[]; + childSketchStats: { + /** Name of the sketch */ + name: string; + /** Sum of valid seamount raster cells overlapping with sketch */ + stats: StatsObject[]; + }[]; +} + +/** + * seamounts for use with create:report command + */ +export async function seamounts( + sketch: + | Sketch + | SketchCollection, + extraParams: DefaultExtraParams = {}, +): Promise { + const metricGroup = project.getMetricGroup("seamounts"); + const ds = project.getMetricGroupDatasource(metricGroup); + const url = project.getDatasourceUrl(ds); + const raster = await loadCog(url); + + // Add analysis code + const stats = await rasterStats(raster, { + feature: sketch, + stats: ["sum"], + }); + + let childSketchStats: SeamountResult["childSketchStats"] = []; + if (sketch.properties.isCollection) { + childSketchStats = await Promise.all( + toSketchArray(sketch).map(async (childSketch) => { + const childStats = await rasterStats(raster, { + feature: childSketch, + stats: ["sum"], + }); + return { + name: childSketch.properties.name, + stats: childStats, + }; + }), + ); + } + + // Custom return type + return { + stats, + childSketchStats, + }; +} + +export default new GeoprocessingHandler(seamounts, { + title: "seamounts", + description: "Calculate sketch overlap with seamount data", + timeout: 60, // seconds + memory: 1024, // megabytes + executionMode: "async", +}); +``` + +
+ +Notice the more sophisticated result payload. It's designed to return one or more raster stats for the top-level sketch, and one or more child sketch stats if it's a sketch collection. This gives the structure some room to grow if you want to produce multiple raster stats for each sketch and use them in this report. + +```typescript +export interface SeamountResult { + /** Sum of valid seamount raster cells overlapping with sketch */ + stats: StatsObject[]; + childSketchStats: { + /** Name of the sketch */ + name: string; + /** Sum of valid seamount raster cells overlapping with sketch */ + stats: StatsObject[]; + }[]; +} +``` + +Then it fetches the metadata for the seamounts raster, ready to read data from it. + +```typescript +const metricGroup = project.getMetricGroup("seamounts"); +const ds = project.getMetricGroupDatasource(metricGroup); +const url = project.getDatasourceUrl(ds); +const raster = await loadCog(url); +``` + +Now let's look at the analysis code. If it's a sketch collection, sum the value of all rasters cells that overlap with each child sketch. + +```typescript +// If sketch is collection, sum the value of raster cells that overlap with each child sketch +let childSketchStats: SeamountResult["childSketchStats"] = []; +if (sketch.properties.isCollection) { + childSketchStats = await Promise.all( + toSketchArray(sketch).map(async (childSketch) => { + const childStats = await rasterStats(raster, { + feature: childSketch, + stats: ["sum"], + }); + return { + name: childSketch.properties.name, + stats: childStats, + }; + }), + ); +} +``` + +Next, sum the value of raster cells that overlap the entire top-level sketch or sketch collection and return the final result payload. + +```typescript +// Calculate overall sketch area +const stats = await rasterStats(raster, { + feature: sketch, + stats: ["sum"], +}); + +// Custom return type +return { + stats, + childSketchStats, +}; +``` + +If this is a sketch collection, you might notice that an optimization would be to sum the value of all the child sketches to get the overall sum for the whole collection. That is true, if your sketches are guaranteed not to overlap. In practice, sketches often can and do overlap in a planning process. The planning process may even allow it such as areas of higher protection within areas of lower protection. This is an optimization left to you. + +Now run tests + +```bash +npm test +``` + +Confirm that the output looks as expected. + +
+Example sketch collection output + +```text +{ + "stats": [ + { + "sum": 5 + } + ], + "childSketchStats": [ + { + "name": "sketchCollection1-1", + "stats": [ + { + "sum": 1 + } + ] + }, + { + "name": "sketchCollection1-2", + "stats": [ + { + "sum": 1 + } + ] + }, + { + "name": "sketchCollection1-3", + "stats": [ + { + "sum": 0 + } + ] + }, + { + "name": "sketchCollection1-4", + "stats": [ + { + "sum": 0 + } + ] + }, + { + "name": "sketchCollection1-5", + "stats": [ + { + "sum": 1 + } + ] + }, + { + "name": "sketchCollection1-6", + "stats": [ + { + "sum": 0 + } + ] + }, + { + "name": "sketchCollection1-7", + "stats": [ + { + "sum": 2 + } + ] + }, + { + "name": "sketchCollection1-8", + "stats": [ + { + "sum": 0 + } + ] + }, + { + "name": "sketchCollection1-9", + "stats": [ + { + "sum": 0 + } + ] + }, + { + "name": "sketchCollection1-10", + "stats": [ + { + "sum": 0 + } + ] + } + ] +} +``` + +
+ +Now, open src/components/SeamountsCard.tsx. + +You will now update this code to: + +- Display the % of total area within 40 kilometers of a seamount captured within this sketch +- If it is a sketch collection + - Indicate whether the objective of protecting 30% of all area within 40 kilometers of a seamount has been met. + - Display a collapsible area with a breakdown of the area and % area of seamount within each individual sketch in the collection. + +Replace the existing code with the following: + +
+src/components/SeamountCard.tsx + +```javascript +import React from "react"; +import { Trans, useTranslation } from "react-i18next"; +import { + Collapse, + HorizontalStackedBar, + ObjectiveStatus, + ResultsCard, + Table, + useSketchProperties, + VerticalSpacer, +} from "@seasketch/geoprocessing/client-ui"; +import { + percentWithEdge, + roundDecimalFormat, + squareMeterToKilometer, +} from "@seasketch/geoprocessing/client-core"; +import project from "../../project/projectClient.js"; +import { SeamountResult } from "../functions/seamounts.js"; + +export const SeamountsCard = () => { + const { t } = useTranslation(); + const [{ isCollection }] = useSketchProperties(); + const titleTrans = t("SeamountCard title", "SeamountCard"); + + // Get precalc total sum + const curGeography = project.getGeographyById("world", { + fallbackGroup: "default-boundary", + }); + const metricGroup = project.getMetricGroup("seamounts", t); + const precalcMetrics = project.getPrecalcMetrics( + metricGroup, + "sum", + curGeography.geographyId, + ); + const sumTotal = precalcMetrics[0].value; + + // Get objective target + const target = project.getObjectiveById("seamounts").target; + + return ( + <> + + {(data: SeamountResult) => { + console.log("precalc", precalcMetrics); + console.log("data", data); + + const sumPerc = data.stats[0].sum! / sumTotal; + const sumPercString = percentWithEdge(sumPerc); + const targetPercString = percentWithEdge(target); + + const meetsObjective = sumPerc >= target; + + // Adjust values for chart to be in range 0-100 + const chartRows = [[[sumPerc * 100]]]; + + const sketchStr = isCollection ? t("sketch collection") : t("sketch"); + + const meetsOrNotElement = meetsObjective ? ( + + This {{ sketchStr }} meets the objective of protecting{" "} + {{ targetPercString }} of area within 40 km of a seamount. + + ) : ( + + This {{ sketchStr }} does not meet the objective of protecting{" "} + {{ targetPercString }} of area within 40 km of a seamount. + + ); + + return ( + <> +

+ + {{ sumPercString }} of all areas within 40 kilometers of a + seamount is within this {{ sketchStr }}. + +

+ {isCollection && ( + + )} + + + percentWithEdge(value / 100)} + max={4} + target={20} + targetValueFormatter={(targetValue) => ( + + Target {{ targetValue: percentWithEdge(targetValue / 100) }} + + )} + rowConfigs={[ + { + title: t("Total seamounts"), + }, + ]} + blockGroupNames={[]} + blockGroupStyles={[{ backgroundColor: "#64c2a6" }]} + /> + {isCollection && ( + +
+ roundDecimalFormat( + squareMeterToKilometer(row.stats[0].sum), + ), + }, + { + Header: t("% Seamount within Sketch"), + accessor: (row: any) => + percentWithEdge(row.stats[0].sum / sumTotal), + }, + ]} + /> + + )} + + ); + }} + + + ); +}; +``` + + + +There are multiple things worth noticing: + +- the project client is getting more use, to access precalc metrics and the objective target. +- the code to access the result values is more complex than for the reef report, because the structure of the result data is more complex. + +### Add To Tab Report + +Next, add SeamountsCard to the **Habitat** page in TabReport. Open `src/clients/TabReport.tsx` and insert the following at the appropriate places: + +
+src/clients/TabReport.tsx + +```jsx +import { SeamountsCard } from "../components/SeamountsCard.js"; + +; +``` + +
+ +Storybook should update on save and display the following: + +![Seamount add to page](./assets/seamount-add-page.jpg) + +### Data Complexity + +The rise in complexity of the results you started to see in the last report is something to be aware of. Imagine if a report needed to calculate a metric with 10 different classes of data. Now imagine each sketch is assigned to 1 of 4 different protection levels. Finally imagine the planning process is also split out into 3 different subregions. Now imagine you need to calculate metrics for every combination of sketch, data class, protection level, and subregion. How would you design the structure of your JSON result data structure to accommodate the data? How would you do it in a way that is flexible and reusable so that components of the framework can build on it? + +The `Metric` data type is designed to accommodate this type of multi-dimensional data. You see a glimpse of it in the precalc output, and in the Coral Reef report. Each `Metric` object represents a single measurement/value for one or more dimensions of data. A simple array of these Metric objects can represent your entire result payload. + +Example of a single Metric `coralspecies`, that measures a sketches overlap with data class `blackcoral`, in `subregion 1`, where the sketch is assigned `full protection`. + +```json +{ + "geographyId": "subregion1", + "metricId": "coralspecies", + "classId": "blackcoral", + "sketchId": "78f6e916-20f0-471e-a15e-6d632650cf68", + "groupId": "full_protection", + "value": 3, + "extra": { + "sketchName": "sketch2" + } +} +``` + +Multiple pieces of this framework know how to work with `Metrics` including: + +- `precalc:data` +- high-level spatial analysis functions like `rasterMetrics` and `overlapFeatures` +- UI components like `ClassTable` and `SketchClassTable` +- helper functions like `firstMatchingMetric`, `toPercentMetric` and `sortMetrics` + +## Coral Species Report + +This last report will calculate sketch overlap with 3 difference species of coral. + +![3 corals](./assets/3-corals-map.jpg) + +### Import Data + +First, we'll import the datasets. There are three binary rasters, each has cells with a value of zero or one. Where there is a one value, the species is predicted to be present. + +Import the datasets as follow: + +Black Coral: + +```bash +npm run import:data + +? Type of data? +Raster + +? Enter path to src file (with filename) +data/src/blackcoral.tif + +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename +blackcoral + +? Select raster band to import +1 + +? What type of measurement is used for this raster data? +Quantitative - cell value (number) represents a measurement of a single thing +``` + +Cold Water Coral: + +```bash +npm run import:data + +? Type of data? +Raster + +? Enter path to src file (with filename) +data/src/coldwatercoral.tif + +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename +coldwatercoral + +? Select raster band to import +1 + +? What type of measurement is used for this raster data? +Quantitative - cell value (number) represents a measurement of a single thing +``` + +Octocoral: + +```bash +npm run import:data + +? Type of data? +Raster + +? Enter path to src file (with filename) +data/src/octocoral.tif + +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename +octocoral + +? Select raster band to import +1 + +? What type of measurement is used for this raster data? +Quantitative - cell value (number) represents a measurement of a single thing +``` + +### Precalc + +Now precalculate metrics for the raster. + +```typescript +npm run precalc:data + +? Do you want to precalculate only a subset? +Yes, by datasource + +? Which datasources do you want to precalculate? (will precalculate for all geographies) +Let me choose + +? What datasources would you like to precalculate? (select as many as you want) +blackcoral - raster +coldwatercoral - raster +octocoral - raster + +3 datasource/geography combinations precalculated successfully +``` + +### Add Metric Group + +Now define a metric group in `project/metrics.json` consisting of three classes, one for each type of coral, each pointing to the appropriate datasource at the class level: + +```json +{ + "metricId": "coralspecies", + "classes": [ + { + "datasourceId": "blackcoral", + "classId": "blackcoral", + "display": "Black Coral", + "objectiveId": "blackcoral" + }, + { + "datasourceId": "coldwatercoral", + "classId": "coldwatercoral", + "display": "Cold Water Corals", + "objectiveId": "coldwatercoral" + }, + { + "datasourceId": "octocoral", + "classId": "Octocoral", + "display": "Octocoral", + "objectiveId": "octocoral" + } + ] +} +``` + +### Add Objective + +Open `project/objectives.json` and add an objective for each data class: + +```json + { + "objectiveId": "blackcoral", + "shortDesc": "Black Coral 15%", + "target": 0.15, + "countsToward": {} + }, + { + "objectiveId": "coldwatercoral", + "shortDesc": "Cold Water Coral 25%", + "target": 0.25, + "countsToward": {} + }, + { + "objectiveId": "octocoral", + "shortDesc": "Octocoral 35%", + "target": 0.35, + "countsToward": {} + } +``` + +### Create Report + +Now create the report + +```text +npm run create:report + +? Type of report to create +Raster overlap report - calculates sketch overlap with raster datasources + +? Describe what this reports geoprocessing function will calculate (e.g. Calculate sketch overlap with boundary polygons) +Calculate sketch overlap with coral species + +? Select the metric group to report on +coralspecies + +? Type of raster data +Quantitative - Continuous variable across the raster + +? Statistic to calculate +sum - sum of value of valid cells overlapping with sketch + +✔ Created coralspecies report +✔ Registered report assets in project/geoprocessing.json +``` + +### Add To Tab Report + +Next, add CoralspeciesCard to the **Biological** page in TabReport. Open `src/clients/TabReport.tsx` and insert the following at the appropriate places: + +
+src/clients/TabReport.tsx + +```jsx +import { CoralspeciesCard } from "../components/CoralspeciesCard.js"; + +; +``` + +
+ +Storybook should update on save and display the following: + +![CoralReefCard add to page](./assets/3-coral-species-add-page.jpg) + +### Language Translation + +To support more languages than just English, start with extracting all of the latest strings from your reports: + +```bash +npm run extract:translation +``` + +You will want to then look at the git changes produced in `src/i18n/lang/en/translation.json` and make adjustments to your reports until the extract strings look right. + +To learn more visit the +[LINK TO TRANSLATION DOC] + +## Create Github Project + +At this point, you can push your code from your local git repository to a remote repository on Github. First, [create a remote Github repository](https://github.com/new) called `fsm-reports-test`. Leave it empty, do not choose to initialize with a template, README, gitignore, or LICENSE. + +```bash +git remote add origin https://github.com/PUT_YOUR_GITHUB_ORG_OR_USERNAME_HERE/fsm-reports-test.git +git push -u origin main +``` + +You should see your files successfuly pushed to Github. + +It may ask you if it can use the Github extension to sign you in using Github. It will open a browser tab and communicate with the Github website. If you are already logged in there, then it should be done quickly, otherwise it may have you login to Github. + +## What's Next + +You've now completed the sample tutorial. Next steps include: + +- Further customize these reports to suit your needs. Look at the storybook [component libary](/storybook) to see what is available. +- [Create a new project](./newproject.md), deploy it to a production environment, publish your data, and integrate your reports with SeaSketch. +- [Setup an existing project](./existingproject.md), and re-deploy it. diff --git a/website/docs/tutorials/sketchAttributes.md b/website/docs/tutorials/sketchAttributes.md new file mode 100644 index 0000000000..8a1632aca2 --- /dev/null +++ b/website/docs/tutorials/sketchAttributes.md @@ -0,0 +1,34 @@ +# Custom Sketch Attributes + +Sketch attributes are additional properties provided with a Sketch Feature or a Sketch Collection. They can be user-defined at draw time or by the SeaSketch platform itself. The SeaSketch admin tool lets you add custom attributes to your [sketch classes](https://docs.seasketch.org/seasketch-documentation/administrators-guide/sketch-classes). SeaSketch will pass these sketch attributes on to geoprocessing functions. + +Potential use cases: + +- Geoprocessor + - assign a protection level or type to an area, such that the geoprocessing function (and resulting report) can assess against the required amount of protection for each level. + - Assign allowed activities to an area, that the function can assign a protection level. This is particularly useful when reporting on an entire SketchCollection. The function can group results by protection level and ensure that overlap is not double counted within each group, and allow overlap between groups to go to the higher protection level. + - Passing an extra yes/no attribute for whether to include existing protected areas as part of your sketch. + - Provide language translations for each sketch attribute name and description. + +## Accessing sketch properties from report client + +The main way to access sketch attributes in a browser client is the [useSketchProperties()](../api/client-ui/functions/useSketchProperties.md) hook. Examples include: + +- [SketchAttributesCard](../api/client-ui/functions/SketchAttributesCard.md) and [story](https://seasketch.github.io/gp-storybook/Next/index.html?path=/story/components-card-sketchattributescard--next) with [source](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/components/SketchAttributesNextCard.stories.tsx) + +## Accessing sketch properties from function + +Withing a preprocessing or geoprocessing function, the [SketchProperties](../api/geoprocessing/type-aliases/SketchProperties.md) are provided within every sketch. Within that are [userAttributes](../api/geoprocessing/type-aliases/UserAttribute.md) that contain all of the user-defined attributes. + +For example, assume your Polygon sketch class contains an attribute called `ACTIVITIES` which is an array of allowed activities for this sketch class. And you have a second attribute called `ISLAND` that is a string containing the name of the island this sketch is located. You can access it as follow: + +```javascript +export async function protection( + sketch: Sketch | SketchCollection +): Promise { + const sketches = toSketchArray(sketch); + // Complex attributes are JSON that need to be parsed + const activities = getJsonUserAttribute(sketches[0], 'ACTIVITIES') + // Simple attributes are simple strings or numbers that can be used directly + const island = getUserAttribute(sketches[0], 'ISLAND') +``` diff --git a/website/docs/tutorials/storybook.md b/website/docs/tutorials/storybook.md new file mode 100644 index 0000000000..e89a197d62 --- /dev/null +++ b/website/docs/tutorials/storybook.md @@ -0,0 +1,11 @@ +# Advanced storybook usage + +There are multiple ways to introduce state into your stories. Many components draw their state from the ReportContext, which contains a lot of the information passed to the app on startup from seasketch. + +There are 3 common methods for creating a story with context. All of these methods are built on `ReportStoryLayout`. + +ReportStoryLayout is a component used by storybook that wraps your story in the things that the top-level App component would provide including setting report context, changing language, changing text direction, as well as offering dropdown menus for changing the language and the report width for different device sizes. + +1. ReportDecorator - decorator that wraps story in ReportStoryLayout and otherwise uses default context value. A good starting point because it's simple. (see Card.stories.tsx). Language translation will work in the story with this method. +2. If you want to override the context in your stories use `createReportDecorator()` - decorator generator that wraps story in ReportStoryLayout and lets you override report context. Because a decorator can only be specified for the whole file, you should only use this if you want all stories in the file to be overidden with the same context. (see SegmentControl.stories.tsx). But you can split them up into multiple story files. Language translation will work in the story with this method. +3. For optimal control can use the ReportCardDecorator in combindation with `sampleSketchReportContextValue()` to set the context per story (see LayerToggle.stories.tsx). Language translation will not work with the story in this method. diff --git a/website/docs/tutorials/updateDatasource.md b/website/docs/tutorials/updateDatasource.md new file mode 100644 index 0000000000..ac5a59fdbb --- /dev/null +++ b/website/docs/tutorials/updateDatasource.md @@ -0,0 +1,12 @@ +# Updating A Datasource + +When updating a datasource, you should try to take it all the way through the process of `import`, `precalc`, and `publish` so that there's no confusion about which step you are on. It's easy to leave things in an incomplete state and its not obvious when you pick it back up. + +- Edit/update your data in data/src +- Run `npm run reimport:data`, choose your source datasource and choose to not publish right away. `data/dist` will now contain your updated datasource file(s). +- Run `npm run precalc:data`, choose the datasource to precalculate stats for. +- `npm test` to run your smoke tests which read data from `data/dist` and make sure the geoprocessing function results change as you would expect based on the data changes. Are you expecting result values to go up or down? Stay about or exactly the same? Try not to accept changes that you don't understand. +- Add additional sketches or features to your smoke tests as needed. Exporting sketches from SeaSketch as geojson and copying to `examples/sketches` is a great way to do this. Convince yourself the results are correct. +- Publish your updated datasets with `npm run publish:data`. +- Clear the cache for all reports that use this datasource with `npm run clear:results` and type the name of your geoprocessing function (e.g. `boundaryAreaOverlap`) or simply `all`. Cached results are cleared one record at a time in dynamodb so this can take quite a while. In fact, the process can run out of memory and suddenly die. In this case, you can simply rerun the clear command and it will continue. Eventually you will get through them all. +- Test your reports in SeaSketch. Any sketches you exported should produce the same numbers. Test with any really big sketches, make sure your data updates haven't reached any new limit. This can happen if your updated data is much larger, has more features, higher resolution, etc. diff --git a/website/docs/Migrating.md b/website/docs/upgrade.md similarity index 91% rename from website/docs/Migrating.md rename to website/docs/upgrade.md index 5e760611b7..2074d0c951 100644 --- a/website/docs/Migrating.md +++ b/website/docs/upgrade.md @@ -2,9 +2,9 @@ Instructions to migrate existing geoprocessing projects to newer versions. -## Initial upgrade +## Upgrade Geoprocessing -An existing project will be pinned to a specific version of the geoprocessing library in package.json, under `devDependencies`. To update to the latest version you can simply run: +Your project will be pinned to a specific version of the geoprocessing library in package.json, under `devDependencies`. To update to the latest version, first, make sure you don't have any unsaved work and your git repository is in a clean state. Then update the version, and run the upgrade script: ```bash npm update @seasketch/geoprocessing@latest @@ -12,7 +12,11 @@ npm install npm run upgrade ``` -If you are upgrading to a new major version (e.g 6.1.x to 7.0.x), then there will be breaking changes that may affect your project. It is suggested that you upgrade only one major version at a time if there are significant manual steps required to migrate your project. If you need to upgrade 2 or more major versions, consider simply creating a new project from scratch, them migrating everything over one at a time (datasources, metric groups, functions and report clients). +The upgrade command may alter or overwrite a significant number of files including configuration, scripts, package.json dependencies and scripts, etc. The upgrade command may overwrite any customizations you have made such as to scripts, in which case you would need to manually recover them by studying the git diffs. + +If you are upgrading to a new major version (e.g 6.1.x to 7.0.x), then there will be breaking changes that may affect your project, covered in this document. Check the [release notes](https://github.com/seasketch/geoprocessing/releases) for any additional required steps. + +It is suggested that you upgrade only one major version at a time if there are significant manual steps required to migrate your project. If you need to upgrade 2 or more major versions, consider simply creating a new project from scratch, them migrating everything over one at a time (datasources, metric groups, functions and report clients). After upgrading you should always rerun your tests and storybook to verify everything is working properly and test output changes are as expected. @@ -21,14 +25,19 @@ npm test npm run storybook ``` -Make sure to commit all of your changes to your git repo, and re-deploy your project to AWS when ready. +Finally, rebuild and redeploy your project. ```bash npm run build npm run deploy ``` -After deploy, you may also need to reimport and republish all of your datasources using `reimport:data` and `publish:data` commands. Follow the steps for your particular migration below. +After deploy, breaking changes may require you to take additional steps. Follow the steps for your particular migration. If you are seeing errors or unexpected behavior, try any one of the following steps: + +- Rebuild dependencies: `rm -rf node_modules && rm package-lock.json && npm install` +- Reimport all datasources: `npm run reimport:data` +- Republish all datasources: `npm run publish:data` +- Clear AWS cache: `npm run clear-results`, then `all` ## Test Stack @@ -39,6 +48,8 @@ If you'd like to deploy to a test stack first, alongside your existing productio - Once deployed, repoint your existing sketch classes to the new geoprocessing service, or create separate "admin only" sketch classes that point to your new test service. Make sure that all required sketch class attributes are in place. - When you are ready to update production, change the `name` in package.json back, and rerun `build` and `deploy`. +# Migration + ## 6.x to 7.x Numerous manual migration steps are required, including a number of breaking changes: @@ -50,7 +61,7 @@ Numerous manual migration steps are required, including a number of breaking cha See [fsm-reports](https://github.com/seasketch/fsm-nearshore-reports/pull/3) for a migration from 6.x to 7.x and [brazil-reports](https://github.com/seasketch/brazil-reports/pull/10) for migration from 3.x to 7.x which was done by starting with a freshly created project in a git branch and slowly migrating the datasources, metric groups, functions, and report clients over. -### Upgrade dev environment +### Upgrade Devcontainer If you're using `geoprocessing-devcontainer` to develop in a Docker environment, you will need to update this repo and the underlying `geoprocessing-workspace` docker image to the latest. First, make sure Docker Desktop is running, then: @@ -83,6 +94,25 @@ If you're maintaining your own development environment then you should look to h - NPM 10.5.0 - GDAL 3.5.0 +### Upgrade Windows Geoprocessing + +#### Upgrade Geoprocessing Distribution + +If you previously installed a version of the Geoprocessing distribution for running in WSL, and now want to replace it with a new one, first backup your existing Geoprocessing distribution (if needed): + +```bash +mkdir C:\tmp\WslBackups\Geoprocessing +wsl --export Geoprocessing C:\tmp\WslBackups\20241104_Geoprocessing.tar +``` + +Then unregister it: + +```bash +wsl --unregister Geoprocessing +``` + +Then follow the instructions above to install WSL Geoprocessing image again + ### Upgrade Script As of v7.0-beta.5 there is a new `upgrade` script that automates installing/updating assets in your project from the gp library. As of now it upgrades: diff --git a/website/docs/workers.md b/website/docs/workers.md new file mode 100644 index 0000000000..6ef90ef9bd --- /dev/null +++ b/website/docs/workers.md @@ -0,0 +1,177 @@ +# Worker Functions + +Worker functions are sync geoprocessing functions that are invoked directly by parent geoprocessing functions, allowing computationally intensive or memory intensive tasks to be split out across multiple lambdas. Worker results are assembled in the parent function and returned back to the report client + +Anytime you are making calculations on multiple things (datasets, geographies, sketches), there is potential to split it out across worker functions. + +- Multiple datasources +- Sketch collection with multiple sketches +- Multiple geographies + +Here is an example of a parent geoprocessing function that invokes a worker for each geography: + +```typescript +import { + Sketch, + SketchCollection, + Polygon, + MultiPolygon, + GeoprocessingHandler, + DefaultExtraParams, + runLambdaWorker, + parseLambdaResponse, +} from "@seasketch/geoprocessing"; +import project from "../../project/projectClient.js"; +import { + GeoprocessingRequestModel, + Metric, + ReportResult, + isMetricArray, + rekeyMetrics, + sortMetrics, +} from "@seasketch/geoprocessing/client-core"; +import { kelpMaxWorker } from "./kelpMaxWorker.js"; + +export async function kelpMax( + sketch: + | Sketch + | SketchCollection, + extraParams: DefaultExtraParams = {}, + request?: GeoprocessingRequestModel, +): Promise { + const metricGroup = project.getMetricGroup("kelpMax"); + const geographies = project.geographies; + + const metrics = ( + await Promise.all( + geographies.map(async (geography) => { + const parameters = { + ...extraParams, + geography: geography, + metricGroup, + }; + + return process.env.NODE_ENV === "test" + ? kelpMaxWorker(sketch, parameters) + : runLambdaWorker( + sketch, + project.package.name, + "kelpMaxWorker", + project.geoprocessing.region, + parameters, + request!, + ); + }), + ) + ).reduce( + (metrics, result) => + metrics.concat( + isMetricArray(result) + ? result + : (parseLambdaResponse(result) as Metric[]), + ), + [], + ); + + return { + metrics: sortMetrics(rekeyMetrics(metrics)), + }; +} + +export default new GeoprocessingHandler(kelpMax, { + title: "kelpMax", + description: "kelpMax overlap", + timeout: 500, // seconds + memory: 1024, // megabytes + executionMode: "async", + // Specify any Sketch Class form attributes that are required + requiresProperties: [], + workers: ["kelpMaxWorker"], +}); +``` + +Some things to notice: + +- The kelpMax function is configured as `async`. Any geoprocessing function invoking workers will likely take long enough to run that it should just be async. +- A `workers` option is defined that registers a worker named `kelpMaxWorker`. It is required on publish that there be another sync geoprocessing function with the title `kelpMaxWorker`. +- kelpMax is set to use relatively low memory, because all the work is being done by the workers. +- The worker function is invoked using the [runLambdaWorker](./api/geoprocessing/functions/runLambdaWorker.md) utility function. This function invokes the lambda with the given name. +- kelpMaxWorker is being called once for each `geography` and also the set of `metricGroups`. +- In the case of it being a test environment, then `kelpMaxWorker` is run directly. This means that in a test environment all of the worker functions run on the same thread, which could overwhelm your system. Keep sketch examples as simple as possible for smoke tests. + +Here is an example of the worker function: + +```typescript +export async function kelpMaxWorker( + sketch: + | Sketch + | SketchCollection, + extraParams: { + geography: Geography; + metricGroup: MetricGroup; + }, +) { + const geography = extraParams.geography; + const metricGroup = extraParams.metricGroup; + + if (!metricGroup.datasourceId) + throw new Error(`Expected datasourceId for ${metricGroup.metricId}`); + + // Support sketches crossing antimeridian + const splitSketch = splitSketchAntimeridian(sketch); + + // Clip sketch to geography + const clippedSketch = await clipToGeography(splitSketch, geography); + + // Get bounding box of sketch remainder + const sketchBox = clippedSketch.bbox || bbox(clippedSketch); + + const ds = project.getDatasourceById(metricGroup.datasourceId); + if (!isRasterDatasource(ds)) + throw new Error(`Expected raster datasource for ${ds.datasourceId}`); + + const url = project.getDatasourceUrl(ds); + + // Start raster load and move on in loop while awaiting finish + const raster = await loadCog(url); + + // Start analysis when raster load finishes + const overlapResult = await rasterMetrics(raster, { + metricId: metricGroup.metricId, + feature: clippedSketch, + ...(ds.measurementType === "quantitative" && { stats: ["area"] }), + ...(ds.measurementType === "categorical" && { + categorical: true, + categoryMetricValues: metricGroup.classes.map((c) => c.classId), + }), + }); + + return overlapResult.map( + (metrics): Metric => ({ + ...metrics, + classId: "kelpMax", + geographyId: geography.geographyId, + }), + ); +} + +export default new GeoprocessingHandler(kelpMaxWorker, { + title: "kelpMaxWorker", + description: "", + timeout: 500, // seconds + memory: 1024, // megabytes + executionMode: "sync", + // Specify any Sketch Class form attributes that are required + requiresProperties: [], +}); +``` + +Some things to notice: + +- The worker function receives the `extraParams` passed by the parent geoprocessing function. This is no different than how a geoprocessing function receives `extraParams` passed by a report client. + +Other things to know: + +- Caching of results in DynamoDB is disabled for workers. The thinking is that if the parent geoprocessing function results are cached, then the worker caches will never be accessed, at least not under current use cases, so they don't be created. This drastically reduces the number of DynamoDB items created for each report, keeping costs down. + +For more examples see [california-reports](https://github.com/seasketch/california-reports/tree/main/src/functions) diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 4128bfb867..be5b8c9d52 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -124,6 +124,10 @@ const config: Config = { label: "Getting Started", to: "/docs", }, + { + label: "Contributing", + to: "/docs/contributing", + }, ], }, { diff --git a/website/package.json b/website/package.json index c07913c1d8..b3c5fde60c 100644 --- a/website/package.json +++ b/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "7.0.0-beta.9", + "version": "1.0.0", "private": true, "scripts": { "docusaurus": "docusaurus", diff --git a/website/sidebars.ts b/website/sidebars.ts index 3787d8144d..4bcb10dcb6 100644 --- a/website/sidebars.ts +++ b/website/sidebars.ts @@ -15,33 +15,161 @@ const sidebars: SidebarsConfig = { { type: "category", label: "Getting Started", - collapsed: false, items: [ "introduction", "concepts/Concepts", - "tutorials/Tutorials", + "architecture/Architecture", "CLI", - "Tipsandtricks", + "EdgesAndLimits", ], }, { type: "category", - label: "Library", - collapsed: false, - items: ["api/index", "Migrating", "Extending"], + label: "Tutorials", + items: [ + { + type: "doc", + id: "tutorials/Tutorials", + label: "System Setup", + }, + { + type: "doc", + id: "tutorials/sampleproject", + label: "Create Sample Project", + }, + { + type: "doc", + id: "tutorials/newproject", + label: "Create New Project", + }, + { + type: "doc", + id: "tutorials/existingproject", + label: "Setup Existing Project", + }, + { + type: "doc", + id: "tutorials/deploy", + label: "Deploy Project", + }, + { + type: "doc", + id: "tutorials/updateDatasource", + label: "Update Datasource", + }, + { + type: "doc", + id: "upgrade", + label: "Upgrade Project", + }, + { + type: "doc", + id: "thirdpartydata/thirdpartydata", + label: "Third Party Data", + }, + { + type: "doc", + id: "tutorials/clouddrive", + label: "Cloud Drive Syncing", + }, + ], }, { type: "category", - label: "Advanced Guides", + label: "Guides", items: [ - "architecture/Architecture", + { + type: "doc", + id: "structure", + label: "Project Structure", + }, + { + type: "doc", + id: "projectclient", + label: "Project Client", + }, + { + type: "doc", + id: "linkData", + label: "Link Project Data", + }, + { + type: "doc", + id: "dataimport", + label: "Data Import", + }, + { + type: "doc", + id: "dataproviders", + label: "Data Fetching", + }, + { + type: "doc", + id: "toolbox/toolbox", + label: "Spatial Toolbox", + }, + { + type: "doc", + id: "precalc", + label: "Precalc Data", + }, + { + type: "doc", + id: "preprocessing", + label: "Preprocessing Functions", + }, + { + type: "doc", + id: "geoprocessing", + label: "Geoprocessing Functions", + }, + "workers", + "tutorials/sketchAttributes", + { + type: "doc", + id: "tutorials/extraParams", + label: "Extra Function Parameters", + }, + { + type: "doc", + id: "multiBoundary/multiBoundary", + label: "Multi-Boundary", + }, "antimeridian/Antimeridian", - "gip/GIP-1-i18n", - "EdgesAndLimits", "Testing", + { + type: "doc", + id: "tutorials/storybook", + label: "Storybook", + }, + { + type: "doc", + id: "devcontainer/devcontainer", + label: "Devcontainer", + }, + { type: "doc", id: "codespaces/codespaces", label: "Codespaces" }, + ], + }, + { + type: "category", + label: "Library", + items: [ + "api/index", + { type: "doc", id: "Extending", label: "Extending" }, "Contributing", ], }, + { + type: "category", + label: "Improvement Proposals", + items: [ + { + type: "doc", + id: "gip/GIP-1-i18n", + label: "GIP-1: Internationalization", + }, + ], + }, ], }; diff --git a/website/src/components/HomepageFeatures/index.tsx b/website/src/components/HomepageFeatures/index.tsx index af5a7bf6a3..a705872746 100644 --- a/website/src/components/HomepageFeatures/index.tsx +++ b/website/src/components/HomepageFeatures/index.tsx @@ -11,13 +11,13 @@ type FeatureItem = { const FeatureList: FeatureItem[] = [ { - title: "Unified Developer Experience", + title: "Simplified Developer Experience", // eslint-disable-next-line @typescript-eslint/no-require-imports Svg: require("@site/static/img/undraw_docusaurus_react.svg").default, description: ( <> - Create a project with a combination of VSCode, Typescript, React, - Storybook, Vite and a toolbox of spatial functions. + Create reports for your SeaSketch project with a combination of software + building blocks. ), }, @@ -27,8 +27,8 @@ const FeatureList: FeatureItem[] = [ Svg: require("@site/static/img/undraw_docusaurus_mountain.svg").default, description: ( <> - Write bite-size serverless functions that analyze proposals on-demand. - Build reports to display the results. + Write bite-size serverless functions that analyze user sketches + on-demand. Build reports to display the results. ), }, diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 06be648e55..0c81ce0712 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -34,8 +34,8 @@ export default function Home(): JSX.Element { const { siteConfig } = useDocusaurusContext(); return (
diff --git a/website/versioned_docs/version-6.1.0/tutorials/Tutorials.md b/website/versioned_docs/version-6.1.0/tutorials/Tutorials.md index 12fc774c18..f5de8c2092 100644 --- a/website/versioned_docs/version-6.1.0/tutorials/Tutorials.md +++ b/website/versioned_docs/version-6.1.0/tutorials/Tutorials.md @@ -48,7 +48,7 @@ Web browser: You have 3 options for how to develop geoprocessing projects -1. Local Docker environment +1. Docker Desktop Environment - Docker provides a sandboxed Ubuntu Linux environment on your local computer, setup specifically for geoprocessing projects. - Best for: intermediate to power users doing development every day - Pros @@ -67,99 +67,93 @@ You have 3 options for how to develop geoprocessing projects Choose an option and follow the instructions below to get started. You can try out different options over time. -### If Install Option #1 - Local Docker Environment +### If Install Option #1 - Docker Desktop Environment -- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) for either Apple chip or Intel chip as appropriate to your system and make sure it's running. - - If you don't know which you have, click the apple icon in the top left and select `About This Mac` and look for `Processor` -- Install [VS Code](https://code.visualstudio.com) and open it -- Clone the geoprocessing devcontainer repository to your system +- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) and make sure its running. +- If you have a Mac, choose either Apple processor or Intel processor as appropriate to your system. If you don't know which processor you have, click the apple icon in the top left and select `About This Mac` and look for `Processor`. +- Install [VS Code](https://code.visualstudio.com) and open it. +- Clone the geoprocessing-devcontainer Github repository to your local system and open that folder in VSCode. ```bash git clone https://github.com/seasketch/geoprocessing-devcontainer ``` -- Open the geoprocessing-devcontainer folder in VSCode +Here are more detailed instructions to do this step: - - `File` -> `Open Folder` -> geoprocessing-devcontainer folder +- From VSCode, click `Open Folder` button or `File -> Open Folder` and create or choose a folder where you keep source code. A folder called `src` or `code` in your users home directory is reasonable. Then click `Select Folder` to finish. +- Press `Ctrl-J` or `Cmd-backtick` to open a terminal. The current directory of the terminal will be your workspace folder. +- Enter the command to clone the geoprocessing-devcontainer repository to your workspace. + - `git clone https://github.com/seasketch/geoprocessing-devcontainer` +- Click `Open Folder` button or `File -> Open Folder` and open the repo folder you just cloned. +- Press `Ctrl-J` or `Cmd-backtick` to open a terminal. -- If you are prompted to install suggested extensions, then do so, otherwise go to the Extension panel and install the following: +- Install required VSCode extensions. If you are already prompted to install suggested extensions, click to do so now, otherwise go to the `Extension` panel on the left side of the VSCode window and install the following extensions: - Remote Development - - Dev Containers - - Docker - Remote Explorer -- Once you have DevContainer support, you should be prompted to ”Reopen folder to develop in a container”. _Do not do this yet._ -- Under the `.devcontainer/local-dev` folder, make a copy of the `.env.template` file and rename it to `.env`. - - Fill in your POEditor API token for you account, which you can find here - https://poeditor.com/account/api. If you don't have one, then follow the instructions to [create your own](../gip//GIP-1-i18n.md#setup-poeditor-as-an-independent-developer). -- If you have a data folder to mount into the docker container from your host operating system, edit the `.devcontainer/local-dev/docker-compose.yml` file and uncomment the volume below this comment - - `# Bound host volume for Box data folder` - - The volume is preset to bind to your Box Sync folder in you home directory but you can change it to any path in your operating system where your data resides for all your projects. -- To start the devcontainer at any time - - `Cmd-Shift-P` to open command palette - - type “Reopen in container” and select the Dev Container command to do so. - - VSCode will reload, pull the latest `geoprocessing-workspace` docker image, run it, and start a remote code experience inside the container. -- Once container starts - - It will automatically clone the geoprocessing repository into your environment under `/workspaces/geoprocessing`, and then run `npm install` to install all dependencies. Wait for this process to finish which can take up to 3-4 minutes the first time. - - `Ctrl-J` will open a terminal inside the container. - - Navigate to geoprocessing and verify tests run successfully. - - `cd /workspaces/geoprocessing` - - `npm run test` - -If success, then you're now ready to create a new geoprocessing project in your devcontainer environment. - -- To stop devcontainer at any time - - `Cmd-Shift-P` to open command palette and type `“DevContainers: Rebuild and Reopen locally”` to find command and hit Enter. - - Choose `Local Workspace` - - Your devcontainer will now bootstrap, downloading the geoprocessing docker image and installing everything. + - Docker + - Dev Containers + +Once you have added the `Dev Containers` extension you should be prompted to ”Reopen folder to develop in a container”. _Do not do this yet._ + +- In the file `Explorer` panel, you will find a `.devcontainer` folder. This top-level folder contains the configuration for the `stable` geoprocessing devcontainer. +- Make a copy of `.devcontainer/.env.template` file and name it `.env`. + - You don't need to add anything yet to your .env file, but it is required that it exists in the `.devcontainer` folder. + +Now start the devcontainer: + +- `Ctrl-Shift-P` or `Cmd-Shift-P` to open the VSCode command palette +- type “Reopen in container” and select the Dev Container command to do so. +- Select the `Geoprocessing Local Pre-7.x` environment. +- VSCode will pull the latest `geoprocessing-workspace` docker image, create a container with it, and start a remote code experience inside the container. - Notice the bottom left blue icon in your vscode window. It may say `Opening remote connection` and eventually will say `Dev Container: Geoprocessing`. This is telling you that this VSCode window is running in a devcontainer environment. -- To exit your devcontainer: - - Click the blue icon in the bottom left, and click `Reopen locally`. This will bring VSCode back out of the devcontainer session. -- To delete a devcontainer: - - This is often the easiest way to "start over" with your devcontainer. - - First, make sure you've pushed all of your code work to Github. - - Make sure you stop your active VSCODE devcontainer session. - - Open the Remote Explorer panel in the left sidebar. - - You can right-click and delete any existing devcontainers and volumes to start over. - - You can also see and delete them from the Docker Desktop app, but it might not be obvious which containers and volumes are which. The VSCode Remote Explorer window gives you that context. + +![Manage Devcontainers](assets/devcontainer-blue.jpg "Manage Devcontainers") + +You now have a devcontainer, ready to create a project in. + +To exit your devcontainer: + +- Click the blue icon in the bottom left, and then `Reopen locally`. This will bring VSCode back out of the devcontainer session. +- You can also type `Ctrl-Shift-P` or `Cmd-Shift-P` and select `Dev Containers: Reopen folder locally`. ![Manage Devcontainers](assets/ManageDevcontainers.jpg "Manage Devcontainers") -- To upgrade your devcontainer: - - The devcontainer settings in this repository may change/improve over time. You can always pull the latest changes for your `geoprocessing-devcontainer` repository, and then `Cmd-Shift-P` to open command palette and type `“DevContainers: Rebuild and Reopen locally”`. -- To upgrade the `geoprocessing-workspace` Docker image - - This devcontainer builds on the `geoprocessing-workspace` Docker image published at [Docker Hub](https://hub.docker.com/r/seasketch/geoprocessing-workspace/tags). It will always install the latest version of this image when you setup your devcontainer for the first time. - - It is up to you to upgrade it after the initial installation. The most likely situation is: - - You see some changes in the [Changelog](https://github.com/seasketch/docker-gp-workspace/blob/main/Changelog.md) that you want to utilize. - - You are upgrading the `geoprocessing` library for your project to a newer version and it requires additional software that isn't in your current devcontainer. This situation should be flagged in the geoprocessing [changelog](https://github.com/seasketch/geoprocessing/blob/dev/CHANGELOG.md). - - In both cases you should be able to simply update your docker image to the latest. The easiest way to do this is to: - - Push all of your unsaved work in your devcontainer to Github. This is in case the Docker `named volume` where your code lives (which is separate from the devcontainer) is somehow lost. There are also ways to make a backup of a named volume and recover it if needed but that is an advanced exercise not discussed at this time. - - Stop your devcontainer session - - Go to the `Images` menu in Docker Desktop, finding your `seasketch/geoprocessing-workspace`. - - If it shows as "IN USE" then switch to the `Containers` menu and stop all containers using `seasketch/geoprocessing-workspace`. - - Now switch back to `Images` and pull a new version of the `seasketch/geoprocessing-image` by hovering your cursor over the image, clicking the 3-dot menu on the right side and the clicking `Pull`. This will pull the newest version of this image. - - Once complete, you should be able to restart your devcontainer and it will be running the latest `geoprocessing-workspace`. +To delete a devcontainer and start over: + +- First, make sure you've pushed all of your code work to Github. +- Exit your active VSCODE devcontainer session. +- Open the Remote Explorer panel in the left sidebar. +- Right-click and delete the appropriate devcontainers and volumes to start over. You can also see and delete them from the Docker Desktop app, but it is not obvious which containers and volumes are the ones you want. +- Press `Ctrl-J` or `Ctrl-backtick` to open a new terminal + - The terminal will be in the `/workspaces` folder on the Ubuntu filesystem inside the container. It is completely separate from your host operating system. + - Type the command `lsb_release -a` to see the Ubuntu version. -### Option #3 - MacOS Bare Metal / Windows WSL +### Install Option #2 - Bare Metal + +Running 'bare metal' means running the geoprocessing framework directly on your computers operating system. It's up to you to install and maintain all necessary dependencies. #### MacOS -- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) - - For MacOS, choose either Apple chip or Intel chip as appropriate to your system and make sure it's running. If you don't know which you have, click the apple icon in the top left and select `About This Mac` and look for `Processor`. -- Install [Node JS](https://nodejs.org/en/download/) >= v16.0.0 - - [nvm](https://github.com/nvm-sh/nvm) is great for this, then `nvm install v16`. May ask you to first install XCode developer tools as well which is available through the App Store or follow the instructions provided when you try to install nvm. +- Install [Node JS](https://nodejs.org/en/download/) >= v20.0.0 + - [nvm](https://github.com/nvm-sh/nvm) is great for this, then `nvm install v20`. May ask you to first install XCode developer tools as well which is available through the App Store or follow the instructions provided when you try to install nvm. - Then open your Terminal app of choice and run `node -v` to check your node version - Install [VS Code](https://code.visualstudio.com) - Install recommended [extensions](https://code.visualstudio.com/docs/editor/extension-marketplace) when prompted. If not prompted, go to the `Extensions` panel on the left side and install the extensions named in [this file](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/templates/project/.vscode/extensions.json) -- Install [NPM](https://www.npmjs.com/) package manager >= v8.5.0 after installing node. The version that comes with node may not be recent enough. +- Install [NPM](https://www.npmjs.com/) package manager >= v10.5.0 after installing node. The version that comes with node may not be recent enough. - `npm --version` to check - `npm install -g latest` -- Install [Java runtime](https://www.java.com/en/download/) for MacOS (required by AWS CDK library) +- Install [GDAL](https://gdal.org/) + + - First install [homebrew](https://brew.sh/) + - `brew install gdal` + +- Install [Java runtime](https://www.java.com/en/download/) for MacOS (required for testing with Amazon DynamoDb Local) - Create a free Github account if you don't have one already - - Set your git username #### Windows @@ -172,7 +166,7 @@ In Windows: - Open start menu -> `Ubuntu on Windows` - This will start a bash shell in your Ubuntu Linux home directory -In Ubuntu: +In WSL Ubuntu: - Install [Java runtime](https://stackoverflow.com/questions/63866813/what-is-the-proper-way-of-using-jdk-on-wsl2-on-windows-10) in Ubuntu (required by AWS CDK library) - Install [Git in Ubuntu and Windows](https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git) @@ -187,13 +181,13 @@ In Ubuntu: ### Final Steps -Whichever option you chose, if you haven't already, establish the [username](https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=mac) and email address git should associate with your commits. +The last step, regardless of install option, is to set the [username](https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=mac) and email address git will associate with your commits. -You can set these per repository, or set them globall on your system for all repositories and override them as needed. Here's the commands to set globally for your environment. +You can set these per repository, or globally for all repositories on your system (and override as needed). Here's the commands to set globally for your environment. ```bash git config --global user.name "Your Name" -git config --global user.email "yourusername@yourprovider.com" +git config --global user.email "yourusername@youremail.com" ``` Now verify it was set: @@ -206,52 +200,7 @@ cat ~/.gitconfig cat .git/config ``` -At this point your system is ready for you to `create a new project`, or `setup an existing project` - -## Setup an exising geoprocessing project - -This use case is where a geoprocessing project already exists, but it was developed on a different computer. - -First, clone your existing geoprocessing project to your work environment, whether this is in your local docker devcontainer, Windows WSL, or bare metal on your operating system. - -### Link your source data - -1. figure out [which option](#link-project-data) was used to bring data into your geoprocessing project, and follow the steps to set it up. - -- Option 1, you're good to go, the data should already be in `data/src` and src paths in `project/datasources.json` should have relative paths pointing into it. -- Option 2, Look at `project/datasources.json` for the existing datasource paths and if your data file paths and operating system match you may be good to go. Try re-importing your data as below, and if it fails consider migrating to Option 1 or 3. -- Option 3, if you're running a devcontainer you'll need to have made your data available in workspace by mounting it from the host operating system via docker-compose.yml (see installation tutorial) or have somehow synced or downloaded it directly to your container. Either way, you then just need to symlink the `data/src` directory in your project to your data. Make sure you point it to the right level of your data folder. Check the src paths in `project/datasources.json`. If for example the source paths start with `data/src/Data_Received/...` and your data directory is at `/Users/alex/Library/CloudStorage/Box-Box/ProjectX/Data_Received`, you want to create your symlink as such - -```bash -ln -s /Users/alex/Library/CloudStorage/Box-Box/ProjectX data/src -``` - -Assuming `data/src` is now populated, you need to ensure everything is in order. - -2.Reimport your data - -This will re-import, transform, and export your data to `data/dist`, which is probably currently empty. - -```bash -npm run reimport:data -``` - -Say yes to reimporting all datasources, and no to publishing them (we'll get to that). - -If you see error, look at what they say. If they say datasources are not being found at their path, then something is wrong with your drive sync (files might be missing), or with your symlink if you used option 3. - -If all is well, you should see no error, and `data/dist` should be populated with files. In the Version Control panel your datasources.json file will have changes, including some updated timestamps. - -But what if git changes show a lot of red and green? - -- You should look closer at what's happening. If parts of the smoke test output (examples directory JSON files) are being re-ordered, that may just be because Javascript is being a little bit different in how it generates JSON files from another computer that previously ran the tests. -- If you are seeing changes to your precalc values in precalc.json, then your datasources may be different from the last person that ran it. You will want to make sure you aren't using an outdated older version. If you are using an updated more recent version, then convince yourself the changes are what you expect, for example total area increases or decreases. - -What if you just can't your data synced properly, and you just need to move forward? - -- If the project was deployed to AWS, then there will be a copy of the published data in the `datasets` bucket in AWS S3. -- To copy this data from AWS back to your `data/dist` directory use the following, assuming your git repo is named `fsm-reports-test` - - `aws s3 sync s3://gp-fsm-reports-test-datasets data/dist` +Your devcontainer environment is now ready for a project ## Create a New Geoprocessing Project @@ -285,6 +234,8 @@ You should eventually see your code commit proceed in the VSCode terminal. You c After this point, you can continue using git commands right in the terminal to stage code changes and commit them, or you can use VSCode's [built-in git support](https://code.visualstudio.com/docs/sourcecontrol/overview). +### Get VSCode Ready + #### If running devcontainer (Install Option 1) - Ensure your VSCode workspace is connected to your devcontainer @@ -333,7 +284,7 @@ This command uses `npx`, which comes with `npm` and allows you to execute comman As an example, assume you are developing reports for the country of `The Federated States of Micronesia`. ```text -? Choose a name for your project fsm-report-test +? Choose a name for your project fsm-reports-test ? Please provide a short description of this project Test drive ``` @@ -346,8 +297,8 @@ Now paste the URL of the github repository you created in the first step You will then be asked for the name and email that establishes you as the author of this project. It will default to your git settings. Change it as you see fit for establishing you as the author of the project. ```text -? Your name Alex -? Your email alex@gmail.com +? Your name [YOUR_NAME] +? Your email [YOUR_EMAIL] ``` Now provide your organization name associated with authoring this project @@ -362,7 +313,7 @@ Choose a software license. [SeaSketch](https://github.com/seasketch/next/blob/ma ? What software license would you like to use? BSD-3-Clause ``` -Choose an AWS region you would like to deploy the project. The most common is to choose `us-west-1` or `us-east-1`, the US coast closest to the project location. In some circumstances it can make sense to choose locations in Europe, Asia, Australia, etc. that are even closer but in practice this usually doesn't make a significant difference. +Choose an AWS region you would like to deploy the project. The most common is to choose `us-west-1` or `us-east-2`, the US coast closest to the project location. In some circumstances it can make sense to choose locations in Europe, Asia, Australia, etc. that are even closer but in practice this usually doesn't make a significant difference. ```text ? What AWS region would you like to deploy functions in? @@ -374,16 +325,16 @@ Now enter the type of planning area for your project. Choose Exclusive Economic ? What type of planning area does your project have? Exclusive Economic Zone (EEZ) ``` -Since you selected EEZ, it will now ask what countries EEZ to use. Choose Micronesia +Since you selected EEZ, it will now ask what countries EEZ to use. Choose Micronesian Exclusive Economic Zone ```text -? What countries EEZ is this for? Micronesia. +? What EEZ is this for? Micronesian Exclusive Economic Zone ``` If you answered `Other` to type of planning area it will now ask you for the name of this planning area. ```text -? Is there a more common name for this planning area to use in reports than Micronesia? (Use arrow keys) +? Is there a different name to use for this planning area than Micronesian Exclusive Economic Zone? (Use arrow keys) ❯ Yes No ``` @@ -421,13 +372,13 @@ The answers to these questions default to the extent of the entire world, which Next, to take full advantage of VSCode you will need to open your new project and establish it as a workspace. -#### If Running Devcontainer or (Install Option 1) +#### If Running Devcontainer (Install Option 1) -Once you have more than one folder under `/workspaces` backed by a git repository, VSCode will be default to a `multi-root` workspace. +Once you have more than one folder under `/workspaces` backed by a git repository, VSCode will default to a `multi-root` workspace. For the best experience, you will want open a single workspace in your VSCode for a single folder in your devcontainer. -`File` -> `Open folder` -> /workspaces/fsm-report-test +`File` -> `Open folder` -> /workspaces/fsm-reports-test VSCode should now reopen the under this new workspace, using the existing devcontainer, and you're ready to go. @@ -461,17 +412,17 @@ There are a variety of project configuration files. Many have been pre-populated - `datasources.json` - contains an array of one or more registered datasources, which can be global (url) or local (file path), with a format of vector or raster or subdivided. Global datasources can be manually added/edited in this file, but local datasources should use the [import](#importing-your-data) process. After import, datasources can be manually added/edited in this file. You will then want to run `reimport:data`, `precalc:data`, `precalc:clean`, and `test` to process the changes and make sure they are working as expected. Learn more about [datasources](../concepts/Concepts.md#datasources) - `metrics.json` - contains an array of one or more metric groups. Each group defines a metric to calculate, with one or more data classes, derived from one or more datasources, measuring progress towards a planning objective. An initial boundaryAreaOverlap metric group is included in the file by default that uses the global eez datasource. Learn more about [metrics](../concepts/Concepts.md#metrics) - `objectives.json` - contains an array of one or more objectives for your planning process. A default objective is included for protection of `20%` of the EEZ. Objectives must be manually added/edited in this file. Learn more about [objectives](../concepts/Concepts.md#objectives) - - `precalc.json` - contains precalculated metrics for combinations of geographies and datasources. Specifically it calculates for example the total area/count/sum of the portion of a datasources features that overlap with each geography. This file should not be manually edited. If you have custome metrics/precalculations to do, then use a separate file. Learn more about the [precalc](#precalc-data) command. + - `precalc.json` - contains precalculated metrics for combinations of geographies and datasources. Specifically it calculates for example the total area/count/sum of the portion of a datasources features that overlap with each geography. This file should not be manually edited. If you have custom precalculations to do for your project, then use a separate file. Learn more about the [precalc](#precalc-data) command. The object structure in many of the JSON files, particularly the `project` folder, follow strict naming and structure (schema) that must be maintained or you will get validation errors when running commands. Adding additional undocumented properties may be possible, but is not tested. The schemas are defined here: - [Basic](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/projectBasic.ts) -- [Geographies](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/geography.ts) -- [Datasources](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/datasource.ts) -- [MetricGroup](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts) - - [DataClass](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts) -- [Objective](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/objective.ts) -- [Precalc Metrics](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metrics.ts) +- [Geographies](https://github.com/seasketch/geoprocessing/blob/v6.1.0/packages/geoprocessing/src/types/geographies.ts) +- [Datasources](https://github.com/seasketch/geoprocessing/blob/v6.1.0/packages/geoprocessing/src/types/datasource.ts) +- [MetricGroup](https://github.com/seasketch/geoprocessing/blob/v6.1.0/packages/geoprocessing/src/types/metricGroup.ts) + - [DataClass](https://github.com/seasketch/geoprocessing/blob/v6.1.0/packages/geoprocessing/src/types/dataclass.ts) +- [Objective](https://github.com/seasketch/geoprocessing/blob/v6.1.0/packages/geoprocessing/src/types/objective.ts) +- [Metrics](https://github.com/seasketch/geoprocessing/blob/v6.1.0/packages/geoprocessing/src/types/metrics.ts) #### Project Assets @@ -511,7 +462,7 @@ npx tsx scripts/genRandomSketch.ts npx tsx scripts/genRandomSketch.ts 10 ``` -`genRandomFeature` - generates random Feature Polygons within the extent of your planning area, which are most commonly used as input to preprocessing functions. Run it without any arguments to generate a single Sketch polygon in the `examples/features` directory of your project. +`genRandomFeature` - generates random Feature Polygons within the extent of your planning area, which are most commonly used as input to preprocessing functions. Run it without any arguments to generate a single Feature polygon in the `examples/features` directory of your project. ```bash npx tsx scripts/genRandomFeature.ts @@ -628,13 +579,17 @@ For all of these options, you can tell if your data is out of sync: - `data/src` is out of date if the `Date modified` timestamp for a file is older than the timestamp for the same file wherever you source and copy your data from. - `data/dist` is out of date with `data/src` if the `Date modified` timestamp for a file is older than the timestamp for the same file in `data/src`. -##### Example data for tutorial - -This tutorial will use data for the Federated States of Micronesia downloaded from [Allen Coral Atlas](https://allencoralatlas.org/atlas/#8.67/-13.7942/-171.9575). (Note: you can download this data for free for any country. Turn on Maritime Boundaries, select your country’s EEZ, and download after creating an account.) Download `reefextent.gpkg` and `benthic.gpkg`, and make the data accessible to your project through one of the data linking methods described above. - #### Importing Your Data -The framework supports import of both vector and raster datasources and this tutorial assumes you have datasets that you want to import, accessible in the `data/src` directory, because you have [linked your project data](#link-project-data). If you are using the Allen Coral Atlas data described above, continue with [Import Vector Datasource](#import-vector-datasource). +This tutorial will use example data for the Federated States of Micronesia that has already been prepared. + +```bash +cd data/src +wget https://github.com/user-attachments/files/17577047/FSM_MSP_Data_Example_v2.zip +unzip FSM_MSP_Data_Example_v2.zip +mv FSM_MSP_Data_Example_v2/* . +rm -rf FSM_MSP_Data_Example_v2* +``` #### Import vector datasource @@ -645,16 +600,6 @@ Vector datasets can be any format supported by [GDAL](https://gdal.org/drivers/v - Shapefile - File Geodatabase -Importing a vector dataset into your project will: - -- Reproject the dataset to the WGS84 spherical coordinate system, aka EPSG:4326. -- Transform the dataset into one or more formats including the [flatgeobuf](https://flatgeobuf.org/) cloud-optimized format and GeoJSON -- Strip out any unnecessary feature properties (to reduce file size) -- Optionally, expand multi-part geometries into single part -- Calculates overall statistics including total area, and area by group property -- Output the result to the `data/dist` directory, ready for testing -- Add datasource to `project/datasource.json` - Start the import process and it will ask you a series of questions, press Enter after each one, and look to see if a default answer is provided that is sufficient: ```bash @@ -662,111 +607,99 @@ npm run import:data ? Type of data? Vector ``` -Assuming you are using the [FSM data](#example-data-for-tutorial) from Allen Coral Atlas available now in your `data/src` directory. Let's import the `reefextent` vector data from the geopackage. +--- ```bash -? Enter path to src file (with filename) data/src/reefextent.gpkg +? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource) Yes ``` -Select the name of the vector layer you want to import. The example reef extent data named `Micronesian Exclusive Economic Zone` in `reefextent.gpkg` +Respond `Yes` to allow precalculation. -```bash -? Select layer to import Micronesian Exclusive Economic Zone -``` +--- -Choose a datasource name that is different than any other datasourceId in `projects/datasources.json`. The command won't let you press enter if it's a duplicate. +By default mulitpolygons are split into polygons, which can save bandwidth when fetching features that overlap with a sketch. ```bash -? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename reefextent +? Should multi-part geometries be split into multiple single-part geometries? (can increase sketch overlap calc performance by reducing number of polygons +to fetch) Yes ``` -If your dataset contains one or more properties that classify the vector features into one or more categories, and you want to report on those categories in your reports, then you can enter those properties now as a comma-separated list. For example a coral reef dataset containing a `type` property that identifies the type of coral present in each polygon. In the case of our EEZ dataset, there are no properties like this so press Enter to continue without. +Respond yes to splitting polygons. + +--- ```bash -? Select feature properties that you want to group metrics by (Press to select, to toggle all, to invert selection) +? Enter path to src file (with filename) data/src/current-vector.gpkg ``` -By default, all extraneous properties will be removed from your vector dataset on import in order to make it as small as possible. Any additional properties that you want to keep in should be specified in this next question. If there are none, just press Enter. +We'll import data from the `current-vector` geopackage. + +--- + +It will now ask you for a datasource name, it should be unique, different than any other datasourceId in `projects/datasources.json`. The command won't let you press enter if it's a duplicate. ```bash -? Select additional feature properties to keep in final datasource (Press to select, to toggle all, to invert selection) +? Choose unique datasource name (use letters,numbers, -, _ to ensure will work) eez ``` -Mulitpolygons can be split into polygons for analysis, which can help report performance. +Enter the datasource name `eez`. + +--- + +A layer name must also be specified if your datasource can store multiple layers within it (geopackage). You can use the `ogrinfo` command to quickly see what layers are present in a vector dataset. If your dataset can only store one datasource such as a shapefile or a GeoJSON file, then the layer name should just be the name of the file (minus the extension). You can use the QGIS project file in the example data to view the available layers in the geopackage. ```bash -? Should multi-part geometries be split into multiple single-part geometries? (can increase sketch overlap calc performance by reducing number of polygons -to fetch) Yes +? Enter layer name, defaults to filename (eez_mr_osm) ``` -Typically you only need to published Flatgeobuf data, which is cloud-optimized so that geoprocessing functions can fetch features for just the window of data they need (such as the bounding box of a sketch). Flatgeobuf is automatically created. GeoJSON is also available if you want to be able to import data directly in your geoprocessing function typescript files, or inspect the data using a human readable format. Just press enter if you are happy with the default. +The layer in this geopackage we want is called `eez_mr_osm` so enter that now. + +--- + +If your dataset contains one or more properties that classify the vector features into one or more categories, and you want to report on those categories in your reports, then you can enter those properties now as a comma-separated list. For example a coral reef dataset containing a `type` propertie that identifies the type of coral present in each polygon. In the case of our EEZ dataset, there are no properties like this so this question is left blank. ```bash -? Select additional formats to publish (Press to select, to toggle all, to invert selection) - ◯ json - GeoJSON +? Enter feature property names that you want to group metrics by ( +separated by a comma e.g. prop1,prop2,prop3) ``` -If you want to use your data in analytics, respond `Yes` to allow precalculation. +The eez dataset has no attributes that we want to group features by so press Enter to skip this question. + +--- + +By default, all extraneous properties will be removed from your vector dataset on import in order to make it as small as possible. Any additional properties that you want to keep in should be specified in this next question. If there are none, just leave it blank. ```bash -? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource) Yes +? Enter additional feature property names to keep in final datasource (separated by a comma e.g. prop1,prop2,prop3). All others will be filtered out ``` -At this point the import will proceed and various log output will be generated. Once complete you will find: +The eez dataset has no additional properties we want to keep so press Enter to skip this question. -- The output file `data/dist/reefextent.fgb` and possibly `data/dist/reefextent.json` if you chose to generate it. -- An updated `project/datasources.json` file with a new entry at the bottom with a datasourceId of `reefextent` +--- -Vist `datasources.json` and check out your new datasource entry. Using the example data, the datasource entry should looks as follows: +By default, data will be imported into flatgeobuf format. Often, that's all you need. But if you want to be able to precalculate stats for this dataset, or import JSON data directly into your geoprocessing functions, or just have a human readable version of the data to verify it, then you want to include the GeoJSON format. -```json -{ - "src": "data/src/reefextent.gpkg", - "layerName": "Micronesian Exclusive Economic Zone", - "geo_type": "vector", - "datasourceId": "reefextent", - "formats": ["fgb"], - "classKeys": [], - "created": "2024-02-29T22:54:16.140Z", - "lastUpdated": "2024-02-29T22:54:16.140Z", - "propertiesToKeep": [], - "explodeMulti": true, - "precalc": true -} +```bash +? The following formats will automatically be created: fgb. What additional formats would you like created? (Press to select, to toggle all, to invert selection, and + to proceed) (Press to select, to toggle all, to invert selection) + ◯ json - GeoJSON ``` -If the import fails, try again double checking everything. It is most likely one of the following: +For the `eez` dataset, we want to precalculate state, so press spacebar to select `json` and then press the `Enter` key to proceed. -- You aren't running Docker Desktop (required for running GDAL commands) -- You provided a source file path that doesn't point to a valid dataset -- You aren't using a file format supported by GDAL -- The layer name or property names you entered are invalid +--- -##### Vector data with key parameter +At this point the import will proceed and various log output will be generated. Once complete you will find: -What if you have a vector file with multiple classes you want to group metrics by? The other [downloaded example data](#example-data-for-tutorial) `benthic.gpkg` separates different benthic habitats (Sand, Seagrass, Coral) by a `class` parameter. The import for this datasource looks as follows: +- The output file `data/dist/eez.fgb`. +- An updated `project/datasources.json` file with a new entry at the bottom with a datasourceId of `eez`. You'll see all the answers to your questions. -```bash -npm run import:data -> Vector -> data/src/benthic.gpkg -> Micronesian Exclusive Economic Zone -> benthic -> class -> {none} -> Yes -> {none} -> Yes -``` +If the import fails, try again double checking everything. It is most likely one of the following: -The resulting `datasource.json` entry will look as follows: +- You specified the wrong source file path. +- You specified the wrong layer name -```json -{ - "src": "data/src/benthic.gpkg", - "layerName": "Micronesian Exclusive Economic Zone", - "geo_type": "vector", - "datasourceId": "benthic", - "formats": ["fgb"], - "classKeys": ["class"], - "created": "2024-02-29T21:47:44.858Z", - "lastUpdated": "2024-02-29T21:47:44.858Z", - "propertiesToKeep": ["class"], - "explodeMulti": true, - "precalc": true -} -``` +You can now make edits to datasource.json at any time and then run `reimport:data` to regenerate the files in `data/dist`. #### Import raster datasource @@ -776,8 +709,8 @@ Raster datasets can be any format supported by [GDAL](https://gdal.org/drivers/r Importing a raster dataset into your project will: -- Reproject the data to the WGS84 spherical coordinate system, aka EPSG:4326. -- Extract a single band of data +- Reproject the data to an equal area projection called WGS 84 / NSIDC EASE-Grid 2.0 Global, aka EPSG:6933. This makes accurate area calculations possible. +- Extract a single band of data (the underlying geoblaze library is not performant with multi-band data) - Transform the raster into a [cloud-optimized GeoTIFF](https://www.cogeo.org/) - Calculates overall statistics including total count and if categorical raster, a count per category - Output the result to the `data/dist` directory, ready for testing @@ -790,290 +723,159 @@ npm run import:data ? Type of data? Raster ``` -Assuming you are using the [FSM example data](#link-project-data) package and it is accessible via the `data/src` directory (using [data link option 2 or 3](#link-project-data)). Let's import the `yesson_octocorals` raster which is a `binary` raster containing cells with value 1 where octocorals are predicted to be present, and value 0 otherwise. +--- ```bash -? Enter path to src file (with filename) data/src/current-raster/offshore/inputs/features/yesson_octocorals.tif +? Will you be precalculating summary metrics for this datasource after import? (Typically yes if reporting sketch % overlap with datasource) Yes ``` -Choose a datasource name that is different than any other datasourceId in `projects/datasources.json`. The command won't let you press enter if it's a duplicate. +--- + +You will then be mistakenly asked about splitting multi-part geometries. This is an error. Just hit enter to continue ```bash -? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename octocorals +Should multi-part geometries be split into multiple single-part geometries? (can increase sketch overlap calc performance by reducing number of polygons to fetch) ``` -If the raster has more than one band of data, select the band you want to import. +--- + +We'll import the `yesson_octocorals` TIFF file ```bash -? Enter band number to import 1 +? Enter path to src file (with filename) data/src/yesson_octocorals.tif ``` -Choose what the raster data represents -`Quantitative` - measures one thing. This could be a binary 0 or 1 value thatidentifies the presence or absence of something, or a value that varies over the geographic surface such as temperature. -`Categorical` - measures presence/absence of multiple groups. The value of each cell in the band is a numeric group identifier, and thus each cell can represent one and only one group at a time. +--- + +Now enter the datasource name `octocorals` ```bash -❯ Quantitative - values represent amounts, measurement of single thing - Categorical - values represent groups +? Choose unique datasource name (a-z, A-Z, 0-9, -, _), defaults to filename octocorals ``` -At this point the import will proceed and various log output will be generated. - -Do not be concerned about an error that an ".ovr" file could not be found. This is expected. Once complete you will find: - -- The output file `data/dist/octocorals.tif` -- An updated `project/datasources.json` file with a new entry at the bottom with a datasourceId of `octocorals`. +```` -If the import fails, try again double checking everything. It is most likely one of the following: +If the raster has more than one band of data, select the band you want to import, the first band is 1. -- You aren't running Docker Desktop (required for running GDAL commands) -- You provided a source file path that doesn't point to a valid dataset -- You aren't using a file format supported by GDAL +```bash +? Enter band number to import 1 +```` -#### Global datasource +This raster has just 1 band so accept the default of 1 -You are also able to use one of the global data sources already provided in `datasources.json`. They are already imported. +--- -### Precalc Data +Choose what the raster data represents. -Once you have geographies and datasources configured, you can precalculate metrics for them. +`Quantitative` - measures one thing. This could be a binary 0 or 1 value that identifies the presence or absence of something, or a value that varies over the geographic surface such as temperature. +`Categorical` - measures presence/absence of multiple groups. The value of each cell in the band is a numeric group identifier, and thus each cell can represent one and only one group at a time. ```bash -npm run precalc:data +❯ Quantitative - cell value (number) represents a measurement of a single thing + Categorical - cell value (number) represents a category the cell is assigned to ``` -To avoid precalculating data you don't require, when asked if you wish to precalcate specific metrics, select `Yes, by datasource` and then select `global-eez-mr-v12` (used in the provided Size report) and your imported datasource (in this tutorial: `reefextent`). +The octocorals raster is a binary 0/1 raster representing absence or presence, so choose `Quantitative`. -Precalc will start a web server on localhost port 8001 that serves up data from `data/dist` access by this command. - -You need to have at least one geography in geographies.json and one datasource in datasources.json with the `precalc` property set to true. The command will measure (total area, feature count, value sum) the portion of a datasources features that fall within the geography (intersection). +--- -These overall metric values are used almost exclusively for calculating % sketch overlap, they provide the denominator value. For example, if you have a geography representing the EEZ of a country, and you have a sketch polygon, and you have a datasource representing presence of seagrass. And you want to know the percentage of seagrass that is within the sketch, relative to how much seagrass is in the whole EEZ boundary. +It will then ask what raster formats you would like to import. There is only one answer so just hit Enter. -`seagrass sketch % = seagrass area within sketch / seagrass area within EEZ` +```bash +? What formats would you like to publish? Suggested formats already selected tif - Cloud Optimized GeoTiff +``` -We can and often need to precalculate that denominator for all possible geographies. That is what the `precalc:data` command does, it precalculates a set of metrics for all datasources against all geographies, where the `precalc` property is set to true in both the datasource and the geography. +--- -Precalc metrics are then imported into a report client, and combined with the sketch overlap metrics returned from the geoprocessing function, to produce a percentage. +It will then ask you if there is a nodata value for this raster. QGIS or the `gdalinfo` command can tell you this. -Tips for precalculation: +```bash +? Enter nodata value for raster or leave blank +``` -- You have to re-run `precalc:data` every time you change a geography or datasource. -- Set `precalc:false` for datasources that are not currently used, or are only used to define a geography (not displayed in reports). This is why the datasource for the default geography for a project is always set by default to `precalc: false`. -- If you are using one of the [global-datasources](https://github.com/seasketch/global-datasources) in your project, and you want to use it in reporting % sketch overlap, so you've set `precalc:true`, strongly consider defining a `bboxFilter`. This will ensure that precalc doesn't have to fetch the entire datasource when precalculating a metric, which can be over 1 Gigabyte in size. Also consider setting a `propertyFilter` to narrow down to just the features you need. This filter is applied on the client-side so it won't reduce the number of features you are sending over the wire. +For octocorals, there is no nodata value so just hit Enter. -#### Precalc Data Cleanup +--- -If you remove a geography/datasource, then in order to remove their precalculated metrics from `precalc.json`, you will need to run the cleanup command. +At this point the import will proceed and various log output will be generated. -```bash -npm run precalc:data:cleanup -``` +Once complete you will find: -### Create Metric Group +- The output file `data/dist/octocorals.tif` +- An updated `project/datasources.json` file with a new entry at the bottom with a datasourceId of `octocorals`. -The metric group is your report configuration. There is one metric group per individual report. It links everything together and defines what data you want to show in the individual report. The metric group is used in both the function that calculates statistics and the component which displays the results. Often, projects will include ~8 reports, with each report focusing on a goal or type of data. +If the import fails, try again double checking everything. It is most likely one of the following: -Navigate to `metrics.json`, where metric groups are stored. There is already a report here – `boundaryAreaOverlap`. This is the metric group used to calculate how much of the EEZ is within our sketch, using the `global-eez-mr-v12` datasource we [precalculated](#precalc-data). +- You specified the wrong source file path. +- You specified the wrong band number -We’re going to create a report that uses the vector layer just imported. We want to see how much our sketch overlaps with the vector layer. Pick a metricId to be the title of your report in camelCase (`coralReef`), the type of report (`areaOverlap`), and the classes you want to show in the report. Your classes can look a myriad of ways, depending on whether all the data is from a single file, or multiple files. All data within a metric group must be in the same format (raster or vector). +### Update Geography -Our example `reefextent` data is a simple vector file. We can set classId to be anything. Our metric group looked as follows: +Open the file `project/geographies.json`. You will find a default geography object there with `geographyId: "eez-mr-v12`. Replace this entire geography object with the following new one: ```json { - "metricId": "coralReef", - "type": "areaOverlap", - "classes": [ - { - "classId": "reefextent", - "display": "Coral Reef", - "datasourceId": "reefextent" - } - ] + "geographyId": "eez", + "datasourceId": "eez", + "display": "Micronesian Exclusive Economic Zone", + "groups": ["default-boundary"], + "precalc": true } ``` -#### Metric group for vector data source with multiple classes +This effectively updates the `eez` geography to use the local datasource you just imported, instead of the global datasources that comes with the project. This is common if you have a local datasource that is more accurate than the global datasource. -Our example data `benthic` is a single file with different habitats defined by a `class` parameter. While there were many types of habitats, we may want to only focus on Sand, Rubble, and Rock. In this case, `classKey` must be `class` and `classIds` have to match the features in the vector file. My metric group would look like this: +### Update Metric Group -```json -{ - "metricId": "benthicHabitat", - "type": "areaOverlap", - "classes": [ - { - "classId": "Sand", - "classKey": "class", - "display": "Sand", - "datasourceId": "benthic" - }, - { - "classId": "Rock", - "classKey": "class", - "display": "Rock", - "datasourceId": "benthic" - }, - { - "classId": "Rubble", - "classKey": "class", - "display": "Rubble", - "datasourceId": "benthic" - } - ] -} -``` +Now open the file `project/metrics.json`. You will find a preinstalled MetricGroup object there with `metricId` of `boundaryAreaOverlap`. -#### Metric group with two data sources +Change it's `datasourceId` value from `global-eez-mr-v12` to `eez`. -You can have classes from multiple data sources in one metric group. If we wanted both the reef extent data and benthic habitat data in one report, the metric group can look as follows: +This will configure the `boundaryAreaOverlap` geoprocessing function to use the `eez` datasource when calculating its boundary overlap values. The `SizeCard` report component will also uses this MetricGroup configuration when reading and reporting this metric. You'll learn more about this later. -```json -{ - "metricId": "benthicHabitat", - "type": "areaOverlap", - "classes": [ - { - "classId": "reefextent", - "display": "Coral Reef", - "datasourceId": "reefextent" - }, - { - "classId": "Sand", - "classKey": "class", - "display": "Sand", - "datasourceId": "benthic" - }, - { - "classId": "Rock", - "classKey": "class", - "display": "Rock", - "datasourceId": "benthic" - }, - { - "classId": "Rubble", - "classKey": "class", - "display": "Rubble", - "datasourceId": "benthic" - } - ] -} -``` +### Precalc Data -#### Metric group with quantitative raster data sources +Precalc is all about calculating big expensive summary spatial metrics ahead of time. The question our report needs to answer is "how much of all octocorals in the EEZ, is within my Sketch polygon"? -An example of a metric group `fishingEffort` which displays multiple quantitative raster data files. This report has been made using [Global Fishing Watch Apparent Fishing Effort data](https://globalfishingwatch.org/dataset-and-code-fishing-effort/), which reports fishing effort in hours. To calculate for the sum of fishing effort within our plan, we would use `type = valueOverlap`. +This is calculated as: +`octocorals sketch % = area of octocorals within sketch / area of octocorals within EEZ` -```json -{ - "metricId": "fishingEffort", - "type": "valueOverlap", - "classes": [ - { - "datasourceId": "all-fishing", - "classId": "all-fishing", - "display": "All Fishing 2019-2022" - }, - { - "datasourceId": "drifting-longlines", - "classId": "drifting-longlines", - "display": "Drifting Longline" - }, - { - "datasourceId": "pole-and-line", - "classId": "pole-and-line", - "display": "Pole and Line" - }, - { - "datasourceId": "set-longlines", - "classId": "set-longlines", - "display": "Set Longline" - }, - { - "datasourceId": "fixed-gear", - "classId": "fixed-gear", - "display": "Fixed Gear" - } - ] -} -``` +We can precalculate the denominator of this equation ahead of time. The `precalc` command will calculate how much of a datasources features/raster cells is within each project geography. This can measured as `area`, `sum` of `value`, `count` of features/raster cells, etc. -#### Metric group with categorical raster data sources +The first way to enable geographies and datasources for precalc is to ensure that they have `precalc: true` in geographies.json and datasources.json. This is already true for the `eez` and `octocorals`. -An example of a metric group `fishRichness` which displays a categorical raster `fishRichness.tif`. The raster data displays the number of key fish species present in each raster cell -- from 1 to 5 species. `classId` should be set to the corresponding numerical value within the raster. +Now let's run the precalc: -```json -{ - "metricId": "fishRichness", - "type": "countOverlap", - "classes": [ - { - "datasourceId": "fishRichness", - "classId": "1", - "display": "1 species" - }, - { - "datasourceId": "fishRichness", - "classId": "2", - "display": "2 species" - }, - { - "datasourceId": "fishRichness", - "classId": "3", - "display": "3 species" - }, - { - "datasourceId": "fishRichness", - "classId": "4", - "display": "4 species" - }, - { - "datasourceId": "fixed-gear", - "classId": "5", - "display": "5 species" - } - ] -} +```bash +npm run precalc:data ``` -### Create Report +Now select `Yes, by datasource` and then `Let me choose`. -```bash -npm run create:report -``` +Press space to select only: -Select the type of report you need for your data (`vector` or `raster`), and the name of your new metric group. For this tutorial, select `Vector overlap report` and [`benthicHabitat`](#metric-group-with-two-data-sources). +- `eez` +- `octocorals` -This command does a lot for you: +Then press enter and: -- Adds a function to `src/functions` -- Adds a test file to `src/functions` -- Adds a component (the front-end of any report) to `src/components` -- Adds a story to `src/components` -- Adds your new function to a list in `geoprocessing.json` that is used by AWS lambda +- Precalc will start a web server on localhost port 8001 that serve up data from `data/dist`. +- Precalc will see the two datasources you selected and that they have `precalc: true`. It will also see the one geography `eez` that is defined in geographies.json that has `precalc: true`. It will then calculate `area`, `sum`, and `count` metrics for each datasource, in combination with each geography. +- `project/precalc.json` will be updated with the new values. -Open these outputs and take a look at them. Edits to the statistic you want calculated (i.e.calculating average instead of sum, etc) should happen in your function (in this tutorial: `src/functions/benthicHabitat.ts`). Edits to the way the analytics are displayed (i.e. changing labels, converting units, adding text context, etc) should happen in your component (in this tutorial: `src/components/BenthicHabitat.tsx`). +Tips for precalculation: -Add your new component to `src/components/ViabilityPage.tsx` or `src/components/RepresentationPage.tsx`. For example, `Viability.tsx` can now look like this, so our new report appears beneath the Size report and the Sketch Attributes report: +- Do not be concerned if you see an error that an ".ovr" file could not be found. This is expected. +- You have to re-run `precalc:data` every time you change a geography or datasource. +- Set `precalc:false` for datasources that are not currently used, or are only used to define a geography (not displayed in reports). This is why the datasource for the default geography for a project is always set by default to `precalc: false`. +- If you are using one of the [global-datasources](https://github.com/seasketch/global-datasources) in your project, and you want to use it in reporting % sketch overlap, so you've set `precalc:true`, strongly consider defining a `bboxFilter`. This will ensure that precalc doesn't have to fetch the entire datasource when precalculating a metric, which can be over 1 Gigabyte in size. Also consider setting a `propertyFilter` to narrow down to just the features you need. This filter is applied on the client-side so it won't reduce the number of features you are sending over the wire. -```typescript -import React from "react"; -import { SizeCard } from "./SizeCard"; -import { SketchAttributesCard } from "@seasketch/geoprocessing/client-ui"; -import { BenthicHabitat } from "./BenthicHabitat"; - -const ReportPage = () => { - return ( - <> - - - - - ); -}; +#### Precalc Data Cleanup -export default ReportPage; +If you remove a geography/datasource, then in order to remove their precalculated metrics from `precalc.json`, you will need to run the cleanup command. + +```bash +npm run precalc:data:cleanup ``` ### Test your project @@ -1084,7 +886,7 @@ Now that you have sample sketches and features, you can run the test suite. npm run test ``` -This will start a web server on port 8080 that serves up the `data/dist` folder. Smoke tests will run geoprocessing functions against all of the sketches and features in the `examples` folder. `projectClient.getDatasourceUrl` will automatically read data from localhost:8080 instead of the production S3 bucket url using functions like `fgbFetchAll()`, `geoblaze.parse()`. +This will start a web server on port 8080 that serves up the `data/dist` folder. Smoke tests will run geoprocessing functions against all of the sketches and features in the `examples` folder. `projectClient.getDatasourceUrl` will automatically read data from localhost:8080 instead of the production S3 bucket url using functions like `loadFgb()`, `geoblaze.parse()`. #### Smoke Tests @@ -1116,7 +918,7 @@ See the [Testing](../Testing.md) page for additional options for testing your pr #### Default geography -When smoke tests run, they should run for the default geography, without needing to be told so, but you can still override it. That's why this is the standard boilerplate for a geoprocessing function. +When smoke tests run, they should run for the default geography, without needing to be told so, because of the standard boilerplate code for a geoprocessing function: ```typescript export async function boundaryAreaOverlap( @@ -1129,10 +931,7 @@ When smoke tests run, they should run for the default geography, without needing }); ``` -If you call boundaryAreaOverlap with only a sketch as input (no extraParams), then `getFirstFromParam()` will return `undefined`, so -`project.getGeographyById` will receive `undefined` and fallback to the geography assigned to the `default-boundary` group, which every project should have at least one, or throw an error. - -If you want to run smoke tests against a different geography, just to see what it produces, then you will have to do it explicitly: +If you want to run smoke tests against a different geography, just to see what it produces, then you will have to do it explicitly in your smoke test: ```typescript const metrics = await boundaryAreaOverlap(sketch, { @@ -1140,10 +939,6 @@ const metrics = await boundaryAreaOverlap(sketch, { }); ``` -if you use a `GeographySwitcher` UI component in your story, then it will allow you to switch geographies, but the story will still only receive the metrics for the smoke test you ran, which may only have been run for the default geography. In this situation, the report will load the precalc metrics for the geography you've chosen in the denominator for percentages, but the numerator metrics will always be for the default geography, or whatever geography you passed to your smoke test. - -If you've used template-ocean-eez and selected an EEZ, the default geography is your selected EEZ, and you're ready to run your storybook and check out your reports! - ### Storybook You can view the results of your smoke tests using Storybook. It's already configured to load all of the smoke test output for each story. @@ -1380,6 +1175,78 @@ If you are seeing errors or unexpected behavior, try any one of the following st ## Additional Tutorials +### Setup an exising geoprocessing project + +This use case is where a geoprocessing project already exists, but it was developed on a different computer. + +First, clone your existing geoprocessing project to your work environment, whether this is in your local docker devcontainer or Windows WSL. + +#### Link your source data + +1. figure out [which option](#link-project-data) was used to bring data into your geoprocessing project, and follow the steps to set it up. + +- Option 1, you're good to go, the data should already be in `data/src` and src paths in `project/datasources.json` should have relative paths pointing into it. +- Option 2, Look at `project/datasources.json` for the existing datasource paths and if your data file paths and operating system match you may be good to go. Try re-importing your data as below, and if it fails consider migrating to Option 1 or 3. +- Option 3, if you're running a devcontainer you'll need to have made your data available in workspace by mounting it from the host operating system via docker-compose.yml (see installation tutorial) or have somehow synced or downloaded it directly to your container. Either way, you then just need to symlink the `data/src` directory in your project to your data. Make sure you point it to the right level of your data folder. Check the src paths in `project/datasources.json`. If for example the source paths start with `data/src/Data_Received/...` and your data directory is at `/Users/alex/Library/CloudStorage/Box-Box/ProjectX/Data_Received`, you want to create your symlink as such + +```bash +ln -s /Users/alex/Library/CloudStorage/Box-Box/ProjectX data/src +``` + +Assuming `data/src` is now populated, you need to ensure everything is in order. + +2.Reimport your data + +This will re-import, transform, and export your data to `data/dist`, which is probably currently empty. + +```bash +npm run reimport:data +``` + +Say yes to reimporting all datasources, and no to publishing them (we'll get to that). + +If you see error, look at what they say. If they say datasources are not being found at their path, then something is wrong with your drive sync (files might be missing), or with your symlink if you used option 3. + +If all is well, you should see no error, and `data/dist` should be populated with files. In the Version Control panel your datasources.json file will have changes, including some updated timestamps. + +But what if git changes show a lot of red and green? + +- You should look closer at what's happening. If parts of the smoke test output (examples directory JSON files) are being re-ordered, that may just be because Javascript is being a little bit different in how it generates JSON files from another computer that previously ran the tests. +- If you are seeing changes to your precalc values in precalc.json, then your datasources may be different from the last person that ran it. You will want to make sure you aren't using an outdated older version. If you are using an updated more recent version, then convince yourself the changes are what you expect, for example total area increases or decreases. + +What if you just can't your data synced properly, and you just need to move forward? + +- If the project was deployed to AWS, then there will be a copy of the published data in the `datasets` bucket in AWS S3. +- To copy this data from AWS back to your `data/dist` directory use the following, assuming your git repo is named `fsm-reports-test` + - `aws s3 sync s3://gp-fsm-reports-test-datasets data/dist` + +### Managing Devcontainers + +- To delete a devcontainer: + - This is often the easiest way to "start over" with your devcontainer. + - First, make sure you've pushed all of your code work to Github. + - Make sure you stop your active VSCODE devcontainer session. + - Open the Remote Explorer panel in the left sidebar. + - You can right-click and delete any existing devcontainers and volumes to start over. + - You can also see and delete them from the Docker Desktop app, but it might not be obvious which containers and volumes are which. The VSCode Remote Explorer window gives you that context. + +![Manage Devcontainers](assets/ManageDevcontainers.jpg "Manage Devcontainers") + +- To upgrade your devcontainer: + - The devcontainer settings in this repository may change/improve over time. You can always pull the latest changes for your `geoprocessing-devcontainer` repository, and then `Cmd-Shift-P` to open command palette and type `“DevContainers: Rebuild and Reopen locally”`. +- To upgrade the `geoprocessing-workspace` Docker image + - This devcontainer builds on the `geoprocessing-workspace` Docker image published at [Docker Hub](https://hub.docker.com/r/seasketch/geoprocessing-workspace/tags). It will always install the latest version of this image when you setup your devcontainer for the first time. + - It is up to you to upgrade it after the initial installation. The most likely situation is: + - You see some changes in the [Changelog](https://github.com/seasketch/docker-gp-workspace/blob/main/Changelog.md) that you want to utilize. + - You are upgrading the `geoprocessing` library for your project to a newer version and it requires additional software that isn't in your current devcontainer. This situation should be flagged in the geoprocessing [changelog](https://github.com/seasketch/geoprocessing/blob/dev/CHANGELOG.md). + - In both cases you should be able to simply update your docker image to the latest. The easiest way to do this is to: + - Push all of your unsaved work in your devcontainer to Github. This is in case the Docker `named volume` where your code lives (which is separate from the devcontainer) is somehow lost. There are also ways to make a backup of a named volume and recover it if needed but that is an advanced exercise not discussed at this time. + - Stop your devcontainer session + - Go to the `Images` menu in Docker Desktop, finding your `seasketch/geoprocessing-workspace`. + - If it shows as "IN USE" then switch to the `Containers` menu and stop all containers using `seasketch/geoprocessing-workspace`. + - Now switch back to `Images` and pull a new version of the `seasketch/geoprocessing-image` by hovering your cursor over the image, clicking the 3-dot menu on the right side and the clicking `Pull`. This will pull the newest version of this image. + - Once complete, you should be able to restart your devcontainer and it will be running the latest `geoprocessing-workspace`. + ### Creating a geoprocessing function The `create:report` function builds both a geoprocessing function and component based on a metric group. If you instead wish to strictly create a function, you can use: diff --git a/website/versioned_docs/version-6.1.0/tutorials/assets/devcontainer-blue.jpg b/website/versioned_docs/version-6.1.0/tutorials/assets/devcontainer-blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12a47c2c7a57471b1cde89b74a607c79c335d8b8 GIT binary patch literal 15980 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 XlW|aDsNb$a{C+Lsf9E@#JoG;RR`4Ic literal 0 HcmV?d00001 diff --git a/website/versioned_sidebars/version-6.1.0-sidebars.json b/website/versioned_sidebars/version-6.1.0-sidebars.json index b843f11e1c..9764debf50 100644 --- a/website/versioned_sidebars/version-6.1.0-sidebars.json +++ b/website/versioned_sidebars/version-6.1.0-sidebars.json @@ -14,13 +14,7 @@ }, { "type": "category", - "label": "Library", - "collapsed": false, - "items": ["Migrating", "Extending"] - }, - { - "type": "category", - "label": "Advanced Guides", + "label": "Advanced", "items": [ "architecture/Architecture", "antimeridian/Antimeridian", @@ -29,6 +23,12 @@ "Testing", "Contributing" ] + }, + { + "type": "category", + "label": "Library", + "collapsed": false, + "items": ["Migrating", "Extending"] } ] }

7rj9te0{{O2wP0lS!6 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 PyznoPSd8%LKNJ52&5YGh literal 0 HcmV?d00001 diff --git a/website/docs/multiBoundary/multiBoundary.md b/website/docs/multiBoundary/multiBoundary.md new file mode 100644 index 0000000000..9f6a68967a --- /dev/null +++ b/website/docs/multiBoundary/multiBoundary.md @@ -0,0 +1,33 @@ +# Multiple Planning Boundaries + +Sometimes a planning process may need to support multiple distinct non-overlapping planning units, so that planning can be done in each unit independently, with its own planning targets/objectives. For example the California MLPA planning process has 4 geographically distinct planning regions - North, North Cental, Central, South. + +The California MLPA process also considers a completely different system of planning units called bioregions of which there are 3 - Central, North, South. + +Some projects might need to support multiple sets of planning units within a larger overall planning. The overall planning area overlaps with each of the planning units. + +So seports might be required to calculate how well each Sketch/Sketch Collection meets planning objectives for **each of the planning units** as well as the overall planning boundary. If a % value metric is to be calculated (value in sketch / value overall), this requires calculating what portion of each Sketch is in each unit as well as how much value for each datasource is in each unit. + +The geoprocessing framework solves all of these use cases using [geographies](../concepts/Concepts.md#geographies), and the helper functions for working with them. + +If the user will be presented with metrics for all geographies at once, then you can [iterate over the geographies](https://github.com/seasketch/california-reports/blob/main/src/functions/eelgrass.ts#L44) in your geoprocessing function to calculate metrics and display them in your report client. + +```typescript +geographies.map(async (geography) => { + const classMetrics = await Promise.all( + metricGroup.classes.map(async (curClass) => { + // calculate metrics + } + ) +} +``` + +In the report client, you can display overall metrics, and allow the user to dig into metrics by planning unit and by sketch. + +![Multi Boundary Default](./multiBoundaryDefault.jpg "Multi Boundary Default") + +## Geography Switcher + +If a simpler report user experience is needed, where the user should work with only a single planning unit at a time, then you can use a [GeographySwitcher](../api/client-ui/functions/GeographySwitcher.md). It's a component inserted in the top-level report client + +![GeographySwitcher](./geography-switcher.jpg "GeographySwitcher") diff --git a/website/docs/multiBoundary/multiBoundaryDefault.jpg b/website/docs/multiBoundary/multiBoundaryDefault.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fffb323fac67fe8eac0038e48064836a4410802 GIT binary patch literal 49794 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 literal 0 HcmV?d00001 diff --git a/website/docs/precalc.md b/website/docs/precalc.md new file mode 100644 index 0000000000..67d71fa8c2 --- /dev/null +++ b/website/docs/precalc.md @@ -0,0 +1,23 @@ +# Precalc Data + +Precalc is all about calculating expensive spatial metrics ahead of time. + +When you run the precalc script it starts a local web server on port 8001 that serves up the datasources in `data/dist`. + +The precalc script then gets all your project datasources with `precalc: true`, and all your project geographies with `precalc: true`, and then calculate `area`, `sum`, and `count` metrics for each combination of datasource and geography. + +Once complete `project/precalc.json` is updated with the new values. + +Tips: + +- You have to re-run `precalc:data` every time you change a geography or datasource. +- Set `precalc:false` for datasources that are not currently used, or are only used to define a geography (not displayed in reports). This is why the datasource for the default geography for a project is always set by default to `precalc: false`. +- If you are using one of the [global-datasources](https://github.com/seasketch/global-datasources) in your project, and you want to use it in reporting % sketch overlap, so you've set `precalc:true`, strongly consider defining a `bboxFilter`. This will ensure that precalc doesn't have to fetch the entire datasource when precalculating a metric, which can be over 1 Gigabyte in size. Also consider setting a `propertyFilter` to narrow down to just the features you need. This filter is applied on the client-side so it won't reduce the number of features you are sending over the wire. + +#### Precalc Data Cleanup + +If you remove a geography/datasource, then in order to remove their precalculated metrics from `precalc.json`, you will need to run the cleanup command. + +```bash +npm run precalc:data:cleanup +``` diff --git a/website/docs/preprocessing.md b/website/docs/preprocessing.md new file mode 100644 index 0000000000..f01f9591a0 --- /dev/null +++ b/website/docs/preprocessing.md @@ -0,0 +1,187 @@ +# Preprocessing + +Preprocessing function are invoked by the SeaSketch platform, on a user-drawn shape, right after the user finishes drawing it. It's a specialized function that validates a drawn shape and potentially modifies it, such as to remove portions of the shape outside the planning boundary. This "clipping" of the shape allows a user to overdraw beyond the boundary and it will be clipped right to the edge of the boundary. + +In the `src/functions` directory you will find four preprocessing functions that come with every project, and they are further configureable or customizeable to meet your needs: +`validatePolygon` - verifies shape is not self-crossing, is at least 500 square meters in size, and no larger than 1 million square kilometers. +`clipToLand` - clips the shape to just the portion on land, as defined by OpenStreeMap land polygons. Includes validatePolygon. +`clipToOcean` - clips the shape to remove the portion on land, as defined by OpenStreetMap land polygons. Includes validatePolygon. +`clipToOceanEez` - clips the shape to keep the portion within the boundary from the coastline to the outer boundary of the EEZ. Includes validatePolygon. + +These preprocessing functions are already registered in the projects `geoprocessing.json` file to be deployeod as [AWS Lambda](https://aws.amazon.com/pm/lambda) functions. You can then select one of these preprocessors for your sketch class in your SeaSketch project and it will be called automatically right after a user finishes drawing a shape. If the preprocessing function throws with an error message, it will be presented to the user and they will be allowed to edit their shape and resubmit. + +## Testing + +Each preprocessing function alread has its own unit test and smoke test file. For example: + +- Unit: `src/functions/validatePolygon.test.ts` +- Smoke: `src/functions/validatePolygonSmoke.test.ts` + +**Unit tests** ensure the preprocessor produces exact output for very specific input features and configuration, and throws errors properly. + +**Smoke tests** are about ensuring the preprocessor behaves properly for your project location, and that its results "look right" for a variety of input features. It does this by loading example shapes from the project `examples/features` directory. It then runs the preprocessing function on the examples, makes sure they produce "truthy" output, and saves them to `examples/output`. + +To test your preprocessing functions, we need to create example features within the extent of your planning boundary. To do this you need the bounding box. QGIS and other tools can provide it. + +Here's another way you can acquire it. Assume your planning boundary is in a file called `boundary.shp`. Use the `ogrinfo` command to get the metadata for that shape. + +```bash +ogrinfo -so -json data/src/boundary +``` + +You will see deep in the output a `geometryFields` property, which contains the bounding box extent of your layer. Use the `jq` utility to extract this extent, here's an example: + +```bash +ogrinfo -so -json data/src/boundary.shp | jq -c .layers[0].geometryFields[0].extent +[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298] +``` + +With this extent you can now use the `genRandomPolygon` script to generate some features: + +```bash +npx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon1.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" + +npx tsx scripts/genRandomPolygon.ts --outDir examples/features --filename polygon2.json --bbox "[135.31244183762126,-1.1731109652985907,165.67652822599732,13.445432925389298]" +``` + +This will output an example Feature and an example FeatureCollection to `examples/features`. + +Now run the tests: + +```bash +npm test +``` + +You can now look at the geojson output visually by opening it in QGIS or pasting it into geojson.io. This is the best way to verify the preprocessor worked as expected. You should commit the output files to your git repository so that you can track changes over time. + +## Creating A Geoprocessing Function + +There are three approaches to creating a preprocessing function, from high level to low level: + +- `clipToPolygonDatasources` - performns one or more clip operations on a polygon feature using one or more datasources. +- `clipToPolygonFeatures` - performs one or more clip operations on a polygon feature using one or more arrays of Polygon features. +- custom function - create your own preprocessing function from scratch, without the clip operations helper. + +The example preprocessors that come with the project all use `clipToPolygonFeatures`. + +Let's compare them. + +### clipToPolygonDatasources + +This method is useful if you use the `Datasources` feature of the framework. You will need to have imported a polygon datasource to clip using the `data:import` command, or added a third-party datasource to `project/datasources.json` manually. + +This function will perform one or more clip operations on the input `feature`. For each clip operation, you specify the type (intersection or difference) and the datasource. It will fetch the features for the datasource using the appropriate client. The operations are applied in the order defined by the array. + +```typescript +export async function clipToLand( + feature: Feature | Sketch, + extraParams: DefaultExtraParams = {}, +): Promise { + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + + const keepLand: DatasourceClipOperation = { + datasourceId: "global-clipping-osm-land", + operation: "intersection", + options: { + unionProperty: "gid", // gid is assigned per country + propertyFilter: { + property: "gid", + values: extraParams?.countryIds || [project.basic.planningAreaId] || [], + }, + }, + }; + + return clipToPolygonDatasources(project, feature, [keepLand], { + maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, + ensurePolygon: true, + }); +} +``` + +### clipToPolygonFeatures + +This method is useful if you import your datasources manually, have a third-party URL for a cloud-optimized datasource, or if you simply want to have lower-level control over how you access your project datasource. The preprocessors that come with the project all demonstrate fetching from a third-party VectorDataSource. Here are examples of importing JSON directly, and fetching features from a project datasource already published to S3 as a cloud-optimized flatgeobuf file. + +#### Import GeoJSON features + +Assume you have a file `data/src/boundary.js` containing the following: + +```json +//ToDo +``` + +If you have a pure GeoJSON file `data/src/boundary.json`: + +```json +{ + { + "type": "FeatureCollection", + "name": "multi_class_valuability", + "crs": { + "type": "name", + "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } + }, + "features": [ + /// features + ] + } +} +``` + +you can import it directly and cast it to the appropriate type (or parse and validate the type with the library of your choice): + +```typescript +import { FeatureCollection, Polygon } from "@seasketch/geoprocessing"; +import boundary from "./boundary.json" assert { type: "json" }; + +const boundaryFC = boundary as FeatureCollection; +``` + +#### Fetch Flatgeobuf + +```typescript +export async function clipToLand(feature: Feature | Sketch): Promise { + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + const featureBox = bbox(feature); + + const landDatasource = new VectorDataSource( + "https://d3p1dsef9f0gjr.cloudfront.net/", + ); + const landFC = await landDatasource.fetchUnion(featureBox, "gid"); + + const keepLand: FeatureClipOperation = { + operation: "intersection", + clipFeatures: landFC.features, + }; + + return clipToPolygonFeatures(feature, [keepLand], { + maxSize: 500_000 * 1000 ** 2, // Default 500,000 KM + enforceMaxSize: false, + ensurePolygon: true, + }); +} +``` + +## Custom Preprocessor + +Here's a custom preprocessing function that simply verifies the Polygon feature is valid and not self-crossing + +```typescript +export async function validatePolygon(feature: Feature): Promise { + if (!isPolygonFeature(feature)) { + throw new ValidationError("Input must be a polygon"); + } + + const kinkPoints = kinks(feature); + if (kinkPoints.features.length > 0) { + throw new ValidationError("Your sketch polygon crosses itself."); + } + + return feature; +} +``` diff --git a/website/docs/projectclient.md b/website/docs/projectclient.md new file mode 100644 index 0000000000..785bca860c --- /dev/null +++ b/website/docs/projectclient.md @@ -0,0 +1,108 @@ +# Project Client + +The ProjectClient is the bridge that connects project configuration with code. It makes it easier to bring together your projects datasources, geographies, objectives, metric group definitions, and precalculated metrics and use them in geoprocessing functions and report clients. + +Every geoprocessing project has a ProjectClient in `project/projectClients.ts`. It doesn't do much beside imports your projects configuration files and instantiate an instance of [ProjectClientBase](https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html). This base class is what provides all of the methods for conveniently accessing your projects configuration. It is worthwhile to review the available methods, and look at [other examples](https://github.com/search?q=org%3Aseasketch+%22project.%22&type=code) of how the project client is used. Here are some snippets. + +Report client examples ([link](https://github.com/seasketch/cadiz-reports/blob/e83cc1c54132bd06a4bf048ea8a9fc5449c815b1/src/components/CommunitiesCard.tsx)): + +```typescript +const projectBounds = project.basic.bbox; +const metricGroup = project.getMetricGroup("marineCommunities"); +const totalMetrics = project.getPrecalcMetrics( + metricGroup, + "area", + metricGroup.classKey +); + +const ds = project.getVectorDatasourceById(geography.datasourceId) +const url = project.getDatasourceUrl(ds) +const geogFeatures = await getFeatures>( + ds, url, { bbox: projectBounds } +); + +return ( + <> + + {(data: ReportResult) => { + let singleMetrics = data.metrics.filter( + (m) => m.sketchId === data.sketch.properties.id + ); + + const finalMetrics = [ + ...singleMetrics, + ...toPercentMetric( + singleMetrics, + precalcMetrics, + project.getMetricGroupPercId(metricGroup) + ), + ]; +... +``` + +Geoprocessing function examples ([link](https://github.com/seasketch/gdansk-bay-reports/blob/e1143a069d13ba3a9cfbebae312fa250abea715c/src/functions/evAreaOverlap.ts)): + +```typescript +export async function evAreaOverlap( + sketch: Sketch | SketchCollection, + extraParams: DefaultExtraParams = {} +): Promise { + const geographyId = getFirstFromParam("geographyIds", extraParams); + const curGeography = project.getGeographyById(geographyId, { + fallbackGroup: "default-boundary", + }); + const clippedSketch = await clipToGeography(sketch, curGeography); + const box = clippedSketch.bbox || bbox(clippedSketch); + + const metricGroup = project.getMetricGroup("evAreaOverlap"); + + let cachedFeatures: Record[]> = {}; + + const polysByBoundary = ( + await Promise.all( + metricGroup.classes.map(async (curClass) => { + if (!curClass.datasourceId) { + throw new Error(`Missing datasourceId ${curClass.classId}`); + } + const ds = project.getDatasourceById(curClass.datasourceId); + if (isInternalVectorDatasource(ds)) { + const url = `${project.dataBucketUrl()}${getFlatGeobufFilename(ds)}`; + + // Fetch features overlapping with sketch, pull from cache if already fetched + const dsFeatures = + cachedFeatures[curClass.datasourceId] || + (await loadFgb>(url, box)); + cachedFeatures[curClass.datasourceId] = dsFeatures; + + // If this is a sub-class, filter by class name, exclude null geometry too + const finalFeatures = + ds.classKeys.length > 0 + ? dsFeatures.filter((feat) => { + const classId = Number(curClass.classId) + ? Number(curClass.classId) + : curClass.classId; + return ( + feat.geometry && + feat.properties![ds.classKeys[0]] === classId + ); + }, []) + : dsFeatures; + + console.log(finalFeatures); + return finalFeatures; + } + + return []; + }) + ) + ).reduce[]>>((acc, polys, classIndex) => { + return { + ...acc, + [metricGroup.classes[classIndex].classId]: polys, + }; + }, {}); +``` diff --git a/website/docs/structure.md b/website/docs/structure.md new file mode 100644 index 0000000000..eaa155b21d --- /dev/null +++ b/website/docs/structure.md @@ -0,0 +1,59 @@ +# Project Structure + +## Configuration Files and Scripts + +There are a variety of project configuration files. Many have been pre-populated usings your answers to the initial questions. You can hand edit most of these files later to change them, with some noted exceptions. + +- `package.json` - Javascript [package](https://docs.npmjs.com/cli/v9/configuring-npm/package-json) configuration that defines things like the project name, author, and third-party dependencies. The [npm](https://docs.npmjs.com/cli/v6/commands) command is typically used to add, upgrade, or remove dependencies using `npm install`, otherwise it can be hand-edited. +- `tsconfig.json` - contains configuration for the [Typescript](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) compiler +- `project/` - contains project configuration files. + - `basic.json` - contains basic project configuration + - `planningAreaType`: `eez` or `other` + - bbox - the bounding box of the project as [bottom, top, left, right]. This generally represents the area that users will draw shapes. It can be used as a boundary for clipping, to generate examples sketches, and as a window for fetching from global datasources. + - `planningAreaId` - the unique identifier of the planning region used by the boundary dataset. If your planningAreaType is `eez` and you want to change it, you'll find the full list [in github](https://raw.githubusercontent.com/seasketch/geoprocessing/dev/packages/geoprocessing/scripts/global/datasources/mr-eez-precalc.json), just look at the UNION property for the id to use + - `planningAreaName` - the name of the planning region (e.g. Micronesia) + - `externalLinks` - central store of links that you want to populate in your reports. + - `languages` - array of languages to enable for translation. Master list of language codes are in `src/i18n/languages.json`. + - `geoprocessing.json` - file used to register assets to be bundled for deployment. If they aren't registered here, then they won't be included in the bundle. + - `geographies.json` - contains one or more planning geographies for your project. If you chose to start with a blank project template, you will have a default geography of the entire world. If you chose to start with the Ocean EEZ template, you will have a default geography that is the EEZ you chose at creation time. Geographies must be manually added/edited in this file. You will then want to re-run `precalc` and `test` to process the changes and make sure they are working as expected. Learn more about [geographies](./concepts/Concepts.md#geographies) + - `datasources.json` - contains an array of one or more registered datasources, which can be global (url) or local (file path), with a format of vector or raster or subdivided. Global datasources can be manually added/edited in this file, but local datasources should use the [import](./dataimport.md) process. After import, datasources can be manually added/edited in this file. You will then want to run `reimport:data`, `precalc:data`, `precalc:clean`, and `test` to process the changes and make sure they are working as expected. Learn more about [datasources](./concepts/Concepts.md#datasources) + - `metrics.json` - contains an array of one or more metric groups. Each group defines a metric to calculate, with one or more data classes, derived from one or more datasources, measuring progress towards a planning objective. An initial boundaryAreaOverlap metric group is included in the file by default that uses the global eez datasource. Learn more about [metrics](./concepts/Concepts.md#metrics) + - `objectives.json` - contains an array of one or more objectives for your planning process. A default objective is included for protection of `20%` of the EEZ. Objectives must be manually added/edited in this file. Learn more about [objectives](./concepts/Concepts.md#objectives) + - `precalc.json` - contains precalculated metrics for combinations of geographies and datasources. Specifically it calculates for example the total area/count/sum of the portion of a datasources features that overlap with each geography. This file should not be manually edited. If you have custome metrics/precalculations to do, then use a separate file. Learn more about the [precalc](./precalc.md) command. + +The object structure in many of the JSON files, particularly the `project` folder, follow strict naming and structure (schema) that must be maintained or you will get validation errors when running commands. Adding additional undocumented properties may be possible, but is not tested. The schemas are defined here: + +- [Basic](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/projectBasic.ts) +- [Geographies](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/geography.ts) +- [Datasources](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/datasource.ts) +- [MetricGroup](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metricGroup.ts) + - [DataClass](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/dataclass.ts) +- [Objective](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/objective.ts) +- [Precalc Metrics](https://github.com/seasketch/geoprocessing/blob/dev/packages/geoprocessing/src/types/metrics.ts) + +## Project Assets + +- `src/` - contains all source code + - `clients/` - report clients are React UI components that can be registered with SeaSketch and when given a sketch URL as input, are able to run the appropriate geoprocessing functions and display a complete report. This can include multiple report pages with tabbed navigation. + - `components/` - components are the UI building blocks of report clients. They are small and often reusable UI elements. They can be top-level ReportPage components, ResultCard components within a page that invoke geoprocessing functions and display the results, or much lower level components like custom Table or Chart components. You choose how to build them up into sweet report goodness. + - `functions/` - contains preprocessor and geoprocessor functions that take input (typicall sketch features) and return output (typically metrics). They get bundled into AWS Lambda functions and run on-demand. + - `i18n/` - contains building blocks for localization aka language translation in reports. + - `scripts/` - contains scripts for working with translations + - `lang/` - contains english terms auto-extracted from this projects report clients and their translations in one or more languages. + - `baseLang/` - contains english terms and their translations for all UI components and report client templates available through the geoprocessing library. Used to seed the `lang` folder and as a fallback. + - `config.json` - configuration for integration with POEditor localization service. + - `extraTerms.json` - contains extra translations. Some are auto-generated from configuration on project init, and you can add more such as plural form of terms. + - `i18nAsync.ts` - creates an i18next instance that lazy loads language translations on demand. + - `i18nSync.ts` - creates an i18nnext instance that synchronously imports all language translations ahead of time. This is not quite functional, more for research. + - `languages.json` - defines all of the supported languages. New languages codes can be added manually, or using `upgrade` command. + +A [ProjectClient](https://seasketch.github.io/geoprocessing/api/classes/geoprocessing.ProjectClientBase.html) class is available in `project/projectClients.ts` that is used in project code for quick access to all project configuration including methods that ease working with them. This is the bridge that connects configuration with code and is the backbone of every geoprocessing function and report client. + +## Other Files + +- `node_modules` - contains all of the npm installed third-party code dependencies defined in package.json +- `README.md` - default readme file that becomes the published front page of your repo on github.com. Edit this with information to help your users understand your project. It could include information or sources on metric calculations and more. +- `package-lock.json` - contains [cached metadata](https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json) on the 3rd party modules you have installed. Updates to this file are made automatically and you should commit the changes to your repository at the same time as changes to your package.json. +- `.nvmrc` - a lesser used config file that works with nvm to define the node version to use for this project. If you use nvm to manage your node version as suggested then you can run `nvm use` in your project and it will install and switch to this version of node. + +To learn more, check out the [Architecture](./architecture/Architecture.md) page diff --git a/website/docs/thirdpartydata/assets/AllenDownload.jpg b/website/docs/thirdpartydata/assets/AllenDownload.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fa811bf7161981050c584849fc02ae6fc34cdde GIT binary patch literal 351162 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