From 08875fa84409385609a280149e2b711fbe7297c6 Mon Sep 17 00:00:00 2001 From: Chris Lyons Date: Mon, 20 Apr 2026 09:15:10 -0400 Subject: [PATCH] docs: narrow scope away from native CAD plugin work The roadmap previously committed abovepy to shipping native plugins for Civil 3D, Carlson, and OpenRoads Designer / MicroStation, with LandXML surface export positioned as the shared feed into those plugins. We are not pursuing that CAD-plugin direction. This commit aligns the public roadmap, landing copy, and plugin README with that decision. Changes: - v2.2 section retitled from "CAD/Survey Export Formats" to "Export Formats". Drops the LandXML and contour-DXF bullets; keeps the generic LAS and GeoTIFF entries. - v2.3 section drops the Civil 3D plugin prototype and updates its theme to "Analysis APIs" only. - v3.0 section no longer enumerates Civil 3D / Carlson / OpenRoads plugins. It now reads as an open theme, with the one concrete commitment being the scheduled removal of `to_landxml()`. - Non-Goals gains an explicit entry stating native CAD-platform plugins are out of scope; generic file-format interop remains in scope. - Target Users table updates Surveyor and Civil Engineer primary-tool columns to reflect what abovepy actually supports today (Python, QGIS, ArcGIS Pro) rather than tools we do not integrate with. - Platform Support table drops the Civil 3D / Carlson / ORD rows. - Landing page no longer lists LandXML among promoted export formats. - QGIS plugin README marks `to_landxml()` as deprecated and scheduled for removal in v3.0. `to_landxml()` itself remains in v2.1.x unchanged. The deprecation warning lands in v2.2.0 and the function is removed in v3.0.0 per the standard deprecation window. No code, tests, or public API are modified in this commit. --- ROADMAP.md | 71 +++++++++------------------------------ docs/community/roadmap.md | 31 +++++++++-------- docs/index.md | 2 +- qgis/aboveqgis/README | 2 +- 4 files changed, 32 insertions(+), 74 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 42fe21d..d786bfb 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -42,10 +42,8 @@ Priorities can shift based on community feedback and KyFromAbove program updates - Manifest schema: file paths, checksums (SHA-256), CRS, acquisition dates, tile count, AOI WKT - CLI: `abovepy package --county Franklin -o ./delivery` -### CAD/Survey Export Formats -- **LandXML surface export** — TIN triangulation from DEM via rasterio + scipy, output as LandXML 1.2. This is the universal format Civil 3D, Carlson, and OpenRoads all import natively. -- **Contour DXF export** — contour lines as DXF polylines via ezdxf library. Consumable by every CAD platform. -- **LAS point cloud export** — non-COPC LAS 1.4 for older tools that can't read COPC (laspy) +### Export Formats +- **LAS point cloud export** — non-COPC LAS 1.4 for tools that can't read COPC (laspy) - **GeoTIFF DEM packaging** — survey-grade metadata: EPSG:3089, NAVD88 vertical datum, US survey feet units ### Oblique Intelligence @@ -60,12 +58,11 @@ Priorities can shift based on community feedback and KyFromAbove program updates - Richer STAC asset handling — expose all assets, runtime conformance checks, graceful CQL2 fallback **Surfaces:** Python, CLI, ArcGIS Pro, QGIS -**New dependencies:** `ezdxf` (DXF export), `scipy` (TIN triangulation) **Tests:** ~60 new tests ## v2.3 (Mid Term) -**Theme: Analysis APIs and Civil 3D prototype** +**Theme: Analysis APIs** ### Analysis APIs - `abovepy.sample(point, product)` — elevation at a point @@ -75,64 +72,29 @@ Priorities can shift based on community feedback and KyFromAbove program updates - `abovepy.change_detection(bbox, product_before, product_after)` — difference map - Phase comparison workflows (Phase 2 vs Phase 3 elevation change) -### Civil 3D Plugin Prototype -- .NET 8.0 C# plugin for AutoCAD Civil 3D 2025+ -- Ribbon button: "Get KyFromAbove Data" -- AOI from drawing extent or user-picked polygon/polyline -- Product selector dropdown matching abovepy products -- Calls abovepy CLI via subprocess → generates LandXML + LAS package -- Auto-imports TIN Surface and point cloud into active drawing -- Targets Autodesk App Store distribution - ### Other - Optional `SearchResult.to_xarray()` via `stackstac` or `odc-stac` - Shareable MapLibre GL JS web viewer templates -**Surfaces:** Python, CLI, ArcGIS Pro, QGIS, Civil 3D (prototype) +**Surfaces:** Python, CLI, ArcGIS Pro, QGIS ## v3.0 (Long Term) -**Theme: Native design-tool integration** - -All CAD plugins use a shared file-based architecture: abovepy generates LandXML, LAS, GeoTIFF, and DXF outputs → thin platform wrappers import them into each host application. - -### Civil 3D Plugin v1 (.NET C#) -- "AboveC3D" ribbon tab: Get Data, Package Site, Import Surface -- AOI from drawing extent or user-picked polyline/polygon -- Product picker dropdown -- Auto-creates Civil 3D TIN Surface from LandXML, loads point cloud from LAS -- Corridor-aware data retrieval -- Distribution: Autodesk App Store - -### Carlson Plugin v1 (AutoLISP + batch) -- "AboveKY" menu in Carlson Survey / Civil / Mining -- Commands: ABOVEKY_SEARCH, ABOVEKY_DOWNLOAD, ABOVEKY_SURFACE -- LISP calls abovepy CLI via shell → imports LandXML DTM -- Distribution: installer package, Carlson reseller channel -- Target: Kentucky's large surveyor user base - -### OpenRoads Designer / MicroStation Addin (Python) -- Uses MicroStation 2024+ native Python API -- "KyFromAbove" script category: Get Terrain, Get Imagery, Get Point Cloud -- Calls abovepy directly (pip-installed in MicroStation Python) or via subprocess -- Imports LandXML as terrain model -- Distribution: Bentley Developer Network or manual install - -### Cross-Platform Architecture -``` -abovepy package CLI - └── Outputs: LandXML, LAS, GeoTIFF, DXF, manifest.json - ├── Civil 3D plugin reads LandXML → creates TIN Surface - ├── Carlson command reads LandXML → creates DTM - └── ORD script reads LandXML → creates terrain model -``` +**Theme: TBD — scope set after v2.2 / v2.3 feedback.** + +Candidate directions: +- Deeper analysis: corridor-aware workflows, multi-temporal change detection, volumetric pipelines +- Offline / cached data support for field use +- Server-side processing surfaces (TiTiler extensions, STAC-aware services) + +Breaking API cleanup lands here. `to_landxml()` (deprecated in v2.2) is scheduled for removal in v3.0. ## Target Users | Persona | Primary tools | Primary needs | |---------|---------------|---------------| -| **Surveyor** | Civil 3D, Carlson | EPSG:3089, feet buffers, LandXML surfaces, provenance, clean deliverables | -| **Civil engineer** | Civil 3D, ORD, Carlson | Corridor search, cut/fill, phase comparison, DEM surfaces, LAS import | +| **Surveyor** | Python, QGIS, ArcGIS Pro | EPSG:3089, feet buffers, provenance, clean deliverables | +| **Civil engineer** | Python, ArcGIS Pro, QGIS | Corridor search, cut/fill, phase comparison, DEM surfaces, LAS import | | **GIS analyst** | ArcGIS Pro, QGIS, Python | Broad search, QGIS interop, phase comparison, lazy loading | | **Planner** | ArcGIS Pro, QGIS, web | County/area search, ortho access, flood screening | | **Emergency management** | ArcGIS Pro, web, mobile | Rapid site assessment, oblique inspection, flood analysis | @@ -145,13 +107,10 @@ abovepy package CLI | **CLI** | Full | +package | +analysis | Full | | **ArcGIS Pro** | Toolbox (5 tools) | +packaging | +analysis | maintained | | **QGIS** | Plugin v1 (4 tools) | +packaging | +analysis | maintained | -| **Civil 3D** | — | File import (LandXML) | Plugin prototype | Plugin v1 | -| **Carlson** | — | File import (LandXML) | — | Plugin v1 | -| **ORD / MicroStation** | — | File import (LandXML, LAS) | — | Python scripts | ## Non-Goals - Generic STAC client functionality (use pystac-client directly) - Non-Kentucky data sources - Reimplementing PDAL, stackstac, or TiTiler -- Building CAD/BIM editing features (abovepy delivers data, not design tools) +- Native plugins or add-ins for CAD platforms (Civil 3D, Carlson, OpenRoads Designer, MicroStation). Generic file-format interop (GeoTIFF, LAS, GeoPackage) is in scope; design-tool-specific integration is not. diff --git a/docs/community/roadmap.md b/docs/community/roadmap.md index 3f419b3..2be63a6 100644 --- a/docs/community/roadmap.md +++ b/docs/community/roadmap.md @@ -31,44 +31,46 @@ Priorities can shift based on community feedback and KyFromAbove program updates ## v2.2 (Mid Term) -**Theme: Deliverables, oblique intelligence, design-tool formats** +**Theme: Deliverables, oblique intelligence** - `SearchResult.package()` — clipped DEMs, orthos, point clouds bundled with footprints, previews, manifest, provenance, and disclaimer -- **CAD/survey export formats** — LandXML surfaces (Civil 3D / Carlson), contour DXF, LAS point clouds (non-COPC for older tools), GeoTIFF DEMs with survey-grade metadata -- Package outputs consumable by Python, ArcGIS Pro, QGIS, Civil 3D, Carlson, and ORD +- **Export formats** — LAS point clouds (non-COPC for tools that can't read COPC), GeoTIFF DEMs with survey-grade metadata (EPSG:3089, NAVD88, US survey feet) +- Package outputs consumable by Python, ArcGIS Pro, and QGIS - Oblique spatial search by point/AOI with nearest-frame selection - 4-direction oblique bundles for site inspection - JSON sidecar parsing for camera metadata, footprints, and timestamps - QGIS interoperability — GeoPackage outputs, GeoParquet indexes, QGIS-friendly layer packaging - Richer STAC asset handling — expose all assets, runtime conformance checks, graceful CQL2 fallback - ArcGIS Pro toolbox — packaging tool, oblique inspection tool +- `to_landxml()` deprecation notice (removal scheduled for v3.0) ## v2.3 (Long Term) -**Theme: Analysis APIs, Civil 3D plugin, advanced workflows** +**Theme: Analysis APIs, advanced workflows** - Stable analysis APIs: `sample`, `profile`, `zonal_stats`, `cut_fill`, `change_detection`, `flood_fill` - Phase comparison workflows (Phase 2 vs Phase 3 elevation change) -- **Civil 3D plugin prototype** — ribbon button / tool palette for "Get KyFromAbove data for this drawing extent." Delivers DEM surface and point cloud directly into the active drawing. Targets AutoCAD App Store distribution. - Optional xarray/dask bridge for lazy array loading (`pip install abovepy[xarray]`) - Shareable web viewer templates (MapLibre GL JS) - Parcel-based and route/corridor-based search (if validated) ## v3.0 (Future) -**Theme: Native design-tool integration** +**Theme: TBD — scope set after v2.2 / v2.3 feedback.** -- **Carlson Software plugin** — menu command for KyFromAbove surface/point cloud import. Targets Carlson's large Kentucky surveyor user base. -- **OpenRoads Designer / MicroStation addin** — .NET addin for terrain import, corridor-aware data retrieval. Targets KYTC and Bentley-shop engineers. -- Unified plugin architecture — shared AOI extraction, product selection dialog, and format negotiation across all platforms -- Offline/cached data support for field use +Candidate directions: +- Deeper analysis: corridor-aware workflows, multi-temporal change detection, volumetric pipelines +- Offline / cached data support for field use +- Server-side processing surfaces (TiTiler extensions, STAC-aware services) + +Breaking API cleanup lands here. `to_landxml()` is scheduled for removal in v3.0. ## Target Users | Persona | Primary tools | Primary needs | |---------|---------------|---------------| -| **Surveyor** | Civil 3D, Carlson | EPSG:3089, feet buffers, LandXML surfaces, provenance, clean deliverables | -| **Civil engineer** | Civil 3D, ORD, Carlson | Corridor search, cut/fill, phase comparison, DEM surfaces, LAS import | +| **Surveyor** | Python, QGIS, ArcGIS Pro | EPSG:3089, feet buffers, provenance, clean deliverables | +| **Civil engineer** | Python, ArcGIS Pro, QGIS | Corridor search, cut/fill, phase comparison, DEM surfaces, LAS import | | **GIS analyst** | ArcGIS Pro, QGIS, Python | Broad search, QGIS interop, phase comparison, lazy loading | | **Planner** | ArcGIS Pro, QGIS, web | County/area search, ortho access, flood screening | | **Emergency management** | ArcGIS Pro, web, mobile | Rapid site assessment, oblique inspection, flood analysis | @@ -81,13 +83,10 @@ Priorities can shift based on community feedback and KyFromAbove program updates | **CLI** | Full | Full | Full | Full | Full | | **ArcGIS Pro** | Toolbox (5 tools) | +provenance | +packaging, +oblique | +analysis | maintained | | **QGIS** | File interop | Plugin v1 (Processing tools) | +packaging, +oblique | +analysis | maintained | -| **Civil 3D** | — | — | File import (LandXML, DXF) | Plugin prototype | Plugin v1 | -| **Carlson** | — | — | File import (LandXML, DXF) | — | Plugin v1 | -| **ORD / MicroStation** | — | — | File import (GeoTIFF, LAS) | — | Addin v1 | ## Non-Goals - Generic STAC client functionality (use pystac-client directly) - Non-Kentucky data sources - Reimplementing PDAL, stackstac, or TiTiler -- Building CAD/BIM editing features (abovepy delivers data, not design tools) +- Native plugins or add-ins for CAD platforms (Civil 3D, Carlson, OpenRoads Designer, MicroStation). Generic file-format interop (GeoTIFF, LAS, GeoPackage) is in scope; design-tool-specific integration is not. diff --git a/docs/index.md b/docs/index.md index 86ca3ea..1b8111e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,7 +13,7 @@ hide:

Download & Export

-

Concurrent downloads with resume. Estimate size before committing. Export to GeoTIFF, GeoPackage, Shapefile, GeoParquet, or LandXML.

+

Concurrent downloads with resume. Estimate size before committing. Export to GeoTIFF, GeoPackage, Shapefile, or GeoParquet.

🌎
diff --git a/qgis/aboveqgis/README b/qgis/aboveqgis/README index 7fdafa2..a9afa89 100644 --- a/qgis/aboveqgis/README +++ b/qgis/aboveqgis/README @@ -39,9 +39,9 @@ Tools: Export Formats (Python) ----------------------- - - to_landxml() — DEM to TIN surface for Civil 3D, Carlson, OpenRoads - to_stl() — DEM to 3D-printable mesh for Bambu Studio, Cura, Blender - to_geotiff(), to_geopackage(), to_shapefile() + - to_landxml() — DEM to TIN surface (deprecated, scheduled for removal in v3.0) Data Source -----------