clarisma / geodesk

Fast and storage-efficient spatial database engine for OpenStreetMap data
https://docs.geodesk.com/java
Apache License 2.0
137 stars 4 forks source link
database geodesk geospatial gis openstreetmap

GeoDesk is a fast and storage-efficient geospatial database for OpenStreetMap data. Also available for Python.

Why GeoDesk?

Get Started

Maven

Include this dependency in your project's pom.xml:

<dependency>
    <groupId>com.geodesk</groupId>
    <artifactId>geodesk</artifactId>
    <version>0.2.1</version>
</dependency>

Alternatively, to build the latest version from source:

git clone https://github.com/clarisma/geodesk.git
cd geodesk
mvn install

If you get weird exceptions during mvn install, you should upgrade Maven to version 3.8.5 or above.

Example Application

import com.geodesk.feature.*;
import com.geodesk.util.*;

public class PubsExample
{
    public static void main(String[] args)
    {
        FeatureLibrary library = new FeatureLibrary(     // 1    
            "example.gol",                               // 2
            "https://data.geodesk.com/switzerland");     // 3

        for(Feature pub: library                         // 4
            .select("na[amenity=pub]")                   // 5
            .in(Box.ofWSEN(8.53,47.36,8.55,47.38)))      // 6
        {
            System.out.println(pub.stringValue("name")); // 7
        }

        library.close();                                 // 8
    }
}

What's going on here?

  1. We're opening a feature library ...

  2. ... with the file name example.gol (If it doesn't exist, a blank one is created)

  3. ... and a URL from which data tiles will be downloaded.

  4. We iterate through all the features ...

  5. ... that are pubs (GeoDesk query languagesimilar to MapCSS)

  6. ... in downtown Zurich (bounding box with West/South/East/North coordinates).

  7. We print the name of each pub.

  8. We close the library.

That's it, you've created your first GeoDesk application!

More Examples

Find all movie theaters within 500 meters from a given point:

Features movieTheaters = library
    .select("na[amenity=cinema]")
    .maxMetersFromLonLat(500, myLon, myLat);

Remember, OSM uses British English for its terminology.

Discover the bus routes that traverse a given street:

for(Feature route: street.parents("[route=bus]"))
{
    System.out.format("- %s from %s to %s",
        route.stringValue("ref"),
        route.stringValue("from"),
        route.stringValue("To"));
}

Count the number of entrances of a building:

int numberOfEntrances = building.nodes("[entrance]").size();

Related Repositories