Difference between revisions of "OSM Planet"
Jump to navigation
Jump to search
Line 47: | Line 47: | ||
=== osmplanet.yaml (or queries.yaml as default) === | === osmplanet.yaml (or queries.yaml as default) === | ||
<syntaxhighlight lang='yaml'> | <syntaxhighlight lang='yaml'> | ||
− | + | # OSMPlanet Query Examples | |
− | + | # Wolfgang Fahl | |
+ | # 2025-01-20 | ||
+ | # | ||
+ | # SPARQL queries for exploring OpenStreetMap data via: | ||
+ | # - https://sophox.org/sparql (Sophox endpoint) | ||
+ | # - https://qlever.cs.uni-freiburg.de/osm (Qlever endpoint) | ||
+ | # | ||
+ | # See also: | ||
+ | # - https://www.openstreetmap.org/ | ||
+ | # - https://wiki.bitplan.com/index.php?title=OSM_Planet | ||
+ | # | ||
+ | # Motivation: Explore OSM relations and their predicates/objects to analyze | ||
+ | # connectivity and relationships between OSM entities | ||
+ | 'RelationStats': | ||
+ | param_list: | ||
+ | - name: relid | ||
+ | type: str | ||
+ | default_value: "6843452" | ||
+ | sparql: | | ||
+ | # Get statistics about predicates used in an OSM relation | ||
+ | PREFIX osmrel: <https://www.openstreetmap.org/relation/> | ||
+ | SELECT ?p (COUNT(?o) as ?count) | ||
+ | WHERE { | ||
+ | osmrel:{{relid}} ?p ?o . | ||
+ | } | ||
+ | GROUP BY ?p | ||
+ | HAVING (?count > 1) | ||
+ | ORDER BY DESC(?count) | ||
+ | 'RelationNodes': | ||
+ | # Get all nodes for a given OSM relation relid e.g. Renfe R16019 | ||
param_list: | param_list: | ||
- name: relid | - name: relid | ||
Line 54: | Line 83: | ||
default_value: "6843452" | default_value: "6843452" | ||
sparql: | | sparql: | | ||
− | + | PREFIX osmrel: <https://www.openstreetmap.org/relation/> | |
− | SELECT ?p ( | + | SELECT ?p ?o (STR(?label) as ?plabel) |
WHERE { | WHERE { | ||
osmrel:{{relid}} ?p ?o . | osmrel:{{relid}} ?p ?o . | ||
+ | FILTER(STRSTARTS(STR(?o), "https://www.openstreetmap.org/node/")) | ||
} | } | ||
− | + | 'RelationNodesGeo': | |
− | + | # get geometry data for relation elements with a given role including lat/lon filtering | |
+ | param_list: | ||
+ | - name: relid | ||
+ | type: str | ||
+ | default_value: "10492086" | ||
+ | - name: role | ||
+ | type: str | ||
+ | default_value: "stop" | ||
+ | - name: min_lat | ||
+ | type: float | ||
+ | default_value: 36.00 | ||
+ | - name: max_lat | ||
+ | type: float | ||
+ | default_value: 44.00 | ||
+ | - name: min_lon | ||
+ | type: float | ||
+ | default_value: -9.00 | ||
+ | - name: max_lon | ||
+ | type: float | ||
+ | default_value: 4.00 | ||
+ | sparql: | | ||
+ | PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> | ||
+ | PREFIX geo: <http://www.opengis.net/ont/geosparql#> | ||
+ | PREFIX osm2rdfmember: <https://osm2rdf.cs.uni-freiburg.de/rdf/member#> | ||
+ | PREFIX osmrel: <https://www.openstreetmap.org/relation/> | ||
+ | PREFIX osmkey: <https://www.openstreetmap.org/wiki/Key:> | ||
+ | PREFIX geof: <http://www.opengis.net/def/function/geosparql/> | ||
+ | SELECT | ||
+ | ?rel_name | ||
+ | ?rel | ||
+ | ?rel_pos | ||
+ | ?member | ||
+ | ?node | ||
+ | ?node_name | ||
+ | ?node_ref | ||
+ | ?role | ||
+ | ?lat | ||
+ | ?lon | ||
+ | WHERE { | ||
+ | VALUES (?rel ?role ?minlat ?maxlat ?minlon ?maxlon) { | ||
+ | (osmrel:{{relid}} "{{role}}" {{min_lat}} {{max_lat}} {{min_lon}} {{max_lon}}) | ||
+ | } | ||
+ | ?rel osmkey:ref ?rel_name . | ||
+ | ?rel osmrel:member ?member . | ||
+ | ?member osm2rdfmember:pos ?rel_pos . | ||
+ | ?member osm2rdfmember:role ?role . | ||
+ | ?member osm2rdfmember:id ?node . | ||
+ | OPTIONAL { ?node osmkey:name ?node_name}. | ||
+ | OPTIONAL { ?node osmkey:ref ?node_ref}. | ||
+ | ?node geo:hasGeometry/geo:asWKT ?loc . | ||
+ | BIND(geof:latitude(?loc) AS ?lat) | ||
+ | BIND(geof:longitude(?loc) AS ?lon) | ||
+ | FILTER (?lat > ?minlat && ?lat < ?maxlat && ?lon > ?minlon && ?lon < ?maxlon) | ||
+ | } | ||
+ | ORDER BY ?rel_pos | ||
+ | 'RelationRoleHistogram': | ||
+ | # Get a histogram of roles for a given OSM relation | ||
+ | param_list: | ||
+ | - name: relid | ||
+ | type: str | ||
+ | default_value: "10492086" | ||
+ | sparql: | | ||
+ | PREFIX osmrel: <https://www.openstreetmap.org/relation/> | ||
+ | PREFIX osm2rdfmember: <https://osm2rdf.cs.uni-freiburg.de/rdf/member#> | ||
+ | SELECT ?role (COUNT(?member) as ?count) | ||
+ | WHERE { | ||
+ | osmrel:{{relid}} osmrel:member ?member . | ||
+ | ?member osm2rdfmember:role ?role . | ||
+ | } | ||
+ | GROUP BY ?role | ||
ORDER BY DESC(?count) | ORDER BY DESC(?count) | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 20:08, 20 January 2025
Links
- https://wiki.openstreetmap.org/wiki/Sophox
- https://qlever.cs.uni-freiburg.de/osm
- https://wiki.bitplan.com/index.php?title=OSM_Planet
- https://wiki.openstreetmap.org/wiki/Sophox/Example_queries
- https://wiki.openstreetmap.org/wiki/OpenTripPlanner
OSM Planet SPARQL Queries with pylodstorage query tool
Configuration for pylodstorage sparqlquery tool
see https://pypi.org/project/pyLodStorage/
installation
pip install pylodstorage
The configuration files need to be in $HOME/.pylodstorage or you have to explicitly give the path with the -ep and -qp options
endpoints.yaml
osm-sophox:
endpoint: https://sophox.org/sparql
website: https://sophox.org
database: blazegraph
method: POST
lang: sparql
prefixes: |
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
PREFIX osmt: <https://wiki.openstreetmap.org/wiki/Key:>
PREFIX osmm: <https://www.openstreetmap.org/meta/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
osm-qlever:
endpoint: https://qlever.cs.uni-freiburg.de/api/osm-planet
website: https://qlever.cs.uni-freiburg.de/osm-planet
database: qlever
method: POST
lang: sparql
prefixes: |
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
PREFIX osmt: <https://wiki.openstreetmap.org/wiki/Key:>
PREFIX osmm: <https://www.openstreetmap.org/meta/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX osm2rdfmember: <https://osm2rdf.cs.uni-freiburg.de/rdf/member#>
PREFIX osmway: <https://www.openstreetmap.org/way/>
osmplanet.yaml (or queries.yaml as default)
# OSMPlanet Query Examples
# Wolfgang Fahl
# 2025-01-20
#
# SPARQL queries for exploring OpenStreetMap data via:
# - https://sophox.org/sparql (Sophox endpoint)
# - https://qlever.cs.uni-freiburg.de/osm (Qlever endpoint)
#
# See also:
# - https://www.openstreetmap.org/
# - https://wiki.bitplan.com/index.php?title=OSM_Planet
#
# Motivation: Explore OSM relations and their predicates/objects to analyze
# connectivity and relationships between OSM entities
'RelationStats':
param_list:
- name: relid
type: str
default_value: "6843452"
sparql: |
# Get statistics about predicates used in an OSM relation
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
SELECT ?p (COUNT(?o) as ?count)
WHERE {
osmrel:{{relid}} ?p ?o .
}
GROUP BY ?p
HAVING (?count > 1)
ORDER BY DESC(?count)
'RelationNodes':
# Get all nodes for a given OSM relation relid e.g. Renfe R16019
param_list:
- name: relid
type: str
default_value: "6843452"
sparql: |
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
SELECT ?p ?o (STR(?label) as ?plabel)
WHERE {
osmrel:{{relid}} ?p ?o .
FILTER(STRSTARTS(STR(?o), "https://www.openstreetmap.org/node/"))
}
'RelationNodesGeo':
# get geometry data for relation elements with a given role including lat/lon filtering
param_list:
- name: relid
type: str
default_value: "10492086"
- name: role
type: str
default_value: "stop"
- name: min_lat
type: float
default_value: 36.00
- name: max_lat
type: float
default_value: 44.00
- name: min_lon
type: float
default_value: -9.00
- name: max_lon
type: float
default_value: 4.00
sparql: |
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX osm2rdfmember: <https://osm2rdf.cs.uni-freiburg.de/rdf/member#>
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
PREFIX osmkey: <https://www.openstreetmap.org/wiki/Key:>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
SELECT
?rel_name
?rel
?rel_pos
?member
?node
?node_name
?node_ref
?role
?lat
?lon
WHERE {
VALUES (?rel ?role ?minlat ?maxlat ?minlon ?maxlon) {
(osmrel:{{relid}} "{{role}}" {{min_lat}} {{max_lat}} {{min_lon}} {{max_lon}})
}
?rel osmkey:ref ?rel_name .
?rel osmrel:member ?member .
?member osm2rdfmember:pos ?rel_pos .
?member osm2rdfmember:role ?role .
?member osm2rdfmember:id ?node .
OPTIONAL { ?node osmkey:name ?node_name}.
OPTIONAL { ?node osmkey:ref ?node_ref}.
?node geo:hasGeometry/geo:asWKT ?loc .
BIND(geof:latitude(?loc) AS ?lat)
BIND(geof:longitude(?loc) AS ?lon)
FILTER (?lat > ?minlat && ?lat < ?maxlat && ?lon > ?minlon && ?lon < ?maxlon)
}
ORDER BY ?rel_pos
'RelationRoleHistogram':
# Get a histogram of roles for a given OSM relation
param_list:
- name: relid
type: str
default_value: "10492086"
sparql: |
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
PREFIX osm2rdfmember: <https://osm2rdf.cs.uni-freiburg.de/rdf/member#>
SELECT ?role (COUNT(?member) as ?count)
WHERE {
osmrel:{{relid}} osmrel:member ?member .
?member osm2rdfmember:role ?role .
}
GROUP BY ?role
ORDER BY DESC(?count)
Sophox Example Queries
sparqlquery -qp osmplanet.yaml -qn RelationStats -en osm-sophox --param relid=6843452 -f mediawiki
RelationStats
query
# Get statistics about predicates used in an OSM relation
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
SELECT ?p (COUNT(?o) as ?count)
WHERE {
osmrel:6843452 ?p ?o .
}
GROUP BY ?p
HAVING (?count > 1)
ORDER BY DESC(?count)
result
p | count |
---|---|
https://www.openstreetmap.org/meta/has | 186 |
sparqlquery -qp osmplanet.yaml -qn RelationNodes -en osm-sophox --param relid=6843452 -f mediawiki
RelationNodes
query
# Get all nodes for an OSM relation
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
SELECT *
WHERE {
osmrel:6843452 ?p ?o .
FILTER(STRSTARTS(STR(?o), "https://www.openstreetmap.org/node/"))
}
result
QLever example queries
sparqlquery -qp osmplanet.yaml -en osm-qlever -p -qn RelationRoleHistogram -f mediawiki --param relid=10492086
RelationRoleHistogram
query
PREFIX osmrel: <https://www.openstreetmap.org/relation/>
PREFIX osm2rdfmember: <https://osm2rdf.cs.uni-freiburg.de/rdf/member#>
SELECT ?role (COUNT(?member) as ?count)
WHERE {
osmrel:10492086 osmrel:member ?member .
?member osm2rdfmember:role ?role .
}
GROUP BY ?role
ORDER BY DESC(?count)
result
role | count |
---|---|
member | 624 |
platform | 31 |
stop | 26 |