Karten anzeigen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tron46
User
Beiträge: 9
Registriert: Sonntag 27. Mai 2012, 18:34

Hallo,

ich habe gerade erst mit Python und OpenStreetMap begonnen, bin also noch unerfahren. Ich mach zurzeit mein Bachelor Praktikum mit noch 3 anderen Kommilitonen, das die nächsten 5 Monate geht.
Eine unserer ersten Aufgaben ist es, einen Roboter in einem Fenster (Python QWidget) grafisch darzustellen. Dies soll eine Karte, am besten OpenSeaMap oder OpenStreetMap, sein, auf der dann später noch beispielweise mit den GPS Daten gearbeitet werden kann oder auch Routen berechnet und angezeigt werden können. Die Karte soll offline abgerufen werden können. Wir arbeiten mit Ubuntu 11.10.
Bisher haben wir aber noch kein passendes Konzept, das funktioniert gefunden.

Uns würde interessieren, ob jemand schon Erfahrungen damit gesammelt hat oder gute Tutorial kennt und diese mit uns teilen würde.

LG Tron
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dazu gibt es direkt auf der Qt-Seite eine Demo. Da nutzen sie WebKit, beim googlen habe ich ebenfalls eine Library für GTK+ entdeckt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
tron46
User
Beiträge: 9
Registriert: Sonntag 27. Mai 2012, 18:34

Hallo,

Ich habe mir die Demos angeschaut allerdings sind diese in C++ geschrieben und wird wenn ich das richtig gesehen habe online verwendet, wir suchen allerdings etwas für
Python und die Karte muss offline abgerufen werden können.
LG Tron
deets

Na, dann schau halt hier:

http://wiki.openstreetmap.org/wiki/Rendering

Es gibt einen Python-Eintrag, der laeuft aber "nur" gegen Cairo und die PIL. Zumindest mit letzterer liesse sich sicher etwas basteln mit Qt. Besser waere aber natuerlich ein Backend fuer Qt-rendering (hab' vergessen, wie da die entsprechende Klasse heisst).
BlackJack

@tron46: Etwas „offline abrufen” klingt nach einem Widerspruch. Wenn ihr beliebig auf OpenStreetMap-Karten zugreifen wollt, dann müsstet ihr eine lokale Kopie bereitstellen. Die Daten gibt es ja zum herunterladen. Für die ganze Welt in einer PostgreSQL-DB mit PostGIS-Erweiterung braucht man soweit ich das in Erinnerung habe ca. 600 GiB Plattenplatz. Mittlerweile vielleicht sogar etwas mehr, denn die Datenbasis wächst ja eher als das sie schrumpft. :-)

C++ sollte kein Problem sein, solange das nur Qt-Kram verwendet, für das es auch eine Python-Anbindung gibt. Dann kann man das Beispiel ja portieren.

Man kann sich, wenn man die ganzen Kartendaten lokal hält, natürlich auch mit Mapnik seine eigenen Kartenausschnitte rendern und in ein Qt-Widget bringen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

600 GB kommt mir etwas arg viel vor, wenn ich in OsmAnd die Karten für ein ganzes Land runterlade und das nur 150 MB sind.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Leonidas: Das ist dann aber auch eine Datenstruktur in der nur das wichtigste für die Navigation enthalten ist und die auf geringe Grösse optimiert ist. Das ist bei einem RDBMS ja nicht das Ziel, sondern möglichst effiziente Abfragen. Ich habe gerade letzte Woche einen Datenbankabzug in eine PostgreSQL-DB importiert, der als Dump komprimiert ≈74 MiB gross war, wo der Tablespace jetzt ≈3 GiB Plattenplatz belegt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:@Leonidas: Das ist dann aber auch eine Datenstruktur in der nur das wichtigste für die Navigation enthalten ist und die auf geringe Grösse optimiert ist.
Ja, aber etwas anderes wurde ja vom OP gar nicht verlangt. Fairerweise muss ich zugeben, dass da selbst für Navigation die Daten zu fehlen scheinen, zumindest schafft es OsmAnd nicht ohne Online-Hilfe eine Route zu basteln. Oder es hat niemand implementiert, ebenso möglich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

BlackJack hat geschrieben: Für die ganze Welt in einer PostgreSQL-DB mit PostGIS-Erweiterung braucht man soweit ich das in Erinnerung habe ca. 600 GiB Plattenplatz.
Bei mir belegt der Planet in der DB rund 330GB, also doch noch etwas weniger. Um Karten offline darstellen zu können gibt es mehrere Möglichkeiten:

1) Man wählt die Kacheln, wie sie auch von der OSM Webiste kommen und rendert die selber, dazu kann man Mapnik benutzen, das hat auch eine Python Schnittstelle. Dazu braucht man aber eine Datenbank im osm2pgsql Format mit den gewünschten Daten. Je nach Umfang wird die recht groß und für performante Abfragen ist ein Desktop PC u.U. nicht mehr ausreichend

2) Man wählt die Vektordarstellung der Daten, dazu gibt es im OSM Wiki afaik einige Topcis, u.a. Kothic ist ein Vektorrenderer für OSM Daten. Damit kenne ich mich aber nicht so besonder aus, deshalb kann ich da nicht viel zu sagen

Wenn man das Routing selber implementieren möchte und nicht auf einen (Online-) Service zurückgreifen will, kommt man afaik um eine PostGIS Datenbank nicht herum. Dazu braucht man noch den Routing-Aufsatz pgRouting. Allerdings muss man sich bewusst machen, dass die Daten von OSM in Auszügen nicht oder nur teilweise zum Routen benutzbar sind. Beim Routing kommt es auf die korrekte Verbindung der Nodes und Strecken miteinander an, was das Datenmaterial aber nicht immer hergibt. Ganz zu schweigen von Informationen über Abbiegeregeln, Einbahnstrassen usw.

Vieles von diesen Dingen sind keine Pythonthemem, sondern sind in anderen Bereichen angesiedelt. Man sollte sich bewusst machen, dass man sich erst einmal mit vielen anderen, ausreichend komplizierten Dingen auseinander setzen muss, bevor man überhaupt eine Zeile GUI Code tippen kann. Das nur zur Info, nicht zur Entmutigung ;)

Edith:
Ganz vergessen, die GPS Daten, vermutlich im GPX-Format lassen sich, als XML Dialekt mit einer beliebigen Python XML Bibliothek einlesen. Ist die Konvertierung der GPX Daten in ein anderes Format gewünscht (PostGIS Datenbank usw.) bietet sich die GDAL/OGR Bibliothek an, die auch ein Python Interface besitzt.
Antworten