W kierunku protokołu do kodowania danych wektorowych jako obrazu

16

Jest to kontynuacja tego pytania: Tworzenie wielokątów wektorowych z wydajnością renderowania taką jak GISCloud?

W swojej odpowiedzi Yagi przedstawia uzasadnienie kodowania informacji geograficznych w formacie obrazu i dekodowania ich w przeglądarce. Zauważa, że ​​„obecnie, aby to zrobić, musisz rzucić własnym”. Zauważa również, że obecnie nie ma na to żadnego standardu.

Biorąc pod uwagę pokazaną niesamowitą wydajność, wydaje się, że społeczność może skorzystać ze standardu. Z mojego zrozumienia problemu wydaje się, że można go wdrożyć w standardowy sposób. Nazwij to B-WFS.

Moje pytanie zatem: jaki byłby użyteczny protokół do kodowania danych wektorowych podczas wyświetlania obrazów? Czy jest coś, co sprawia, że ​​jest to zbyt skomplikowane, aby poradzić sobie z tym pożytecznie, czy jest to tylko przypadek „nikt jeszcze tego nie zrobił”?

canisrufus
źródło
Przepraszam za moją ignorancję, może nie zrozumiałem o co chodzi, ale geotiff z kolorową tablicą rany nie działa.
Pablo
2
Przepraszam również za moją ignorancję;) Nie jestem pewien, co to jest tabela kolorów, ale nie sądzę. Celem nie jest przekazanie obrazu z odpowiednimi metadanymi. Jak wspomniałeś, to rozwiązany problem. Celem jest przekazanie danych wektorowych z metadanymi w bardziej kompaktowym formacie niż czytelny dla człowieka UTF-8. Ponieważ JavaScript jest źle przygotowany do obsługi danych binarnych, obejściem tego problemu jest zakodowanie danych w pliku binarnym obrazu i zdekodowanie go za pomocą HTML 5 Canvas w celu zdekodowania obrazu, a następnie przekształcenia go w obiekty wektorowe.
canisrufus
1
@Pablo Zakładając, że sieciowe we / wy (a nie parsowanie) jest wąskim gardłem w kontaktach z wektorami w sieci, posiadanie ustalonego sposobu postępowania z wektorami zakodowanymi binarnie powinno ułatwić pisanie lepszych map internetowych.
canisrufus
Ciekawe, teraz rozumiem ... Zaczynam teraz pracować z mapami internetowymi i wciąż uczę się podstaw. BTW, colortable lub colormap to tabela, która wiąże wartość komórki rastrowej z klasą.
Pablo
1
@monkut Tak, jest inaczej. :) Rasteryzacja zestawu wektorów to tylko renderowanie. Voila Raster! To, o czym mówiłem w tym pytaniu, jest inne. Powinieneś przeczytać odpowiedź Ragi w pytaniu, z którym się łączyłem; to powinno zacząć wyjaśniać, co mam na myśli. Jeśli okaże się, że nadal nie jest jasne, poświęcę trochę czasu, aby napisać prawdziwą odpowiedź.
canisrufus

Odpowiedzi:

5

Okazuje się, że jest to niepotrzebne obejście. XHR2, część aktualizacji do javascript, pozwoli na import i parsowanie danych binarnych bez niczego zmuszania.

canisrufus
źródło
4

Nie musi to być osobny standard jako taki, ponieważ specyfikacja implementacji WFS 04-094, klauzula 9.4 mówi:

Możliwe są również inne formaty wyjściowe (w tym starsze wersje GML, inne niż XML, binarne i specyficzne dla dostawcy formaty), o ile odpowiednie wartości atrybutu outputFormat są podane w dokumencie możliwości [klauzula 13]. Ta specyfikacja zaleca, aby opis dokumentu [sic] był zawarty w dokumencie możliwości dla każdego formatu wyjściowego tam wymienionego.

Najłatwiejszym sposobem dodania obsługi binarnej jest po prostu GZIP strumień JSON, gdzie dekompresja jest obsługiwana automatycznie przez większość przeglądarek. To powiedziawszy, nie próbowałem tego, ale wymagałoby to minimalnej pracy zarówno po stronie serwera, jak i klienta, zakładając, że obie już obsługują nieskompresowany JSON.

MerseyViking
źródło
+1 za punkt o standardzie. Zipowanie nie jest kodowaniem binarnym w tym samym sensie. Z pewnością warto zbadać pytania dotyczące wpływu na wydajność między tymi dwoma podejściami, spakowanego geojsona vs. geometrii zakodowanych w obrazie.
canisrufus
Masz rację, zmniejsza to wąskie gardło w sieci, ale powoduje większe obciążenie klienta i serwera. Ale kodowanie danych wektorowych na obrazie jest, według IMO, nieoptymalnym podejściem ze względu na zmienną długość danych wektorowych. To także zaciemnia charakter danych wektorowych. Lepszym rozwiązaniem może być posiadanie dwóch równoległych strumieni danych, jednego dla wektora i jednego dla rastra, które mogłyby być obsługiwane przez różne serwery i urządzenia pamięci masowej, a następnie łączone przez klienta.
MerseyViking
Problem zmiennej długości danych wektorowych można rozwiązać w ten sam sposób, w jaki sieci obsługują wysyłanie pakietów. Zgadzam się, że nie jest optymalny, ale wydaje się, że jesteśmy do tego zmuszeni przez fakt, że JS nie radzi sobie dobrze z binarnym. Zamierzam po prostu napisać i zaimplementować coś samodzielnie, ponieważ mam czas. Umieszczę to tutaj, gdy coś mi się uruchomi ...
canisrufus
1
Naprawdę myślę, że Ragi jasno to zdefiniował w swojej odpowiedzi. Zgodziłbym się, że nie. :) Być może hipoteza, że ​​format binarny może być ogólnie szybszym formatem przesyłania danych, jest błędna. Różnica może być po prostu znikoma. Powiedziałem, że „implikacje dotyczące wydajności ... warto zbadać”. Oczywiście nie mogę po prostu zdefiniować formatu binarnego, a następnie ogłosić zwycięstwo. Zobaczymy!
canisrufus
1
@MerseyViking Bez konieczności powtarzania mojej odpowiedzi, pozwól mi spojrzeć na to z perspektywy cykli procesora (ponieważ twoje założenie dotyczy przedwczesnej optymalizacji). Dostęp do pamięci podręcznej L1 = 1 cykl procesora, L2 = 14 cykli, RAM ~ 250 cykli, Dysk = 41 000 000, Sieć (zależy od przepustowości, więc bądźmy mili) = 240 000 000. We / wy, zarówno dyskowe, jak i sieciowe (w naszym przypadku) jest o rząd wielkości wolniejsze. W jaki sposób przesunięcie obciążenia z ostatniej części widma do pierwszej jest „przedwczesne” o jakąkolwiek skalę?
Ragi Yaser Burhum