Skip to content

Reimplement data workflow with subdivision/indexing/cache #347

@twelch

Description

@twelch

Need:

Previously there was a workflow that would subdivide vector data using PostGIS subdivision, use bundle-features to publish the data with an index (custom), and VectorDataSource to quickly fetch vector data using the index, given a bounding box and optionally merge the subdivided polygon back into a larger one. fetched results would be cached client-side to avoid extra re-fetches.

The previous solution:

  • existed before Flatgeobuf and Cloud-optimized geotiff's with built-in index existed and were stable.
  • only worked for polygon data, and not all polygons (were still some error cases)
  • had a lot of manual scripted steps to manage it
  • has suffered from bit rot, the bundle-features code no longer works, particularly the Slonik Postgres interface.

The problem:

  • global datasets like political boundaries and shoreline have too large of polygons to be efficiently fetched for a lot of countries.

Immediate vector workaround solution:

  • Subdivide dataset manually using whatever makes sense, doesn't have to be PostGIS, perhaps https://github.com/jvail/spl.js/
  • publish subdivided flatgeobuf as normal (import:data/publish:data) and use getFeatures to fetch
  • union result using Turf (likely much slower than VectorDataSource which can stitch back together subdivided quickly). Can we repurpose old union code?

Full replacement solution would:

  • support both vector and raster
  • JS client - build on top of or into Geoblaze and Flatgeobuf clients.
  • client-side cache - will need to cache using a unique way to identify the range of data fetched (byte range? for flatgeobuf). And a way to read it back out client-side. Support reuse of cache across lambda invocations via shared global memory
  • provide client-side caching
  • Union - previous implementation could do this very quickly. Consider options - Turf could certainly do it.

References:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions