Bagaimana cara menghubungkan OpenLayers ke data PostGIS?

10

Saya telah membaca di OpenLayers cara memuat file vektor KML, GeoJSON dll di OpenLayers. Tetapi bagaimana saya bisa terhubung ke data PostGIS. Jika tidak, mengapa saya harus mengunggah data saya ke PostGIS kemudian bukannya langsung memasukkan data saya menggunakan WebServices. Apakah saya kehilangan sesuatu?

Dan saya ingin memuat data vektor ini sehingga orang dapat melihat atribut dengan mengklik fitur-fiturnya. Saya perlu PostGIS karena di masa depan saya ingin mengaktifkan pertanyaan. Saya pikir itu hanya mungkin dengan memelihara database seperti PostGIS. Tetapi bagaimana menggunakan OpenLayers?

Saya telah membaca Panduan Pemula OpenLayers, tetapi tidak disebutkan di mana pun. Tolong bantu!!

GP92
sumber

Jawaban:

26

Sayangnya Anda tidak dapat menghubungkan halaman web secara langsung ke database karena masalah keamanan, biasanya Anda memerlukan middleware untuk menggabungkan keduanya.

Jadi untuk contoh Anda dan jika Anda ingin tetap menggunakan perangkat lunak Open Source Anda dapat dengan mudah menggunakan GeoServer sebagai server geografis Anda untuk menyajikan data Anda dari database PostGIS Anda ke halaman web OpenLayers HTML Anda.

Mengapa ini bagus adalah bahwa GeoServer akan menyajikan data dengan cara standar, OGC Web Map Server (WMS) atau Web Feature Service (WFS) dan keduanya dipahami oleh OpenLayers dan banyak API lainnya (ESRI, Leaflet dll) dan Desktop lainnya Perangkat lunak GIS (ESRI, MapInfo, QGIS, uDig dll)

Jadi saya akan melihat dokumentasi GeoServer memulai yang memandu Anda melalui cara menghubungkan GeoServer ke PostGIS dan kemudian melayani data.

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

Jika Anda baru mengenal hal-hal seperti ini, tidak ada tempat yang lebih baik untuk memulai daripada tutorial OpenGeo

http://workshops.opengeo.org/

Saya pasti akan tetap dengan data Anda berada di PostGIS jika

a) Anda memiliki banyak data b) Anda ingin menjalankan kueri (seperti yang Anda lakukan) dan c) jika banyak orang akan menggunakan aplikasi Anda

Jika Anda akan menjalankan kueri saya akan melihat Layanan Pemrosesan Web (WPS) ini masih "baru" tetapi ini didukung di GeoServer.

Namun jika Anda memiliki sejumlah kecil data dan dapat melakukan pra-jalankan kueri dan kemudian hanya menggunakan OpenLayers untuk menampilkan maka Anda harus tetap menggunakan GeoJSON dari file datar atau bahkan melihat TopoJSON yang mendapatkan banyak popularitas dengan perpustakaan javascript D3 - lihat di sini http://bost.ocks.org/mike/map/ Tutorial Mike Bostock sangat bagus.

Semoga itu bisa membantu

tjmgis
sumber
14

Salah satu cara untuk menghubungkan keduanya adalah dengan GeoJSON. Berikut ini contoh permintaan dari database PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Setelah Anda mendapatkan hasil permintaan Anda, Anda dapat melakukan sesuatu seperti ini:

       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));

Di mana featurecollectionhasil permintaan PostGIS Anda;

Harap diperhatikan bahwa jika GeoJSON Anda sangat kompleks, mungkin ada masalah pemuatan / rendering.

Lihat sumber contoh OpenLayers ini untuk info lebih lanjut tentang teknik ini

Taylor H.
sumber
3

Saya menggunakan PostGis bersama dengan Openlayers 3/4 tanpa GeoServer. Cara saya memilih adalah untuk mendapatkan geojson dari database-Postgis melalui fungsi yang saya panggil, yang mengembalikan data dan gaya itu sesuai pengaturan saya.

Dalam Javascript saya mendefinisikan data dan styling => Javascript-function memanggil php-script via GET untuk mengambil data dari Postgis => fungsi gaya data untuk di-render di Openlayers 3. Seluruh sripts dapat dilihat di Apakah ada cara mudah untuk menggunakan Postgis-geojson di Openlayers 3?

Tampaknya cara ini tidak aman, karena GET-Strings dapat dimanipulasi, tetapi saya menggunakan panggilan melalui https dan skrip php sisi server memeriksa jika SESI diatur. Jadi skrip tidak dapat dieksekusi tanpa menjadi login. Kami menggunakan ini dalam kelompok yang sangat kecil, tapi itu mungkin bukan cara yang baik di lingkungan, di mana banyak orang mengakses data.

geom
sumber