Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roadmap 2025: The current state and candidate issues for the geobase package #254

Open
navispatial opened this issue Dec 6, 2024 · 0 comments
Labels
documentation Improvements or additions to documentation 🌐 geobase Related to the code package "geobase"

Comments

@navispatial
Copy link
Member

Package

Links and documentation about the geobase package:

The current state

The current state of the geobase package analyzed by sub-packages (libraries):

common

  • API reference (latest)
  • Description: Common codes, constants, functions, presentation helpers and reference systems related to geospatial applications.
  • Documentation
  • Features:
    • Enums (codes): geospatial coordinate, geometry types, dimensionality, canvas origin, cardinal direction, DMS type, geo representation, axis order.
    • Constants: epsilon, geodetic and screen related constants.
    • Functions: conversions between radians and degrees, geographic coordinate helpers.
    • Presentation: DMS (degree-minutes-seconds geographic representations).
    • Reference: Coordinate and temporal reference systems. Reference ellipsoids.

coordinates

  • API reference (latest)
  • Documentation
  • Description: Position, bounding box and positions series (with coordinate arrays).
  • Features:
    • Position, bounding box and positions series (with coordinate arrays).
    • Contains also geographic (longitude-latitude) and projected positions and bounding boxes, scalable coordinates, and projection abstraction classes.

geodesy

  • API reference (latest)
  • Documentation
  • Code is ported from geodesy tools (JavaScript) originally developed by Chris Veness
  • Description: Ellipsoidal (vincenty) and spherical (great circle, rhumb line) geodesy tools.
  • Features (ellipsoidal):
    • Distances & bearings between points, and destination points calculated on an ellipsoidal earth model, along geodesics on the surface of a reference ellipsoid selected.
    • Transformss between geographic positions (latitude and longitude as geodetic coordinates) and geocentric cartesian coordinates represented by ECEF (earth-centric earth-fixed) positions.
  • Features (spherical):
    • Distance, bearing, destination and other functions are provided both for great circle paths and rhumb lines. All calculations use simple spherical trigonometric algorithms.

geometric

meta

projections

projections_proj4d

  • API reference (latest)
  • Documentation
  • Description: Projections provided by the external proj4dart package.
  • Features
    • This package implements a projection adapter that acts as a wrapper and uses internally the projection and coordinate reference system support of the proj4dart package to which there's a dependency.

tiling:

  • API reference (latest)
  • Documentation
  • Description: Tiling schemes and tile matrix sets (web mercator, global geodetic).
  • Features:
    • Scalable coordinates that are using in tiling schemes to represent pixels or tiles in tile matrices.
    • WebMercatorQuad is a “Google Maps Compatible” tile matrix set with tiles defined in the WGS 84 / Web Mercator projection (“EPSG:3857”).
    • GlobalGeodeticQuad (or “World CRS84 Quad” for WGS 84) is a tile matrix set with tiles defined in the Equirectangular Plate Carrée projection.

vector:

  • API reference (latest)
  • Documentation
  • Description: Text and binary formats for vector data (features, geometries, coordinates).
  • Features
    • supported geospatial data formats (encoding / decoding)
      • GeoJSON text representation for feature and geometry objects
      • WKT text representation for geometry objects
      • WKB binary representation for geometry objects
    • also following format variants supported (encoding / decoding)
      • Newline-delimited GeoJSON
      • Extended WKT (EWKT)
      • Extended WKB (EWKB)
    • GeoJSON support is based on the RFC 7946 specification, by default WGS 84 longitude-latitude geometries are expected, but also alternative coordinate systems (when decoding or encoding data) are supported (even some code to handle axis-orders...). Read more on documentation.

vector_data

What's missing?

According to open issues on GitHub and other notes related to development plans on the geobase package.

common

  • The set of provided coordinate reference system constants (with identifiers, EPSG codes and axis order data but not datum specs) could be extended to cover common global coordinate reference systems.
  • An extension on double supports conversions between rad and deg angles, could support also conversions on other units like distances and areas.

coordinates

geodesy

  • Support for UTM / WGS-84 Conversion Functions by porting code from utm.js by Chris Veness.
  • Parse and format MGRS (that are based on UTM) grid geocoordinate references by porting code from mgrs.js by Chris Veness.
  • Support for GeoURI identifiers.
  • Support for Geohash identifiers or similar.

geometric

  • core 2D cartesian calculations (buffers, intersections, line intermediate points, convex hulls) and spatial predicates on geometries (intersects, contains).

meta

  • Basic comparison predicates on temporal data structures (instant, interval).
  • Currently utilized by the geodata package (documentation). Enhanced if geodata future versions require new features on metadata classes (temporal data and spatial extents)

projections

  • Currently only a projection between WGS84 and Web Mercator supported as proj4d integration covers other projections, so not sure is there need to enhance built-in projection or not. Maybe a wrapper on UTM coordinates if support implemented on geodesy sub-package.

projections_proj4d

  • Currently supports core functionality of the external proj4d package via a wrapper. That seems to have quite stable API, so no changes needed unless proj4d introduces new concepts.

tiling:

  • Currently Web Mercator Quad and Global Geodetic Quad and supported. Also other tiling schemes on different projections exists in geospatial applications, but no issues open (currently) to implement these.

vector:

vector_data

Enhancement candidates described on this section Whats's missing could be implemented on geobase 1.x.x versions still based on Dart 2.17.0.

The latest release is 1.4.0 that introduced ellipsoidal geodesy functions and some external dependencies were removed.

Roadmap for 2025:

  • keep the API of the geobase package stable on geobase 1.x.x versions
  • at least 3-4 similar feature enhancement releases (ie. geobase 1.5.0, geobase 1.6.0, ..) is planned to be implemented during 2025. New features implemented in each release (from enhancement candidates) shall be specified later. No breaking changes allowed.

See also open issues. Any comments, questions, suggestions of new features and other contributions are welcome, of course!

Other links:

Long-term visions

In future (end of 2025 maybe) for geobase 2.x.x versions it's planned to upgrade to use (and constrained to) latest Dart 3.xx SDK. This would allow using records, pattern matching, extension types and other new language features. Also static metaprogamming and macros support (like JsonCodable) would be used.

So planning geobase 2.x.x waits for these language features (macros still experimental) first to be finalized and published on release builds of the Dart SDK (maybe expected in 2025). More details on geobase 2.x.x shall be planned later during 2025. Also some breaking changes could be introduced compared to geobase 1.x.x when necessary. However core classes should be backwards compatible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation 🌐 geobase Related to the code package "geobase"
Projects
None yet
Development

No branches or pull requests

1 participant