Stage 1 of the GIS Analytical Tools concept — client-side spatial analysis: - src/analysis/overlay.js: vector overlays (intersect / clip / difference / union-dissolve) on Turf.js, reprojecting to WGS84 and merging attributes (intersect keeps both layers', clip keeps only A's). - src/analysis/zonal.js: vector-in-vector zonal statistics — count / sum / mean / min / max / total area per zone, with centroid-in-zone (default) or any-overlap membership. - Bounding-box pre-filtering in both: only genuinely overlapping pairs reach the expensive geometry test. 43 zones x 25,004 parcels now completes in ~106 ms; previously it was refused as too large. - src/analysis-modal.js + markup: Analysis panel with "Apply to" scoping — whole layer, current map view, selected features, or the catch of a drawn Circle/Area. Reached from a new "Analyse" dock button. - MapView.addCOGLayer() for Cloud-Optimized GeoTIFF display (WebGLTile + GeoTIFF source, imported lazily); listVectorLayers(); getSelectedFeatures(). - Circle/Area analysis popup: one "Export" button (PDF folded into the export modal as a fourth format, field-rename table hidden for it) plus an "Analyse" button that opens the panel pre-scoped to the intersecting features. - vite.config.js: code-split turf, geotiff and pako so the eager bundle is unchanged (~283 kB). Giving pako its own chunk also fixes a circular chunk between jspdf and geotiff, which share it via fast-png. Drawing-tool fixes carried in the same working tree: - Delete/Backspace key deletes the selection via the EditBar's Delete interaction (same undoable block as the button). - Multi-select: shift-click toggles, Ctrl/Cmd-drag box-selects; helper layers (vertex overlay, GPS) excluded. - Undo: split/merge/divide wrapped in undo blocks so one press reverses the whole operation; vertex-overlay churn no longer pollutes the undo stack; sources are re-scanned and the stack cleared when edit mode is entered, so deletes on sub-grouped layers are undoable. NOTE: the undo behaviour is not yet confirmed on-device. - ol-ext TouchCursor gated to touch-only devices, so hybrid touchscreen laptops keep the normal cursor. Service worker v12 -> v13. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
914 B
JSON
38 lines
914 B
JSON
{
|
|
"name": "lupmis2-pwa",
|
|
"version": "1.0.0",
|
|
"type": "module",
|
|
"description": "LUPMIS2 Field Data Collection PWA with offline SQLite and maps",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview"
|
|
},
|
|
"dependencies": {
|
|
"@popperjs/core": "^2.11.8",
|
|
"@turf/area": "^7.3.5",
|
|
"@turf/boolean-intersects": "^7.3.5",
|
|
"@turf/boolean-point-in-polygon": "^7.3.5",
|
|
"@turf/centroid": "^7.3.5",
|
|
"@turf/difference": "^7.3.5",
|
|
"@turf/helpers": "^7.3.5",
|
|
"@turf/intersect": "^7.3.5",
|
|
"@turf/union": "^7.3.5",
|
|
"bootstrap": "^5.3.3",
|
|
"bootstrap-icons": "^1.11.3",
|
|
"jspdf": "^4.2.1",
|
|
"jspdf-autotable": "^5.0.7",
|
|
"ol": "^10.3.0",
|
|
"ol-ext": "^4.0.24",
|
|
"shp-write": "^0.3.2",
|
|
"shpjs": "^6.2.0",
|
|
"sqlocal": "^0.16.0"
|
|
},
|
|
"devDependencies": {
|
|
"vite": "^6.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=18.0.0"
|
|
}
|
|
}
|