Openstreetmap — Wikidata

Florian Lohoff f at zz.de
Do Jun 12 16:46:56 CEST 2025


Hola Björn,

On Thu, Jun 12, 2025 at 03:53:11PM +0200, Björn Kruschke wrote:
>Hallo Liste,
>
> kennt sich jemand mit wikidata und openstreetmap aus und könnte mir 
> dabei weiterhelfen.
> Ich würde gerne openstreetmap, wikidata und das Häuser wiki Lippe 
> https://www.lippe-haeuser-wiki.de/wiki/Hauptseite verknüpfen. Habe 
> aber zu wenig Ahnung, um das zu automatisieren.
> Ich stelle mir vor, dass ich als ersten Schritt alle Straßen in 
> Detmold auch in Wikidata nach dem Straßen Schema anlege.
> https://www.wikidata.org/wiki/EntitySchema:E317
> Nun denke ich, dass die Eigenschaft connects with sich aus 
> openstreetmap herauslesen lässt, wenn man es kann.
> Also kann ich bei openstreetmap abfragen, welchen Straßen z.B. in 
> Detmold eine Verbindung bzw. Berührung zum Haselnussweg haben?
> Ich vermute, dass es auch zu kompliziert ist, es in der Mailingsliste 
> zu behandeln, aber für einen Tipp wie ich damit weiterkommen könnte 
> und die nötigen Informationen finden, bin ich dankbar.

Also - das zu automatisieren halte ich für relativ gefährlich. Ist auch 
nicht so gern gesehen in OSM - Wenn du das weiter verfolgst gehts
auch darum genau zu dokumentieren was und wie du das vor hast - Hier ist
die Mechanical Edit Policy.

https://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct

Bezüglich des "Connects" - meinst du die Straße mit namen A kreuzt 
Straße mit namen B?

Keine ahnung ob man das mit Overpass Turbo hin bekommt. Ich würde
mir den owl als PBF in eine postgres laden und dann so vorgehen - Nur 
mal schnell gehackt auf einem NRW export:

Boundary von Detmold geholt von osm-boundaries und in die Postgis packen:

create table boundaries ( id serial primary key, name varchar, osmb jsonb, geom public.geometry(MultiPolygon,4326) );
\set content `cat OSMB-ca487ae64eed6ded6afe49829c9889fc4ff33ccf.geojson`
insert into boundaries ( osmb ) values ( :'content'::jsonb );
update boundaries set geom = ST_Multi(ST_GeomFromGeoJSON(osmb->'features'->0->'geometry')),
	name = osmb->'features'->0->'properties'->>'name';

Und dann entsprechend die Kreuzungen selektieren:

select  a.osm_id aid,
        a.highway ahighway,
        a.name aname,
        b.osm_id bid,
        b.highway bhighway,
        b.name bname,
        ST_AsText(ST_Intersection(a.way,b.way))
from    boundaries bound 
                join planet_osm_line as a on
                        ( ST_Intersects(bound.geom, a.way) )
                join planet_osm_line as b on
                        ( ST_Intersects(bound.geom, b.way) )
where   bound.name = 'Detmold'
and	a.highway <> ''
and     b.highway <> ''
and     a.name <> ''
and     b.name <> ''
and     'Haselnußweg' in ( a.name, b.name )
and     a.osm_id < b.osm_id
and     ST_Intersects(a.way, b.way)
limit 100;


Resultat:

   aid    |  ahighway   |    aname    |    bid     |  bhighway   |    bname    |          st_astext          
----------+-------------+-------------+------------+-------------+-------------+-----------------------------
 35340663 | residential | Krokusweg   |   35731462 | footway     | Haselnußweg | POINT(8.8432215 51.9218607)
 35731463 | residential | Haselnußweg | 1223209838 | residential | Römerweg    | POINT(8.8448084 51.9215907)
 35731462 | footway     | Haselnußweg |   35731463 | residential | Haselnußweg | POINT(8.8436812 51.9217497)

Flo
-- 
Florian Lohoff                                                     f at zz.de
  Any sufficiently advanced technology is indistinguishable from magic.


Mehr Informationen über die Mailingliste OSM