-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Package
Links and documentation about the geobase
package:
- Package on pub.dev
- API reference on pub.dev
- Documentation on geospatial.navibyte.dev
- Code
- Repository: geospatial on GitHub
- Package code: geobase on GitHub
- Blog articles on Medium
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
- some parts of this sub-package do not have separate documentation but documented on documentation of other sub-packages
- Coordinate reference systems
- Temporal reference systems
- 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
- API reference (latest)
- Documentation
- Description: Cartesian 2D calculations (centroid, polylabel, point-in-polygon, distance).
meta
- API reference (latest)
- Documentation
- Description: Temporal data structures (instant, interval) and spatial extents.
projections
- API reference (latest)
- Documentation
- Description: Geospatial projections (currently only between WGS84 and Web Mercator).
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.
- This package implements a projection adapter that acts as a wrapper and uses internally the projection and coordinate reference system support of the
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.
- supported geospatial data formats (encoding / decoding)
vector_data
- API reference (latest)
- Documentation
- Description: Data structures for geometries, features and feature collections.
- Features
- geometry and feature types support objects decoded from RFC 7946 compliant GeoJSON data
- geometry types: Point, LineString (polyline), Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection
- feature types: Feature, FeatureCollection
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 ongeodesy
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 unlessproj4d
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:
- JSON-FG: Support for OGC Features and Geometries JSON : Core #53
- JSON data encoder wrapper supporting GeoJSON and JSON-FG #228
- Handling CRS ids from different sources when encoding/decoding external data and managing in-memory objets #226
- WKT axis order issues (if there are such) managed.
vector_data
- Add support for other geometry classes known by WKT #30, related Support for OGC Features and Geometries JSON : Core #53, at least following might be considered, but needs must be clarified before:
- Triangle (WKT)
- Triangulated irregular network (WKT)
- Polyhedron, MultiPolyhedron (WKT, JSON-FG)
- Prism, MultiPrism (JSON-FG)
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:
- Documentation: geospatial.navibyte.dev
- Active packages published from the code of this repository:
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.