Opcje wyświetlania rastrów PostGIS w OpenLayers


12

To pytanie jest podobne do wcześniejszego pytania dotyczącego wyświetlania danych wektorowych na mapie internetowej. Chcę mieć podstawowy interfejs sieciowy, który korzysta z OpenLayers i może wyświetlać dane rastrowe, które są obecnie w PostGIS, przy użyciu mapy bazowej, takiej jak Google. Zainstalowałem PostGIS2.0 z biblioteką rastrową i z dokumentacji wynika, że ​​istnieje kilka opcji wyświetlania danych wyjściowych, takich jak JPEG, GeoTIFF i PNG. Czy jest to zalecany format?

Aby wyświetlić dane wektorowe, obecnie używam javascript do wysyłania współrzędnych z przeglądarki użytkownika na mój serwer, a następnie wykonuję zapytanie za pomocą PHP / SQL na PostGIS. Wyniki są następnie zwracane jako GeoJSON, które można nałożyć na mapę bazową. Zastanawiałem się, czy podobne podejście można zastosować przy użyciu rastrów, ale nie wiem, który format rastra jest najlepszy, czy też są jakieś inne ograniczenia, które powinienem rozważyć.

Widziałem wiele odniesień do GeoServera, ale nie jestem pewien, czy jest to konieczne dla tego projektu (nie jestem całkowicie pewien, kiedy GeoServer powinien być użyty, czy nie).

Odpowiedzi:


13

Rastry to obrazy , więc najlepszym formatem będzie format obrazu (png / jpg / etc). Geojson to dobry format dla wektorów . Powiedzmy, że nigdy nie zobaczysz, że Twoje zdjęcie profilowe na Facebooku zostanie przywrócone jako czysty Json. Oczywiście, zwracanie adresu URL obrazu jako json jest bardzo różne :)

Jeśli chodzi o jpeg vs png vs jakakolwiek inna dyskusja w formacie obrazu, istnieje mnóstwo różnych opinii na ten temat . Sprowadza się to do tego, że niektóre formaty obrazów są bezstratne, podczas gdy inne są stratne . Twoja decyzja zależy od tego, co zrobisz z danymi. Do analizy prawdopodobnie nie będziesz tolerować stratności, ale do wyświetlania rzeczy w sieci zrobiłbyś to.

Czy PostGIS 2.0 może generować obrazy? Pewnie. Spójrz na sekcję danych wyjściowych Raster.

Czy to dobry pomysł? To naprawdę naprawdę zależy od tego, co robisz. Czasami generowanie obrazów może zająć naprawdę bardzo długo i chcesz je buforować, aby uniknąć płacenia ceny za generowanie ich za każdym razem, gdy poprosisz o nie za pośrednictwem środowiska internetowego. Jedynym „buforowaniem”, które można wykonać po stronie PostGIS, jest zapisanie wyników w innej tabeli, a następnie zapytanie tabeli w razie potrzeby. Geoserver ma do tego celu całą infrastrukturę ( GeoWebCache ).

Czy potrzebujesz GeoServera, prawdopodobnie nie - ale to znacznie ułatwia życie, gdy masz to oprogramowanie pośrednie, które odsłania wszystkie dane za pomocą usług internetowych OGC , buforuje , stylizuje wektory i rastruje całą masę innych rzeczy .


Rozumiem, jak wygenerować obraz za pomocą PostGIS - staram się zrozumieć, jak najlepiej załadować go do Openlayers. Na przykład, jeśli użyję ST_AsPNG () - nadal będę musiał zidentyfikować górną i dolną współrzędną, w której znajduje się ten obraz. Pomyślałem, że może być fajny sposób na zwrócenie niezależnego obrazu, który mógłbym bezpośrednio załadować do openlayerów (oprócz korzystania z geoservera).
djq 11.10.11

Tak, możesz załadować go bezpośrednio do openlayers ze st_aspng, ale będzie to wymagało dodatkowej pracy. Następnie musisz śledzić bbox i sprecyzować go, gdy go załadujesz dev.openlayers.org/apidocs/files/OpenLayers/Layer/Image-js.html Zaufaj mi, to długa droga. Lepiej jest pozwolić na to geoserver lub mapserver. Zwracają WMS / WMTS, a ty używasz dwóch linii kodu, aby dodać go do openlayers.
Ragi Yaser Burhum

4

Mapserver obsługuje rastry postgis, a wskazówki dotyczące podstawowej konfiguracji podano tutaj (punkt 9.9).

W twoim przypadku skonfigurujesz Mapserver do pracy jako serwer WMS, aby zwracał rastry Postgis jako normalne warstwy WMS. Wówczas dodawanie warstw do mapy OpenLayers za pomocą obiektu warstwy WMS jest prawie banalne .

Tego rodzaju rozwiązanie jest prawdopodobnie najlepszą opcją, ponieważ opiera się na oprogramowaniu OpenSource, jest sprawdzonym stosem i nie wymaga dużego oprogramowania pośredniego. Wszystko czego potrzebuje serwer map to serwer WWW (apache, którego prawdopodobnie już używasz dla php jest w porządku), który może uruchamiać skrypty cgi. Jeśli wydajność nie jest krytycznym problemem, możesz uniknąć korzystania z pamięci podręcznej (kafelkowej) i po prostu kazać serwerowi map renderować warstwy w locie za każdym razem.

Jeśli chcesz buforować kafelki, aby zminimalizować obciążenie serwera i poprawić czasy odpowiedzi, rozważ użycie mapcache lub tilecache . Mapcache jest młodszym siostrzanym projektem Mapserver, ale powinien przewyższać wszystkie inne pamięci podręczne, ponieważ działa jako moduł apache.

Dla użytkowników Ubuntu najłatwiejszym sposobem na zainstalowanie zależności Mapserver jest dodanie Ubuntu GIS PPA do twojego systemu.


Mapserver jest zdecydowanie świetną alternatywą dla GeoServer (używam go do innych projektów). Ogólnie wybieram geoserver dla moich klientów, ponieważ ma łatwy w użyciu interfejs. Niemniej jednak chciałem zauważyć, że serwowanie pamięci podręcznej kafelków służy do dostarczania zawartości statycznej, a każde rozwiązanie oparte na nginx (lub dowolnym innym nieblokującym serwerze) byłoby znacznie szybsze niż każde rozwiązanie apache - w trybie izolacji procesowej lub w trybie wątkowym.
Ragi Yaser Burhum

Dzięki @unicoletti. Czy mogę używać Mapserver, jeśli chcę generować rastry na podstawie zapytania użytkowników? Na przykład, jeśli pozwolę użytkownikom określić dowolny obszar (w ramach określonej granicy), czy pozwoli mi to wykonać zapytanie przestrzenne dotyczące tego obszaru?
djq 10.10.11

Zarówno @celenius Mapserver, jak i GeoServer pozwolą ci to zrobić.
Ragi Yaser Burhum,

1
@RagiYaserBurhum Porównuję mapcache do innych pamięci podręcznych. Płytki statyczne nie stanowią ściśle pamięci podręcznej.
unicoletti

0

To wszystko zależy. Rozmiar obrazu, buforowanie, dostępne biblioteki (na przykład niektóre zastrzeżone sterowniki jp2k).

Oto link do niesamowitego pliku PDF Geoserver na sterydach. Spowoduje to przejście przez różne formaty, ich zalety i wady oraz podstawowe ustawienia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.