Skip to content

Instantly share code, notes, and snippets.

@pmauduit
Last active September 22, 2021 08:24
Show Gist options
  • Save pmauduit/3bab46a65d54a799ddb3f86089569e34 to your computer and use it in GitHub Desktop.
Save pmauduit/3bab46a65d54a799ddb3f86089569e34 to your computer and use it in GitHub Desktop.
groovy - scraping polygons from OpenStreetMap (fr) API
import groovy.json.JsonSlurper
class GeoUtils {
static def retrieveProbableOsmRelationId(String cityName) {
def cityNameEncoded = java.net.URLEncoder.encode(cityName, "utf-8")
def queryUrl = "https://nominatim.openstreetmap.org/search?q=${cityNameEncoded}&format=json&osm_type=relation"
def nominatimResult = new JsonSlurper().parseText(new URL(queryUrl).text)
if (nominatimResult.size() == 0) {
return null
}
return nominatimResult[0].osm_id
}
static def downloadRelationAsGeoJSON(def relationId) {
def geoJsonUrl = new URL("http://polygons.openstreetmap.fr/get_geojson.py?id=${relationId}&params=0")
def geoJsonText = geoJsonUrl.text
if (geoJsonText == "None\n")
throw new Exception("polygons.openstreetmap.fr returned an empty response")
geoJsonUrl.text
}
static def grabGeoJsonFromOpenStreetMap(String cityName) {
def relationId = retrieveProbableOsmRelationId(cityName)
if (relationId == null)
throw new Exception("not found")
downloadRelationAsGeoJSON(relationId)
}
}
static void main(String[] args) {
def city = args[0]
def geojson = GeoUtils.grabGeoJsonFromOpenStreetMap(city)
println geojson
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment