Jak połączyć OpenLayers z danymi PostGIS?

10

Przeczytałem w OpenLayers, jak ładować pliki wektorowe KML, GeoJSON itp. W OpenLayers. Ale jak mogę połączyć się z danymi PostGIS. Jeśli nie, dlaczego powinienem przesłać moje dane do PostGIS, zamiast bezpośrednio umieszczać moje dane za pomocą WebServices. Czy coś mi brakuje?

I chcę załadować te dane wektorowe, aby można było zobaczyć atrybuty, klikając funkcje. Potrzebuję PostGIS, ponieważ w przyszłości chcę włączyć zapytania. Myślę, że jest to możliwe tylko poprzez utrzymanie bazy danych takiej jak PostGIS. Ale jak korzystać z OpenLayers?

Przeczytałem przewodnik dla początkujących OpenLayers, ale nigdzie go nie wymieniono. Proszę pomóż!!

GP92
źródło

Odpowiedzi:

26

Niestety ze względów bezpieczeństwa nie można połączyć strony internetowej bezpośrednio z bazą danych, zwykle potrzeba trochę oprogramowania pośredniego, aby połączyć je ze sobą.

Na przykład, jeśli chcesz pozostać przy oprogramowaniu Open Source, możesz łatwo użyć GeoServer jako serwera geograficznego do obsługi danych z bazy danych PostGIS na stronie HTML OpenLayers.

Dlaczego to dobrze, że GeoServer będzie obsługiwał dane w standardowy sposób, OGC Web Map Server (WMS) lub Web Feature Service (WFS) i oba są rozumiane przez OpenLayers i wiele innych API (ESRI, Ulotka itp.) I innych Desktop Oprogramowanie GIS (ESRI, MapInfo, QGIS, uDig itp.)

Chciałbym więc zapoznać się z dokumentacją GeoServer rozpoczynającą się, która przeprowadzi cię przez proces łączenia GeoServera z PostGIS, a następnie obsługiwać dane.

http://docs.geoserver.org/stable/en/user/gettingstarted/index.html

Jeśli jesteś nowy w tego typu rzeczach, nie ma lepszego miejsca na rozpoczęcie niż samouczki OpenGeo

http://workshop.opengeo.org/

Zdecydowanie trzymałbym się twoich danych znajdujących się w PostGIS, jeśli

a) masz dużo danych b) chcesz uruchamiać zapytania (tak jak Ty) c) jeśli wiele osób zamierza korzystać z Twojej aplikacji

Jeśli zamierzasz uruchamiać zapytania, spojrzałbym na Web Processing Services (WPS), są one nadal „nowe”, ale są obsługiwane w GeoServer.

Jeśli jednak masz niewielką ilość danych i możesz wstępnie uruchomić zapytania, a następnie po prostu użyć OpenLayers do wyświetlenia, powinieneś trzymać się GeoJSON z pliku płaskiego lub nawet spojrzeć na TopoJSON, który zyskuje dużą popularność dzięki bibliotece javascript D3 - zobacz tutaj http://bost.ocks.org/mike/map/ Samouczek Mike'a Bostocka jest świetny.

Mam nadzieję, że to pomaga

tjmgis
źródło
14

Jednym ze sposobów połączenia tych dwóch jest GeoJSON. Oto przykładowe zapytanie do bazy danych PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Po otrzymaniu wyników zapytania możesz zrobić coś takiego:

       var geojson_format = new OpenLayers.Format.GeoJSON();
       var vector_layer = new OpenLayers.Layer.Vector(); 
       map.addLayer(vector_layer);
       vector_layer.addFeatures(geojson_format.read(featurecollection));

Gdzie featurecollectionjest wynik zapytania PostGIS;

Pamiętaj jednak, że jeśli GeoJSON jest bardzo złożony, mogą wystąpić problemy z ładowaniem / renderowaniem.

Zobacz źródło tego przykładu OpenLayers, aby uzyskać więcej informacji na temat tej techniki

Taylor H.
źródło
3

Używam PostGis razem z Openlayers 3/4 bez GeoServer. Wybieram sposób pobierania geojsona z bazy danych Postgis za pomocą wywoływanej przeze mnie funkcji, która zwraca dane i style zgodnie z moimi ustawieniami.

W Javascript definiuję dane i styl = = funkcja JavaScript wywołuje skrypt php przez GET, aby pobrać dane z Postgis => funkcja stylizuje dane do renderowania w Openlayers 3. Całe skrypty można zobaczyć w Czy istnieje prosty sposób na korzystać z Postgis-geojson w Openlayers 3?

Wygląda na to, że ten sposób nie jest bezpieczny, ponieważ można manipulować GET-Strings, ale używam wywołania przez https, a skrypt php na serwerze sprawdza, czy jest ustawiona SESSION. Tak więc skrypty nie mogą zostać wykonane bez zalogowania się. Używamy tego w bardzo małej grupie, ale może to nie być dobry sposób w środowisku, w którym wielu ludzi ma dostęp do danych.

geom
źródło