Geospatial feature service Web APIs with support for GeoJSON and OGC API Features clients for Dart.
Features
✨ New (2024-05-26): The new documentation website (geospatial.navibyte.dev) for the geodata package documentation published along with the stable version 1.2.0.
✨ New (2024-04-22): The stable version 1.1.0 adds support for Newline-delimited GeoJSON. See the related blog post about geobase changes.
✨ New (2023-10): The stable version 1.0.0 is now ready. See also the article Geospatial tools for Dart - version 1.0 published at Medium.
✨ New (2023-07): better client-side support for OGC API Features (Part 1 and 2).
Key features:
- 🪄 Client-side data source abstraction for geospatial feature service Web APIs.
- 🌐 The GeoJSON client to read features from static web resources and local files, supports also Newline-delimited GeoJSON data.
- 🌎 The OGC API Features client to access metadata and feature items from a compliant geospatial Web API providing GeoJSON data.
Client-side support for the OGC API Features standard:
Standard part | Support in this package |
---|---|
OGC API - Features - Part 1: Core | Supported for accessing metadata and GeoJSON feature collections. |
OGC API - Features - Part 2: Coordinate Reference Systems by Reference | Supported. |
OGC API - Features - Part 3: Filtering (draft) | Partially supported (conformance classes, queryables, features filter). |
Documentation
Comprehensive guidance on how to use this package and about Geospatial tools for Dart (the package is part of) is available on the geospatial.navibyte.dev website.
Shortcuts to the geodata package documentation by chapters:
See also overview topics about Geospatial tools for Dart:
Introduction
As a background you might want first to check a good introduction about OGC API Features or a video about the OGC API standard family, both provided by OGC (The Open Geospatial Consortium) itself.
The following diagram describes a decision flowchart to select a client class and a feature source to access GeoJSON feature collections and feature items:
Below you can find few step-by-step instructions how to get started in scenarios represented in the decision flowchart.
Static GeoJSON web resource
// 1. Get a feature source from a web resource using http.
final source = GeoJSONFeatures.http(location: Uri.parse('...'));
// 2. Access feature items.
final items = await source.itemsAll();
// 3. Get an iterable of feature objects.
final features = items.collection.features;
// 4. Loop through features (each with id, properties and geometry)
for (final feat in features) {
print('Feature ${feat.id} with geometry: ${feat.geometry}');
}
Static GeoJSON local resource
// 1. Get a feature source using an accessor to a file.
final source = GeoJSONFeatures.any(() async => File('...').readAsString());
// 2. Access feature items.
final items = await source.itemsAll();
// 3. Get an iterable of feature objects.
final features = items.collection.features;
// 4. Loop through features (each with id, properties and geometry)
for (final feat in features) {
print('Feature ${feat.id} with geometry: ${feat.geometry}');
}
Web API service conforming to OGC API Features
// 1. Get a client instance for a Web API endpoint.
final client = OGCAPIFeatures.http(endpoint: Uri.parse('...'));
// 2. Access/check metadata (meta, OpenAPI, conformance, collections) as needed.
final conformance = await client.conformance();
if (!conformance.conformsToFeaturesCore(geoJSON: true)) {
return; // not conforming to core and GeoJSON - so return
}
// 3. Get a feature source for a specific collection.
final source = await client.collection('my_collection');
// 4. Access (and check) metadata for this collection.
final meta = await source.meta();
print('Collection title: ${meta.title}');
// 5. Access feature items.
final items = await source.itemsAll(limit: 100);
// 6. Check response metadata.
print('Timestamp: ${items.timeStamp}');
// 7. Get an iterable of feature objects.
final features = items.collection.features;
// 8. Loop through features (each with id, properties and geometry)
for (final feat in features) {
print('Feature ${feat.id} with geometry: ${feat.geometry}');
}
For the step 5 other alternatives are:
- Use
source.items()
to get feature items by a filtered query (ie. bbox). - Use
source.itemById()
to get a single feature by an identifier. - Use
source.itemsAllPaged()
orsource.itemsPaged()
for accessing paged feature sets.
In the step 6 it's also possible to get links to related resources, and optionally also to get a number of matched or returned features in a response.
Usage
The package requires at least Dart SDK 2.17, and it supports all Dart and Flutter platforms.
Add the dependency in your pubspec.yaml
:
dependencies:
geodata: ^1.2.0
Import it:
import `package:geodata/geodata.dart`
There are also partial packages containing only a certain subset. See the Packages section below.
Other documentation:
📚 Concepts: If coordinates, geometries, features and feature collections are unfamiliar concepts, you might want to read more about geometries, geospatial features and GeoJSON in the documentation of the geobase package.
🚀 Samples: The Geospatial demos for Dart repository contains more sample code showing also how to use this package!
Packages
The geodata library contains also following partial packages, that can be used to import only a certain subset instead of the whole geodata package:
Package | Exports also | Description |
---|---|---|
common | Common data structures and helpers (for links, metadata, paged responses). | |
core | Metadata and data source abstractions of geospatial Web APIs (ie. features). | |
formats | OpenAPI document and Common Query Language (CQL2) formats (partial support). | |
geojson_client | common, core | A client-side data source to read GeoJSON data from web and file resources. |
ogcapi_features_client | common, core, formats | A client-side data source to read features from OGC API Features services. |
External packages geodata
is depending on:
- equatable for equality and hash utils
- geobase for base geospatial data structures
- http for a http client
- meta for annotations
Reference
Documentation
Please see the geospatial.navibyte.dev website for the geodata package documentation.
Authors
This project is authored by Navibyte.
More information and other links are available at the geospatial repository from GitHub.
License
This project is licensed under the "BSD-3-Clause"-style license.
Please see the LICENSE.
Libraries
- common
- Common data structures and helpers (for links, metadata, paged responses).
- core
- Metadata and data source abstractions of geospatial Web APIs (ie. features).
- formats
- OpenAPI document and Common Query Language (CQL2) formats (partial support).
- geodata
- A geospatial client to read GeoJSON and OGC API Features data sources.
- geojson_client
- A client-side data source to read GeoJSON data from web and file resources.
- ogcapi_features_client
- A client-side data source to read features from OGC API Features services.