จะเชื่อมต่อ OpenLayers กับข้อมูล PostGIS ได้อย่างไร


10

ฉันได้อ่านใน OpenLayers แล้ววิธีโหลด KML, GeoJSON ฯลฯ ไฟล์เวกเตอร์ใน OpenLayers แต่ฉันจะเชื่อมต่อกับข้อมูล PostGIS ได้อย่างไร มิฉะนั้นฉันควรอัพโหลดข้อมูลของฉันไปที่ PostGIS แทนที่จะวางข้อมูลของฉันโดยตรงโดยใช้ WebServices ฉันไม่มีอะไรเลยหรือ

และฉันต้องการที่จะโหลดข้อมูลเวคเตอร์นี้เพื่อที่เราจะได้เห็นแอททริบิวต์โดยคลิกที่ฟีเจอร์ ฉันต้องการ PostGIS เพราะในอนาคตฉันต้องการเปิดใช้งานแบบสอบถาม ฉันคิดว่าเป็นไปได้โดยการรักษาฐานข้อมูลเช่น PostGIS แต่วิธีการใช้ OpenLayers?

ฉันได้อ่านคู่มือผู้เริ่มต้นของ OpenLayers แล้ว แต่ไม่ได้มีการกล่าวถึง กรุณาช่วย!!

คำตอบ:


26

น่าเสียดายที่คุณไม่สามารถเชื่อมต่อเว็บเพจกับฐานข้อมูลโดยตรงเนื่องจากความกังวลด้านความปลอดภัยโดยปกติคุณจะต้องมีมิดเดิลแวร์บางตัวเพื่อเชื่อมต่อทั้งสองเข้าด้วยกัน

ดังนั้นสำหรับตัวอย่างของคุณและหากคุณต้องการใช้ซอฟต์แวร์โอเพ่นซอร์สคุณสามารถใช้ GeoServer เป็นเซิร์ฟเวอร์ทางภูมิศาสตร์ของคุณเพื่อให้บริการข้อมูลของคุณจากฐานข้อมูล PostGIS ไปยังเว็บเพจ HTML ของ OpenLayers

ทำไมสิ่งนี้ถึงดีคือ GeoServer จะให้บริการข้อมูลในแบบมาตรฐาน OGC Web Map Server (WMS) หรือ Web Feature Service (WFS) และทั้งคู่เข้าใจโดย OpenLayers และ API อื่น ๆ (ESRI, Leaflet etc) และเดสก์ท็อปอื่น ๆ ซอฟต์แวร์ GIS (ESRI, MapInfo, QGIS, uDig เป็นต้น)

ดังนั้นฉันจะดูที่เอกสาร GeoServer เริ่มต้นซึ่งจะแนะนำวิธีการเชื่อมต่อ GeoServer กับ PostGIS จากนั้นให้บริการข้อมูล

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

หากคุณยังใหม่กับสิ่งต่าง ๆ เหล่านี้ไม่มีสถานที่ที่จะเริ่มต้นได้ดีไปกว่าแบบฝึกหัด OpenGeo

http://workshops.opengeo.org/

แน่นอนว่าฉันจะยึดข้อมูลของคุณเป็น PostGIS ถ้า

ก) คุณมีข้อมูลจำนวนมากข) คุณต้องการเรียกใช้คิวรี (เช่นคุณ) และ c) หากมีคนจำนวนมากกำลังใช้แอปของคุณ

หากคุณกำลังจะเรียกใช้แบบสอบถามฉันจะดูที่บริการการประมวลผลเว็บ (WPS) เหล่านี้จะยังคง "ใหม่" แต่สิ่งเหล่านี้ได้รับการสนับสนุนใน GeoServer

อย่างไรก็ตามหากคุณมีข้อมูลจำนวนน้อยและสามารถเรียกใช้คิวรีได้ล่วงหน้าจากนั้นใช้ OpenLayers เพื่อแสดงผลคุณควรใช้ GeoJSON จากไฟล์แฟล็ตหรือดู TopoJSON ที่ได้รับความนิยมอย่างมากจากไลบรารี D3 javascript - ดูที่นี่http://bost.ocks.org/mike/map/การสอนของ Mike Bostock นั้นยอดเยี่ยม

หวังว่าจะช่วย


14

วิธีหนึ่งในการเชื่อมต่อทั้งสองจะอยู่กับ GeoJSON นี่คือตัวอย่างแบบสอบถามของฐานข้อมูล PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

เมื่อคุณได้รับผลการสืบค้นแล้วคุณสามารถทำสิ่งนี้ได้:

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

featurecollectionผลลัพธ์การสืบค้น PostGIS ของคุณอยู่ที่ไหน

โปรดทราบว่าหาก GeoJSON ของคุณซับซ้อนมากอาจมีปัญหาในการโหลด / การแสดงผล

ดูแหล่งที่มาตัวอย่าง OpenLayers นี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเทคนิคนี้


3

ฉันใช้ PostGis ร่วมกับ Openlayers 3/4 โดยไม่มี GeoServer วิธีที่ฉันเลือกคือรับ geojson จากฐานข้อมูล Postgis ผ่านฟังก์ชั่นที่ฉันเรียกใช้ซึ่งจะส่งคืนข้อมูลและสไตล์ตามการตั้งค่าของฉัน

ใน Javascript ฉันกำหนด data และใส่สไตล์ => Javascript-function เรียก php-script ผ่าน GET เพื่อเรียกคืนข้อมูลจาก Postgis => ฟังก์ชั่นรูปแบบข้อมูลที่จะแสดงใน Openlayers 3. sript ทั้งหมดสามารถมองเห็นได้ในมีวิธีง่าย ๆ ในการ ใช้ Postgis-geojson ใน Openlayers 3 หรือไม่

ดูเหมือนว่าวิธีนี้จะไม่ปลอดภัยเนื่องจาก GET-Strings สามารถจัดการได้ แต่ฉันใช้การโทรผ่าน https และ php-script ของเซิร์ฟเวอร์จะตรวจสอบว่ามีการตั้งค่า SESSION หรือไม่ ดังนั้นสคริปต์ไม่สามารถดำเนินการได้โดยไม่ต้องลงชื่อเข้าระบบเราใช้สิ่งนี้ในกลุ่มขนาดเล็กมาก แต่อาจไม่ใช่วิธีที่ดีในสภาพแวดล้อมที่มีบทกวีมากมายที่เข้าถึงข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.