Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes

Hallo zusammen,

nachdem ich mich in den letzen Tagen durch die gefilterten XML-Daten (Deutschland (alle addr:* Tags und places=*)) von OSM gewühlt habe, muss ich mir leider eingestehen dass ich so überhaupt keine Idee habe wie ich an die Mittelpunkte verschiedenen Typen eines Nodes(?) komme.

Ziel ist es, wenn ein Besucher eine Postleitzahl, Ort oder Straße eingibt, dass ich den Mittelpunkt der eingegebenen “Region” als lng/lat bekomme.
Ich habe alle Daten in einer eigene, momentan noch Access Datenbank. Ich weiß, Access ist nicht gerade das tollste aber bevor ich Gigabytes an Daten in die Datenbank auf unserem Server hochlaxe, teste ich das ganze lieber einmal :slight_smile:

Kann mir jemand einen Tipp geben? Google und Bing konnten mir leider nicht weiterhelfen.

Vielen Dank!

Michele

Moin Moin und erst mal herzlich willkommen im Forum!

Es gibt da mehrere Methoden:

  • Nominatim
  • PostGIS
  • Overpass ??
  • selber was frickeln

Nominatim ist eine Software zum Suchen (und Finden) von Objekten in der Geo-Datenbank. Diese steht als freier Service bei OSM zur Verfügung, muß aber bei zu heftiger Benutzung auf eigener Hardware installiert werden.

“Sowas” machen viele mit PostGIS. Das ist eine GIS-Erweiterung für Postgresql, einer Datenbank, die die OSM-Daten verarbeiten kann.

Bei der OverPass-API muß ich passen, eventuell wissen die Kollegen mehr.

“Selber machen” - und dann noch mit Access! - ist illusorisch - vergiss es.

ps: ich mach PostGis und da kommt sowas raus:


select name,st_astext(st_centroid(way)) "Geographisches Zentrum" from planet_osm_polygon
where osm_id in(-51477,-403139);
     name     |          Geographisches Zentrum          
--------------+------------------------------------------
 Deutschland  | POINT(10.3644862995527 51.3181730028497)
 Schlangenbad | POINT(8.04949053180908 50.0980943539786)
(2 rows)

So mal eben die geographischen Zentren von Deutschland und Schlangenbad im Taunus abgefragt. Bis du soweit bist, kann es aber einige Zeit (Wochen!) dauern.

Ich würde Nominatim empfehlen - zumindest für den Anfang.

Gruss
walter

Also wenn man selber was “frickeln” will muss man das Polygon triangulieren, das heißt in Dreiecke zerschneiden. Dann von jedem Dreieck die Fläche und den Mittelpunkt berechnen und diese Punkte dann alle zusammen ziehen zu einem.

Klingt jetzt kurz und einfach, ich habe das letztens als Programmieranfänger in Javascript gebastelt… hat mich Wochen beschäftigt :expressionless:

Make (or Find) or Buy…

Moin und vielen Dank :slight_smile:

Nominativ und “selber was frickeln” hört ich gut an…, da ich aber gerade etwas wenig Zeit habe (ich war wohl zu optimistisch das ich die Daten relativ schnell selber finden kann), werde ich mir mal Nominativ anschauen.
Ich habe mir gerade mal die Usage-Policy angeschaut und bin leicht verwirrt :slight_smile:

Da steht unter “Requirements

1 Request? In welchem Zeitraum?
Weiß jemand was genau gemeint ist?

Ich werde mir PostGIS mal lokal installieren und mir das anschauen. Leider unterstützt unser Provider kein Postgresql und der mySQL-Support scheint von GIS angeht recht dürftig zu sein.

O, ich glaub ich habe mich falsch ausgedrückt :slight_smile: Ich würde natürlich nie nicht Access benutzen. Ich habe mir nur mal die Daten von NRW in Access importiert und mir die Felder und den Aufbau anzuschauen. Produktiv würde ich niemals mit Access arbeiten. :slight_smile:

Okay, dass sieht schon ziemlich nachdem aus, was ich brauche :slight_smile: Ich glaube da ist mit die Hauptschwierigkeit die IDs zu bekommen.

Das werde ich auch erstmal machen und nebenbei versuchen “was selber zu frickeln” :slight_smile:
Das wird ein Spaß :smiley:

Vielen Dank!
Michele

Ein Request pro Sekunde.

Klingt wirklich ziemlich einfach… :stuck_out_tongue:
Ernsthaft… du hast das mit Javascript gemacht? Wie hast du auf die Daten zugegriffen? Ajax?
Okay, das bedeutet, dass ich die ganzen Polys auch in die DB werfen muss… grübel

Ich werde mich dran versuchen :slight_smile:
Viele Dank!
Michele

Ahh… super… vielen Dank!

/s —> pro Sekunde

es gibt wohl GIS für mySql, aber du wirst Programme von Osm benutzen wollen (osm2pgsql), die die Rohdaten in eine (Postgresql)-DB importieren. Knackpunkt ist die Umwandlung der Grenz-Relationen in GIS-Polygone, da kannst du monatelang dran programmieren - und dann kapitulieren.

nö, das geht auch mit “gibt mir das Zentrum der Grenze der Stadt Wiesbaden”, ist nur etwas komplizierter. Die IDs hatte ich nur gerade parat. Problem ist es, die Grenzpolygone zu bekommen!.

na dann frickel mal.

Gruss
walter

Meine Erfahrung bezieht sich nicht auf OSM :wink: Eine Sache die dazwischen kommen könnte ist glaube das die Flächen ja theoretisch auf einer Kugel liegen. (Gut ok muss ja trotzdem gehen :)) Und alleine Triangulation ist ne happige Sache wenn man wie ich erstmal mit 0 Plan da rangeht. Ich hab auch keine Datenbank oder sonstiges bisher verwendet. Wie man also so eine Schnittstelle basteln müsste habe ich leider keine Ahnung. Ich habe das nur als Hobby für eine Spiele-App die ich versuche zu basteln gemacht.

Bei der Triangulation habe ich einen Cutting Ear Algorytmus gebastelt, das ist ok bei meiner Anwendung mit Polygonen die vll mal 20 Ecken haben wenn es hochkommt :smiley: Für große Polygone a la Ländergrenzen wäre das nicht sehr performant. Da müsste mann nach nem Sweep-Line Algorhytmus schauen. Aber wiegesagt… sagt sich alles so schön :wink:

Ich würde aber wetten das es irgendwas in der Art schon fertig gibt, schließlich zeigen alle Renderer die ich kenne doch die Hausnummern zB im Mittelpunkt eines Gebäudes an wenn ich mich nicht täusche?

Ein anderer Ansatz wäre Pixelzählen :wink: (glaub ich zumindest)

Argh! Okay… ich dachte das /s soll der Plural sein… was aber, wenn man mal genau hinschaut, auch keinen Sinn ergeben hätte.

Ich glaube für eine Umkreissuche ist der Aufwand wohl ziemlich groß. Ich glaube ich werde mich nebenbei mit der Thematik mal beschäftigen, denn die scheint schon sehr umfangreich und komplexer zu sein, als ich anfangs dachte.
Ist aber auf jedenfalls ein interessantes Thema, über das ich mir noch gar nicht soviel Gedanken gemacht habe.

Ich danke euch für eure Hilfe!

Viele Dank!
Michele

Hier mal ein Beispiel für Schlangenbad: http://overpass-turbo.eu/s/4rh

Ist nicht genau centroid, sondern der Mittelpunkt einer BBOX.

Nahmd,

Den Flächenschwerpunkt eines Polygons kann man mit einer recht einfachen Formel berechnen, wenn man die Koordinaten der Ecken des Polynoms kennt. Zu beachten: (1) wegen der Erdkrümmung ist der berechnete Schwerpunkt etwas zu einem Pol verschoben, das spielt aber nur bei sehr großen Polynomen eine Rolle; (2) die Zwischenergebnisse der Summierung sind sehr große Zahlen, das kann zu Rundungsfehlern und dadurch zu signifikanten Lagefehlern führen; (3) der Schwerpunkt kann (z.B. bei einem “C”-förmigen See) auch außerhalb der Fläche liegen.

Den Mittelpunkt einer Linie bestimmt man ganz naiv, indem man die Länge jedes Segmentes berechnet und dann nacheinander von beiden Enden Segmente abzwackt und die Differenz der Längen mitführt, bis nur noch ein Segment übrig ist und aus der Längendifferenz die Position des Mittelpunktes auf dem letzten Segment bestimmt werden kann. Zu beachten: Straßen werden bei OSM oft aufgetrennt, weil sich Attribute ändern, und sind dann aus mehreren Teillinien zusammengesetzt. In diesem Fall erhält man für eine Straße mit einem Namen mehrere Mittelpunkte.

Sofern sich keine bessere Lösung findet, kann ich die “Mittelpunkte” auch von größeren Mengen von OSM-Objekten bereitstellen, aus denen man z.B. sowas machen kann.

Gruß Wolf.

Sowas geht natürlich auch mit Overpass Turbo: http://overpass-turbo.eu/s/4rq :sunglasses:

Die Formel soll so einfach gehen? Ich Versteh nicht so ganz was die Formal Ausdrücken will :smiley:
Ohne Beispiel(Rechnung) hab ich da meine Probleme.

. . . ich dachte/denke man kommt nicht an einer Zerlegung in Dreiecke vorbei (bei beliebigen konkaven Polygonen) … hmmm ich lass mich gern eines besseren belehren.

na dann zoom mal näher ran. Hier gibt es bei Eltville (so ziemlich im Zentrum) mehrer “Schwerpunkte”, die voll daneben liegen. Grund: Eltville ist ein C, dessen Mittel-/Schwerpunkt außerhalb der Fläche liegt.

Ich hätte da noch ST_PointOnSurface(geometry) im Angebot; da liegt der Punkt immer in der Fläche - und das auch ziemlich zentral gelegen.

Nun Overpasst mal fleißig :wink:

Gruss
walter

ps: Ich finde: Overpass ist schnell, Overpass ist einfach - aber Overpass ist kein GIS-Ersatz.

Stimmt, das ist nicht ganz so toll. Da stößt der vereinfachte “center”-Ansatz wohl an seine Grenzen. Ich baue das folgende Beispiel mal ins Wiki ein mit einem Hinweis, dass der center-point auch außerhalb des Polygons liegen kann: http://overpass-turbo.eu/s/4rr

Nimm lieber die Administrative Grenze von Eltville, da wird es richtig krass.