Ich habe eine PBF-Datei , die die folgenden Informationen zu einem Land enthält:
Knoten, jeder mit seiner eigenen Länge, Breite und Eigenschaften; wird zum Speichern von Punkten in einem 2D-Raum verwendet.
Wege, jeder mit seinen Eigenschaften, sind durch Knoten verbunden; verwendet, um Straßen, Grenzen zu speichern.
Während diese Datei in ihrer komprimierten Form nur 80 MB groß ist, sind es 592 MB, wenn sie nicht komprimiert und in einer Datenbank gespeichert sind.
Ja, und das gilt nur für ein Land, Belgien. Stellen Sie sich vor, Sie lagern neben Frankreich, Deutschland und Italien.
Nehmen wir zum Beispiel eine einzige Autobahn von Antwerpen über Brüssel nach Charleroi. Dies würde aus einer Tonne Knoten bestehen, um alle Kurven auf der Autobahn zu speichern, aber brauche ich alle diese Kurven? Ich bezweifle das.
Lassen Sie mich Ihnen sagen, was ich tun möchte:
Ich möchte die Karte mit verschiedenen Zoomstufen anzeigen. Großstädte, Kleinstädte und zumindest Straßenebene.
Ich möchte Routing-Informationen zwischen zwei Punkten erhalten können.
Ich möchte in der Lage sein, die Straße zu berechnen, die meinem GPS-Standort am nächsten liegt.
Suchen Sie mithilfe eines Index in der Datenbank nach einem Speicherort.
Vor allem aber sollte die Datenbank nicht zu groß sein, da sie auf einem mobilen Gerät gespeichert wird .
Also dachte ich über eine Kombination von zwei Techniken nach:
Bildkacheln zum Anzeigen, um das Speichern / Verarbeiten aller einzelnen Knoten zu umgehen.
Speichern der Endpunkte von Straßen für Routeninformationen sowie Informationen zur Straße.
Das Problem dabei ist, dass ich die nächstgelegene Straße zu meinem GPS-Standort nur mit diesen Informationen nicht berechnen kann. Stellen Sie sich vor, dass ich in einer Kurve auf einer Autobahn nicht feststellen kann, dass ich nur mit den beiden Endpunkten auf der Autobahn bin. Ich habe darüber nachgedacht, Zwischenknoten zwischen Endpunkten zu speichern, aber die Generierung wäre meiner Meinung nach sehr kostspielig. Außerdem ist das Bestimmen der Endpunkte von Straßen (die wie ein T-Split aussehen) höchstwahrscheinlich nicht einmal so einfach, da ich herausfinden muss, ob ich den Mittelpunkt oben auf diesem T-Split speichern muss oder nicht.
Das Anzeigen mit Bildkacheln ist also einfach. Aber ich kann keinen einfachen Weg finden, um Routing und GPS-Positionsbestimmung durchzuführen. Welche Art von Speichertechnik sollte ich untersuchen? Ich finde es etwas unpraktisch, dass aus einer 80 MB
Datei eine Datenbank wird, von der 592 MB
ich diese Größe so weit wie möglich reduzieren möchte ...
Was kann ich tun, um dies so effizient wie möglich zu tun? In Bezug auf Festplatte und CPU. Ich ziele auf ein WP7 ...
quelle
Antworten:
Es scheint mir, dass das Hauptproblem nur Knoten umfasst, die wichtige Informationen über eine Straße hinzufügen.
Das heißt, ohne Ihre GPS-Anforderung könnten Sie Knoten einfach an Kreuzungen und Endungen speichern (was ich glaube, Sie nennen Start- / Endknoten). Offensichtlich einschließlich Gewicht / Kosten usw.
Eine Möglichkeit, dies zu erreichen, besteht darin, zunächst alle Start- / Endknoten hinzuzufügen. Dies ist das erforderliche Minimum. Offensichtlich sind kurvenreiche Straßen nicht berücksichtigt.
Führen Sie dann für jede Straße (definiert als Ende bis zur Kreuzung oder Kreuzung bis zur Kreuzung) die folgenden Schritte aus:
(some constant threshold * number of intermediate nodes)
erforderlich, müssen Zwischenknoten hinzugefügt werden. Wenn nicht, verlassen Sie die Schleife.quelle