Auf dem Weg zu einem Protokoll zur Codierung von Vektordaten als Bild

16

Dies ist eine Antwort auf diese Frage: Erstellen von Vektorpolygonen mit Renderleistung wie GISCloud?

In seiner Antwort skizziert Yagi eine Begründung für das Codieren von geografischen Informationen in einem Bildformat und das Decodieren dieser Informationen im Browser. Er bemerkt, dass "Um dies zu tun, musst du deine eigenen würfeln". Er merkt auch an, dass es derzeit keinen Standard dafür gibt.

Angesichts der hervorragenden Leistung, die demonstriert wird, scheint es, als könnte die Community von einem Standard profitieren. Nach meinem Verständnis des Problems klingt es so, als ob eine Standardmethode für den Umgang damit implementiert werden könnte. Nennen Sie es B-WFS.

Meine Frage also: Wie würde ein nützliches Protokoll für die Codierung von Vektordaten als Bilder aussehen? Gibt es etwas, das es zu komplex macht, um es sinnvoll anzugehen, oder handelt es sich nur um den Fall, dass "noch niemand dies getan hat"?

canisrufus
quelle
Es tut mir leid für meine Unwissenheit, vielleicht habe ich nicht verstanden, aber ein Geotiff mit Farbtabellen-Wunde macht den Job nicht?
Pablo
2
Entschuldigen Sie auch meine Unwissenheit;) Ich bin mir nicht sicher, was eine Farbtabelle ist, aber ich denke nicht. Das Ziel ist nicht, ein Bild mit entsprechenden Metadaten weiterzugeben. Wie Sie bereits erwähnt haben, ist dies ein gelöstes Problem. Das Ziel besteht darin, Vektordaten mit Metadaten in einem kompakteren Format als das von Menschen lesbare UTF-8 weiterzugeben. Da JavaScript nicht für den Umgang mit Binärdaten geeignet ist, besteht die Problemumgehung darin, Daten in einer Bildbinärdatei zu codieren und sie mit HTML 5 Canvas zu decodieren, um das Bild zu decodieren und dann in Vektorobjekte umzuwandeln.
canisrufus
1
@Pablo Unter der Annahme, dass Netzwerk-E / A (statt Parsing) der Engpass beim Umgang mit Vektoren im Web ist, sollte eine etablierte Methode zum Umgang mit binär codierten Vektoren das Schreiben leistungsfähigerer Webkarten erleichtern.
canisrufus
Interessant, jetzt verstehe ich es ... Ich beginne jetzt mit Webmaps zu arbeiten und lerne immer noch die Grundlagen. Übrigens, eine Colortable oder Colormap ist eine Tabelle, die einen Rasterzellenwert mit einer Klasse verknüpft.
Pablo
1
@monkut Ja, es ist anders. :) Wenn Sie eine Reihe von Vektoren rastern, wird sie nur gerendert. Voila. Raster! Was ich in dieser Frage angesprochen habe, ist anders. Sie sollten Ragis Antwort in der Frage lesen, auf die ich verlinkt habe. das sollte erklären, was ich meine. Wenn Sie feststellen, dass es immer noch nicht klar ist, werde ich mir etwas Zeit nehmen, um eine echte Antwort zu verfassen.
Canisrufus

Antworten:

5

Es stellt sich heraus, dass dies eine unnötige Arbeit ist. XHR2, ein Teil der Upgrades auf Javascript, ermöglicht den Import und das Parsen von Binärdaten, ohne dass irgendetwas erzwungen wird.

canisrufus
quelle
4

Es muss kein separater Standard als solcher sein, da in der WFS-Implementierungsspezifikation 04-094, Abschnitt 9.4 heißt:

Andere Ausgabeformate (einschließlich älterer GML-, Nicht-XML-, Binär- und herstellerspezifischer Formate) sind ebenfalls möglich, sofern die entsprechenden Werte für das outputFormat- Attribut im Capabilities-Dokument [Klausel 13] angegeben sind. Diese Spezifikation empfiehlt, für jedes dort aufgeführte Ausgabeformat einen beschreibenden Narativ in das Capabilities-Dokument aufzunehmen.

Die einfachste Möglichkeit, Binärunterstützung hinzuzufügen, besteht darin, einfach einen JSON-Stream zu GZIP, bei dem die Dekomprimierung von den meisten Browsern automatisch durchgeführt wird. Das heißt, ich habe es nicht ausprobiert, aber es würde minimale Arbeit sowohl auf Server- als auch auf Clientseite erfordern, vorausgesetzt, beide unterstützen bereits unkomprimiertes JSON.

MerseyViking
quelle
+1 für Punkt über den Standard. Zippen ist keine Binärkodierung im gleichen Sinne. Fragen zu den Auswirkungen auf die Leistung zwischen den beiden Ansätzen, einem gezippten Geojson und in einem Bild codierten Geometrien, sollten unbedingt untersucht werden.
Canisrufus
Sie haben Recht, dies verringert den Netzwerkengpass, belastet jedoch den Client und den Server stärker. Das Codieren von Vektordaten in einem Bild ist jedoch aufgrund der variablen Länge der Vektordaten, IMO, ein suboptimaler Ansatz. Es verschleiert auch die Art der Vektordaten. Ein besserer Ansatz könnte darin bestehen, zwei parallele Datenströme zu haben, einen für den Vektor und einen für das Raster, die von verschiedenen Servern und Speichergeräten verarbeitet und dann vom Client kombiniert werden können.
MerseyViking
Das Problem der variablen Länge von Vektordaten kann im Grunde auf dieselbe Weise behandelt werden, wie Netzwerke mit dem Senden von Paketen umgehen. Ich bin damit einverstanden, dass es nicht optimal ist, aber wir scheinen durch die Tatsache, dass JS nicht gut mit Binärdateien umgeht, dazu gedrängt zu werden. Ich werde einfach selbst etwas schreiben und implementieren, wenn ich Zeit habe. Ich werde es hier
einfügen,
1
Ich denke wirklich, Ragi hat es in seiner Antwort klar definiert. Ich würde zustimmen, dass ich nicht tat. :) Es kann sein, dass die Hypothese, dass ein Binärformat ein insgesamt schnelleres Datenübertragungsformat sein könnte, falsch ist. Der Unterschied könnte vernachlässigbar sein. Ich habe gesagt, dass "Auswirkungen auf die Leistung ... es wert sind, erkundet zu werden." Natürlich kann ich nicht einfach ein Binärformat definieren und dann den Sieg erklären. Wir werden sehen!
canisrufus
1
@MerseyViking Lassen Sie mich dies in Bezug auf die CPU-Zyklen relativieren, ohne meine Antwort noch einmal wiederholen zu müssen (da es sich bei Ihrer Annahme um eine vorzeitige Optimierung handelt). Zugriff auf den L1-Cache = 1 CPU-Zyklus, L2 = 14 Zyklen, RAM ~ 250 Zyklen, Datenträger = 41.000.000, Netzwerk (abhängig von der Bandbreite) = 240.000.000. I / O, ob festplattenbasiert oder netzwerkbasiert (unser Fall), ist um Größenordnungen langsamer. Wie verschiebt sich die Last vom letzten Teil des Spektrums in den ersten Teil, und zwar "vorzeitig"?
Ragi Yaser Burhum