x

Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes


  1. Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · stonieExcited (Gast) · 21.07.2014 08:31 · [flux]

    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 🙂

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

    Vielen Dank!

    Michele


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · wambacher (Gast) · 21.07.2014 09:06 · [flux]

      stonieExcited wrote:

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

      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


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · easyX (Gast) · 21.07.2014 09:35 · [flux]

      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 😐


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · Gehrke (Gast) · 21.07.2014 09:47 · [flux]

      Make (or Find) or Buy...


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · stonieExcited (Gast) · 21.07.2014 12:05 · [flux]

      wambacher wrote:

      Moin Moin und erst mal herzlich willkommen im Forum!

      Moin und vielen Dank 🙂

      wambacher wrote:

      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.

      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 🙂

      Da steht unter "Requirements"

      - No heavy uses (an absolute maximum of 1 request/s).

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

      wambacher wrote:

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

      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.

      wambacher wrote:

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

      O, ich glaub ich habe mich falsch ausgedrückt 🙂 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. :-)

      wambacher wrote:

      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)
      

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

      wambacher wrote:

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

      Das werde ich auch erstmal machen und nebenbei versuchen "was selber zu frickeln" 🙂
      Das wird ein Spaß :-D

      Vielen Dank!
      Michele


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · chris66 (Gast) · 21.07.2014 12:07 · [flux]

      stonieExcited wrote:

      Da steht unter "Requirements"

      - No heavy uses (an absolute maximum of 1 request/s).

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

      Ein Request pro Sekunde.


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · stonieExcited (Gast) · 21.07.2014 12:08 · [flux]

      easyX wrote:

      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 😐

      Klingt wirklich ziemlich einfach.... 😛
      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 🙂
      Viele Dank!
      Michele


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · stonieExcited (Gast) · 21.07.2014 12:22 · [flux]

      chris66 wrote:

      stonieExcited wrote:

      Da steht unter "Requirements"

      - No heavy uses (an absolute maximum of 1 request/s).

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

      Ein Request pro Sekunde.

      Ahh.... super... vielen Dank!


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · wambacher (Gast) · 21.07.2014 12:33 · [flux]

      stonieExcited wrote:

      - No heavy uses (an absolute maximum of 1 request/s).

      1 Request? In welchem Zeitraum?

      /s ---> pro Sekunde

      der mySQL-Support scheint von GIS angeht recht dürftig zu sein.

      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.

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

      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


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · easyX (Gast) · 21.07.2014 12:54 · [flux]

      Meine Erfahrung bezieht sich nicht auf OSM 😉 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 😄 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 😉

      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 😉 (glaub ich zumindest)


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · stonieExcited (Gast) · 21.07.2014 12:55 · [flux]

      wambacher wrote:

      stonieExcited wrote:

      - No heavy uses (an absolute maximum of 1 request/s).

      1 Request? In welchem Zeitraum?

      /s ---> pro Sekunde

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

      wambacher wrote:

      der mySQL-Support scheint von GIS angeht recht dürftig zu sein.

      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.

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

      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


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · couchmapper (Gast) · 03.08.2014 11:49 · [flux]

      wambacher wrote:

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

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

      Ist nicht genau centroid, sondern der Mittelpunkt einer BBOX.


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · Netzwolf (Gast) · 03.08.2014 17:09 · [flux]

      Nahmd,

      stonieExcited wrote:

      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.

      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.


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · couchmapper (Gast) · 03.08.2014 17:43 · [flux]

      Netzwolf wrote:

      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.

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


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · easyX (Gast) · 03.08.2014 18:08 · [flux]

      Die Formel soll so einfach gehen? Ich Versteh nicht so ganz was die Formal Ausdrücken will 😄
      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.


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · wambacher (Gast) · 03.08.2014 18:10 · [flux]

      couchmapper wrote:

      Netzwolf wrote:

      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.

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

      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 😉

      Gruss
      walter

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


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · couchmapper (Gast) · 03.08.2014 18:46 · [flux]

      wambacher wrote:

      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.

      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


    • Re: Mittelpunkt einer Straße, eines Ortes oder Postleitzahlengebietes · wambacher (Gast) · 03.08.2014 20:02 · [flux]

      couchmapper wrote:

      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.