2016-05-30 9 views
3

Ich habe keine Google-Suche mehr und suche hier Hilfe. Wir verarbeiten gerade die KML-Datei mit Hilfe von geoXml3 auf der Client-Seite. Aber im Idealfall möchte ich es serverseitig vorverarbeiten und die Tricks auf der Client-Seite senden. Da die KML-Datei eine 18-MB-Datei ist, dauert es ewig, bis sie auf der Client-Seite heruntergeladen wird. Anschließend analysiert sie den Client und zeichnet das Polygon auf der Google-Karte.Wie verarbeitet man KML/GeoJSON in Nodejs?

Wir haben KML-Dateien in GeoJSON geändert und die Größe reduziert, komprimiert - nach all dem Zirkus ist die Antwortzeit immer noch nicht gut. Ich möchte nur wissen, ob es einen Weg/Bibliothek im Knoten gibt, der dies tun kann.

+1

Suchen Sie eine Bibliothek, um kml-Datei in Geojson zu konvertieren? – Dario

+0

Müssen Sie die Datei für jede Anfrage verarbeiten, oder ist dies eine einmalige Verarbeitung auf der Serverseite? – HeadCode

+0

@HeadCode dies ist einmal auf Ladeebene, wir haben Postgis für jede Anfrage –

Antwort

1

Wenn Sie sagen, dass Sie die Datei komprimieren, was meinst du? Wenn du einen Algorithmus wie zip oder lha meinst, wird das nicht unbedingt die Größe der Datei reduzieren. Was Sie tun möchten, ist, Zeilensegmente aus der KML-Datei zu entfernen. Bei der Reduzierung einiger geographischer Informationen stellte ich fest, dass es Längen von vielen Meilen gab, die weniger als einen Fuß von einer geraden Linie entfernt waren. Da die Datenpunkte alle paar Fuß beabstandet waren, bedeutete dies, dass die große Mehrheit der Punkte in der KML-Datei entfernt werden konnte, ohne das Erscheinungsbild der Geometrie merklich zu verändern. Die Suche nach geraden Liniensegmenten ist relativ einfach.

Sie sollten auch den Maßstab der Karte, die Sie anzeigen, und den Abstand der Datenpunkte in der KML-Datei berücksichtigen. Selbst wenn die Linien komplexe Kurven sind, kann es möglich sein, eine große Anzahl von Punkten zu entfernen, indem versucht wird, Kurvensegmente der Merkmale zu krümmen und die Größe der Daten auf diese Weise zu reduzieren.

Sie scheinen zu implizieren, dass das Herunterladen der Daten vom Server auf den Client viel mehr Zeit in Anspruch nimmt als die Verarbeitung der Daten auf dem Server. Wenn dies korrekt ist, ist das Reduzieren der Anzahl der Punkte die effizienteste Methode.

+0

Komprimierung mit gzip Wir haben die Punkte und Zeit zum Download von 120s auf 15s geändert. Trotzdem scheint es langsam!Ich glaube nicht, dass es dafür eine Lösung gibt. –

+0

Es gibt wahrscheinlich keine einfache Lösung oder eine, die allgemein anwendbar ist. Ein Ansatz wäre, eine KML-Datei zu verwenden, um alle Punkte zu plotten und sie bei verschiedenen Vergrößerungsgraden zu betrachten. –

0

Es gibt eine Reihe von Tricks, mit denen Sie versuchen können, die Download-Zeit & einer KML-Polygon-Datei zu reduzieren.

Wie bereits in vorherigen Antworten vorgeschlagen, besteht der Schlüssel darin, die Größe Ihrer Daten zu reduzieren. Je nach Anwendungsfall kann dies auf verschiedene Arten erfolgen:

  • Reduzieren Sie die Anzahl der Punkte, aus denen die einzelnen Liniensegmente/Polygongrenzen bestehen. Es gibt viele Algorithmen dafür, der Douglas-Peucker Algorithmus zur Vereinfachung der Linienführung ist der bekannteste.
  • Reduzieren Sie die Genauigkeit Ihrer Datenpunkte. Wenn Ihre Koordinaten mit hoher Genauigkeit gespeichert sind (d. H. Breiten-/Längengrade mit mehreren Dezimalstellen), können Sie diese bis zu einem niedrigeren Genauigkeitsgrad/weniger Dezimalstellen runden. Beachten Sie, dass Sie möglicherweise damit spielen müssen, da dadurch die Grenze Ihrer Polygone abgehackt/zackig wird, wenn Sie zu weit gehen.
  • Komprimierung. Es sieht so aus, als hättest du schon damit experimentiert. Die Gzip-Komprimierung sollte in der Lage sein, die Wirel Payload-Größe von KML deutlich zu reduzieren.
  • Schließlich, wenn Sie immer noch nicht die gewünschten Ergebnisse erhalten, könnten Sie in Betracht ziehen, Ihre Daten weiter zu verallgemeinern, indem Sie kleine/unbedeutende Polygone entfernen. Auch dies hängt von Ihrem Anwendungsfall ab
+0

Danke Aengus, die reduzierte Datei ist jetzt 1,6 MB. Aber immer noch 15s zu laden, was etwas frustrierend von der Benutzerfreundlichkeit ist. –

+0

Ja, das ist immer noch ziemlich langsam. Hast du geschaut, wohin die 15s gehen? z.B. Netzwerk, lesen, rendern. Weitere Optimierungen hängen davon ab, was Sie mit den Polygonen auf dem Client zu tun versuchen. Haben Sie sich das serverseitige Rendering angesehen? – aengus