Skip to content

Releases: clarisma/geodesk

Version 0.2

13 Apr 17:21
Compare
Choose a tag to compare

This release introduces the streamlined API we've announced in 0.1.10.

Most importantly, we've simplified the type system. OpenStreetMap features are represented as nodes, ways and relations, and GeoDesk has corresponding Node, Way and Relation interfaces, which derive from the Feature supertype. In 0.2, these subtypes still exist as marker interfaces, but their specialized methods have moved to the supertype. This means that all features can simply be treated as a Feature, which removes the need for casting and awkward generics. When working with feature sets, you'll no longer need to declare Features<?> or Features<Node> -- you'll simply use Features.

This change aligns more closely with how users think about OSM data. Most points-of-interest can be modeled as nodes, ways or relations -- for example, a museum could be marked as a single point, a simple polygon (as a closed way) or a building with a courtyard (requiring a multipolygon relation). In those cases where the OSM type matters, use .isNode(), .isWay() or .isRelation() (or type()).

We've prepared a Migration Guide to ensure your upgrade goes smoothly.

Breaking changes

  • The Features interface is no longer generic. Iterating over Features always
    returns Feature objects.

  • The typed methods (memberNodes(), parentRelations(), etc.) have been
    removed. To constrain a type, use members().nodes(), parents().relations(),
    or include the feature type in a query string (members("n"), parents("r")).

  • All classes from com.geodesk.core (such as Box and Heading) have moved to com.geodesk.geom

Enhancements

  • Applying spatial filters is now much simpler. Instead of using the Filters factory class, filters can now be invoked directly on the Features object.

    So instead of

    biotopes.select(Filters.coveredBy(area))

    simply use

    biotopes.coveredBy(area)

    Note that several spatial filter methods have changed names:

    contains() -> containing()
    crosses() -> crossing()
    intersects() -> intersecting()
    overlaps() -> overlapping()
    touches() -> touching()

    These changes make your code read more naturally:

    bridges.crossing(river)
    adminAreas.touching(county)

    This change also resolves the ambiguity concerning contains():

    • Features.contains(Object) checks if the given feature is part of this feature set.
    • Features.containing(Feature) returns the features whose geometry contains the given feature.

Deprecations

  • The Filters factory class has been deprecated and may be removed in future releases.
    The preferred way to use filters is to call the filter methods on Features, as discussed above.

Version 0.1.10

16 Feb 10:48
Compare
Choose a tag to compare

Bug Fixes

Deprecations

  • We will introduce a simpler, streamlined API in Version 0.2. Specifically, methods from Node, Way and Relation will migrate to the Feature superclass, eliminating the need for casting and use of awkward generics (Features<?> becomes just Features). The most common filters will be accessible directly from Features (roads.select(crosses(river)) becomes roads.crosses(river)). These changes are part of our broader effort to align the Java and Python toolkits and make it easier for developers to transition between them.

Version 0.1.9

10 Dec 17:08
Compare
Choose a tag to compare

Bug Fixes

  • OsmPbfReader now shuts down cleanly when reading a corrupt source file (clarisma/gol-tool#104) -- this bug caused gol build to hang on truncated .osm.pbf files.

  • gol build: Fixed encoding bug that caused access to certain way-nodes to fail (clarisma/gol-tool#105)
    Note: We recommend re-building any GOL with more than 16K tiles

Other Changes

Version 0.1.8

26 Aug 13:20
Compare
Choose a tag to compare

Bug Fixes

Other

  • Upgraded JUnit from version 4.12 to 4.13.2

Version 0.1.7

24 Mar 12:26
Compare
Choose a tag to compare

Enhancements

  • FeatureLibrary now supports AutoCloseable (#85)

Bug Fixes

  • Tags.toMap() returns an empty collection instead of null for features without tags (#84)

  • build: Fixed bug which caused analysis to fail if none of the strings in a batch meet the minimum string count (clarisma/gol-tool#99)

  • build: Buildcontext.getTileCatalog() explicitly unmaps the metadata segment; an active mapping could prevent the created GOL from closing properly in cases where GC does not run (clarisma/gol-tool#100)

Version 0.1.6

03 Mar 13:03
Compare
Choose a tag to compare

Performance Improvements

  • gol build: Building planet-size GOLs completes faster and consumes less storage for temporary files

Bug Fixes

Version 0.1.4

06 Jan 15:31
Compare
Choose a tag to compare

New Features

  • gol build: Build settings are now accepted as command-line options

  • gol build: Option tag-duplicate-nodes (#74)

  • gol build: Option tag-orphan-nodes (#73)

  • gol info: Now displays statistics for tiles (-t) and free pages (-f);
    enhanced statistics for indexes (-i)

  • gol query: Two new report types for Tag & Role Statistics (-f=stats): keys and tags

Breaking Changes

  • Placeholder features are now tagged with geodesk:missing=yes instead of
    geodesk:error=missing (#75)

Bug Fixes

  • Fixed linker behavior for sparse-tile relations that reference missing features;
    back-links now work correctly for this edge case.

Version 0.1.3

16 Dec 15:51
Compare
Choose a tag to compare

GeoDesk 0.1.3 Early Access

New Features

  • gol query: Tag & Role Statistics (-f=stats) -- Preview

Enhancements

  • gol query: XML output now contains upload=never attribute to signal JOSM (and other editors that support this tag) that the data should not be uploaded to the OSM server (XML output can be viewed in JOSM, but is not suitable for submitting changes since untagged nodes are re-generated with synthetic IDs)

  • gol query (map output format):

    • Set base map and attribution (-f:basemap / -f:attribution)

    • Customize color of map markers (Option -f:color)

    • Clicking on a map marker now navigates to a URL. URL can be specified via option -f:link, defaults to main OSM website (clarisma/gol-tool#74)

  • --precision default is now 7 (previously 6) to match the standard OSM coordinate precision

Bug Fixes

  • Fixed rounding error in the conversion of coordinates between WGS-84 and Mercator; conversion is now guaranteed to be lossless up to 100-nanodegree precision (--precision=7; excludes latitudes exceeding 85 degrees, which are clipped)

  • Fixed bug that caused GOL files to be created non-sparse, which increased storage consumption

  • gol query: Significantly increased the performance of output formatters (x 10 for certain formats) by fixing a buffering issue

Miscellaneous

  • ProgressReporter is now part of the GeoDesk library

Version 0.1.2

09 Dec 17:36
Compare
Choose a tag to compare

GeoDesk 0.1.2 Early Access

This maintenance release includes the following updates:

  • Preview of fast spatial predicates

  • GOQL: keys and values no longer need to be enclosed in quotes if they contain non-ASCII characters

  • Feature: Implemented doubleValue() and isPlaceholder()

  • Relation.toGeometry() now creates MultiLineString and MultiPoint for homogeneous geometry collections

  • Enabled querying parent ways of anonymous nodes

  • Query output in OSM-XML format now recursively adds child relations

(Release 0.1.1 omitted to bring versioning in line with GOL Tool)

Version 0.1.0

08 Nov 10:09
Compare
Choose a tag to compare

GeoDesk 0.1.0 Early Access

We are pleased to release GeoDesk Version 0.1.0 EA.

Please note that as this is still an Early Access release, some documented features may not yet be available. Specifically, Version 0.1.0 has the following limitations:

  • Querying relation members by role is not yet supported. As a workaround, you can programmatically check role() of each Feature object returned by a member query.

  • The query predicates of() and with() are not yet supported. As a workaround, rephrase these queries using members() and parentRelations().

  • Queries whose bounding boxes straddle the Antimeridian must be executed as two separate queries with normalized bboxes. (Issue #40)

  • Regular expressions in queries are not yet supported. Wildcards expressions can accomplish the same result in most cases: k="prefix*", k="*postfix", k="*infix*" (Can also be combined: w[highway][name="A*"][name="*weg"] finds all streets whose name starts with "A" and ends with "weg").

  • Spatial predicates are currently limited to intersects, crosses, within and metersFromLonLat. We expect to implement support for a full range of predicates shortly.

  • The gol command-line utility does not yet support the copy, remove, retain and vacuum commands. Some minor options of query are not yet implemented.

We plan to ship at least one maintenance release before year-end, and expect Version 0.2 in Q1 2023. Please submit comments or reactions on the issues that you care most about, so we can prioritize our tasks.

Happy querying!