Bibliothek für OSM-Daten-Zugriff

OP #4857081
Hi,
kann mir jemand empfehlen, welche Bibliotheken (c oder c++) sich dazu 
eigenen OSM pbf-Files zu lesen und möglichst fix zu einer Koordinate die 
Objekte im Umkreis von x Metern zu bekommen.



Ich hab mir libosmium mal angeschaut, aber es sieht da aus, als wenn man 
nur eine Art Handler/Callbacks definiert, die dann einfach für jedes 
Objekt aufgerufen wird und man dann selbst testen muss.

Je nach größe der Datei dauert das natürlich ewig. Wie machen das andere 
Programme? Gibt es besser geeignete Bibliotheken?
Gast
Vlad T. schrieb:
> Je nach größe der Datei dauert das natürlich ewig. Wie machen das andere
> Programme? Gibt es besser geeignete Bibliotheken?

ich habe mir die Daten einfach in eine SQL-DB geladen. Dann kann ich 
sehr schnell auf Punkte und damit Eigenschaften und Linien/Polygone 
zugreifen.
Gast
Vlad T. schrieb:
> und wieso beschleunigt dies das ganze?
> wenn ich jetzt eine GPS-Koordinatenpaar habe und alle elemente in x
> Meter umkreis haben will, muss ich trotzdem für alle Elemente in der
> Datenbank die Entfernung berechnen.

ja und nein. Man kann für jedes Objekt ein Rechteck berechnen was seine 
maximalen Aufmaße ist.

Diese Daten werden indiziert. Wenn man jetzt zu einem Punkt wissen will, 
was in der Umgebung ist, rechnen man er einmal aus wie groß das ganze 
maximal als Rechteck ist. Dann holt man sich aus dem Index alle Objekte 
die möglich sind und nur von diesen berechnet man die genaue Entfernung.

geht ruckzuck.
OP
Peter II schrieb:
> ja und nein. Man kann für jedes Objekt ein Rechteck berechnen was seine
> maximalen Aufmaße ist.

das is ja wieder ein anderes Problem.

->
http://osmcode.org/osmium-concepts/

Objekte meine ich jetzt im Sinne von OSM-Objekten/Einträgen, die ich zur 
Vereinfachung als Punktförmig annehmen würde.

Peter II schrieb:
> Wenn man jetzt zu einem Punkt wissen will,
> was in der Umgebung ist, rechnen man er einmal aus wie groß das ganze
> maximal als Rechteck ist.
okay

> Dann holt man sich aus dem Index alle Objekte
> die möglich sind und nur von diesen berechnet man die genaue Entfernung.
Das is ja der Knackpunkt

Die haben in der Datenbank (wenigstens) eine Koordinate. Genauso wie 
meine Abfrage.
Ob ein Objekt zurückgegeben werden soll, ergibt sich also aus der 
Entfernungsberechnung zwischen diesen Punkten.

Da die Koordinaten aber wenigstens 2-Dimensional sind, meine Tabelle 
jedoch eindimensional, gibt es keine eindimensionale Ordnung, in der 
Benachbarte 2-dimensionale Punkte auch da benachbart sind.


Wie lösen das die ganzen Kartentools, die auch mit gigabyte-großen 
Karten effizient arbeiten können, wenn ebenso im OSM-File die Ordnung 
der Objekte (ebenfalls eine eindimensionale Liste) nicht definiert ist.
Gast
Vlad T. schrieb:
> Da die Koordinaten aber wenigstens 2-Dimensional sind, meine Tabelle
> jedoch eindimensional, gibt es keine eindimensionale Ordnung, in der
> Benachbarte 2-dimensionale Punkte auch da benachbart sind.

doch gibt es. Man kann auch 2 oder mehr spalten Indizieren.

Jede Datenbank bietet die Möglichkeit nach Name und Vorname einer Person 
zu suchen. Das sind auch 2 Dimensionen.
Gast
Nachtrag2:

Du kannst auch alle Punkt in ein Raster von ganzzahligen Koordinaten 
einteilen, diesen Vergibst du eine eindeutige Nummer. (Wie ein 
Schachbrett von 0-63).

Wenn du jetzt zu einem Punkt die Umgebung wissen willst, dann kannst du 
alle eindimensional rechnen. Die Umgebung von ID 10 ist dann ID 9,11,2 
und 18. Von diesen IDs holst du dir alle Objekte und rechnest genau 
nach.
Vlad T. schrieb:
> Wie lösen das die ganzen Kartentools, die auch mit gigabyte-großen
> Karten effizient arbeiten können, wenn ebenso im OSM-File die Ordnung
> der Objekte (ebenfalls eine eindimensionale Liste) nicht definiert ist.

Ich habe bei uns dafür eine Postgres mit PostGIS genommen. Da hast du 
dann in der Datenbank passende zweidimensionale Indizes implementiert 
und bekommst die Daten schnell raus. Der Rechenaufwand wird eben beim 
Laden der Daten in die DB in die Erzeugung der konkret benutzten Indizes 
gesteckt.

Und für den Loadprozeß von Deutschland mit 50km Umkreis haben wir da 
schon jeweils knapp eineinhalb Tage gebraucht (was einmal monatlich 
durchgeführt wurde).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.