ตัวเลือกสำหรับการแสดงผลเวกเตอร์ PostGIS ใน OpenLayers


22

ฉันใหม่กับการทำแผนที่เว็บดังนั้นคำถามนี้อาจผิดไปเล็กน้อย

ฉันต้องการมีเว็บอินเตอร์เฟสที่ใช้งานง่ายมากโดยใช้ OpenLayers (หรือแม้แต่ Google Maps หากทำได้ง่ายกว่า) ซึ่งสามารถแสดงจำนวนจุดและตารางรูปหลายเหลี่ยมที่อยู่ใน PostGIS

ฉันต้องการสิ่งนี้ให้เป็นเรื่องง่าย (และการบำรุงรักษาต่ำ) ที่เป็นไปได้:

  • ฉันไม่ต้องการสร้างกระเบื้อง (เว้นแต่จะมีเหตุผลที่ดีมาก) หรือมีมิดเดิ้ลเลเยอร์ที่ซับซ้อนและซับซ้อน
  • ประสิทธิภาพไม่จำเป็นต้องเป็นเรื่องมหัศจรรย์เนื่องจากเป็นเพื่อการใช้งานภายในและไม่จำเป็นต้องเพิ่มขนาดให้กับผู้ใช้ที่ใช้งานพร้อมกัน
  • เลเยอร์ของเวกเตอร์เลเยอร์นั้นมีความสำคัญน้อยที่สุด
  • เครื่องมือโอเพ่นซอร์สเป็นที่ต้องการอย่างมากเนื่องจากฉันแทบไม่มีงบประมาณสำหรับเรื่องนี้

อะไรคือแนวทางที่แนะนำสำหรับสิ่งนี้?

คำตอบ:


14

วิธีที่ง่ายที่สุดในการตั้งค่าแผนที่ออนไลน์จากแหล่งข้อมูล PostGIS คือการใช้ Geoserver คู่มือการใช้งานของผู้ใช้ Geoserver มีดีแนะนำสำหรับการใช้ PostGIS เป็นแหล่งข้อมูล โดยทั่วไปคุณเพิ่มแหล่งข้อมูลที่มีข้อมูลการเชื่อมต่อและหลังจากนั้นคุณสามารถเผยแพร่ตารางใด ๆ ที่มีรูปทรงเรขาคณิต นอกจาก PostGIS คุณสามารถใช้แหล่งข้อมูลอื่น ๆ ได้เช่นกัน:

ข้อความแสดงแทน

จากอินเทอร์เฟซทางเว็บของ Geoserver คุณสามารถดูตัวอย่างเลเยอร์บนหน้าเว็บของ OpenLayers คุณสามารถใช้แหล่งที่มาของหน้าตัวอย่างนี้เพื่อสร้างแอปพลิเคชัน OpenLayers ของคุณเอง

Geoserver มีตัวเลือกการออกแบบมากมายสำหรับทั้งข้อมูลเวกเตอร์และแรสเตอร์ สำหรับการเริ่มต้นคุณอาจมีความสุขมากพอที่จะปรับแต่งสไตล์ที่ทำไว้ล่วงหน้าที่มาพร้อมกับการติดตั้ง

ตามค่าเริ่มต้น Geoserver จะไม่เรียงต่อกันและ OpenLayers ไม่ขอเรียงต่อกัน หากคุณไม่ต้องการประสิทธิภาพสูงคุณไม่จำเป็นต้องกังวลกับการใช้กระเบื้อง

โดยส่วนตัวฉันคิดว่า OpenLayers ใช้งานง่ายกว่า Google Maps API และคุณจะเป็นอิสระจาก Google หากคุณต้องการแผนที่พื้นหลังคุณอาจต้องการค้นหาใน OpenStreetMap แทน


8

หากคุณไม่ต้องการเลเยอร์มิดเดิลแวร์ขนาดใหญ่คุณสามารถใช้ TinyOWS ( http://tinyows.org/trac ) - ฉันไม่เคยลองเลย แต่มันก็อ้างว่าเล็กและเร็ว นอกจากนี้ยังใช้มาตรฐาน OGC ดังนั้นหากคุณตัดสินใจที่จะเผยแพร่ไปยังผู้ชมที่กว้างขึ้นและไม่สามารถสลับไปใช้ GeoServer หรือ MapServer จะช่วยให้คุณสามารถใช้รหัสลูกค้าเดียวกันโดยไม่มีการเปลี่ยนแปลง


อ่าใช่ลืมเกี่ยวกับ tinyOWS ดูเหมือนยากที่จะกำหนดค่าและเป็นเพียงสำหรับ PostGIS
dodobas

คำถามที่ถามเกี่ยวกับ postgis เท่านั้น
Ian Turton

6

คุณสามารถใช้แอปพลิเคชันใดก็ได้ที่สามารถใช้โปรโตคอล WFS ของเซิร์ฟเวอร์ ด้วย Openlayers คุณสามารถใช้ข้อมูล PostGIS ผ่านโปรโตคอล WFS ได้อย่างง่ายดาย มีแอพพลิเคชั่น FLOSS ไม่กี่ตัวที่สามารถทำได้ ตัวอย่างเช่นFeatureServer , Geoserver , MapServer ... หากคุณยังใหม่กับการทำแผนที่เว็บฉันอยากจะแนะนำ Geoserver เพราะมันง่ายมากที่จะเริ่มต้น

เห็นนี้ตัวอย่างเช่น Openlayers กับ WFS


ลิงก์สุดท้ายเสีย
Adam Matan

1
ฉันลองพวกเขาทั้งหมดและพวกเขาทำงาน อาจจะเป็นคนสุดท้ายชั่วคราว
Mario Miler

4

Openlayers รองรับรูปแบบข้อมูลเวกเตอร์จำนวนมาก (GeoJSON, GML, KML .. ) ซึ่งสามารถแสดงและจัดรูปแบบโดยใช้เลเยอร์ OpenLayers Vector

บางทีมิดเดิลแวร์ที่ง่ายที่สุดอาจเป็นFeatureServerซึ่งสามารถให้บริการข้อมูล PostGIS ในรูปแบบที่รองรับ OL ส่วนใหญ่ ง่ายต่อการติดตั้งและมีการสนับสนุนการสืบค้นเชิงพื้นที่ / แอตทริบิวต์แบบง่าย

แต่ถ้าคุณต้องการสิ่งที่มีประสิทธิภาพมากกว่าGeoserverอาจเป็นทางออกที่ทำงานได้


ไม่ชอบ mapserver :(
dassouki

1
อันที่จริงแล้ว mapserver คือความรักครั้งแรกของฉันเดทกับที่ไหนสักแห่งในปี 2544 แต่ ... เราเพิ่งเริ่มต่อสู้กันมากมายดังนั้นเราจึงต้องเบรก :)
dodobas

ดังนั้นถ้าฉันให้ openlayers url กับ geojson / gml / kml มันก็แค่ทำให้พวกมันได้?
fmark

1
ใช่ แต่ถ้าคุณต้องการการกรองแม้จะเป็นกล่องแบบง่าย ๆ คุณต้องใช้ WFS
dodobas

4

คุณสามารถป้อน json, kml amd wkt จาก postgis เช่น st_asgeojson (), st_asKML () สำหรับสคริปต์เซิร์ฟเวอร์ PHP หรือ JSP จากนั้นใช้ openlayers ajax class สำหรับเชื่อมต่อแหล่งข้อมูลจากเซิร์ฟเวอร์ของคุณ


ฉันคิดว่าเหมาะสมกับกรณีการใช้งานปัจจุบันของฉันดีที่สุด หากช้าเกินไปฉันจะลอง TinyOWS และเซิร์ฟเวอร์แผนที่อื่น ๆ ที่ทำงานหนักกว่านี้ คุณสามารถให้รหัสตัวอย่างสำหรับฝั่ง openlayers โดยสมมติว่าฉันมีสคริปต์ PHP ที่ส่งคืน geojson / kml / wkt หรือไม่?
fmark

@chaipat: คุณมีตัวอย่างในมือ (สคริปต์ php และตัวอย่าง openlayers ที่เกี่ยวข้อง) หรือไม่
underdark

2

คุณสามารถทำได้โดยใช้ Geomajas ซึ่งจะอ่านข้อมูลของคุณจากฐานข้อมูลโดยใช้ Hibernate หรือ Geotools นี่คือ all-Java ซึ่งอาจเป็นปัญหาคือคุณต้องการภาษาอื่น


1

สิ่งที่คุณสามารถทำได้คือการใช้ไลบรารี OpenLayers และภาษาเซิร์ฟเวอร์เพื่อผลักดันรูปทรงเรขาคณิต postgis ทั้งหมดให้เป็น Openlayers คุณจะต้อง:

  • Openlayers.Layer.Vector เพื่อสร้างเลเยอร์ข้อมูลเวกเตอร์
  • Openlayers OpenLayers.Protocol.HTTP เพื่ออ่านข้อมูลจากเซิร์ฟเวอร์ Postgis
  • OpenLayers.Strategy.Fixed ตัวเลือก
  • OpenLayers.Feature.Vector เวกเตอร์ทั้งหมดอยู่ในระดับ mthis ที่ไคลเอนต์
  • OpenLayers.Format.GeoJSON หรือ OpenLayers.Format.JSON
  • ภาษาฝั่งเซิร์ฟเวอร์เพื่อขอ Postgis และรูปทรงเรขาคณิตของปั๊มให้กับลูกค้า
  • ตัวแยกวิเคราะห์ JSON บนเซิร์ฟเวอร์และไคลเอนต์เพื่อขนส่งข้อมูลในรูปแบบนี้

ด้วยวิธีนี้คุณสามารถแสดงผลได้อย่างง่ายดายโดยไม่ต้องใช้มิดเดิลแวร์อีกต่อไป

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