GML, KML, GeoJSON - การเรนเดอร์ 3109 รูปหลายเหลี่ยม?


12

ฉันกำลังทำงานกับ Geoserver ซึ่งให้บริการเขตลดระดับ 48 เขตให้แก่ openlayers (3109 รูปหลายเหลี่ยม - จุดยอดอีกมากมาย) มณฑลถูกโหลดลงในฐานข้อมูล postgis ฉันอยากรู้เกี่ยวกับประสบการณ์ของนักพัฒนาซอฟต์แวร์เมื่อพยายามผลักดันจำนวนจุดยอดนั้นไปยังลูกค้า

รูปแบบ WFS ใดที่คุณได้รับผลลัพธ์ที่ดีที่สุด มีการใช้การปรับแต่ง Geoserver เพิ่มเติมหรือไม่

ฉันรู้ว่า WMS แบบเรียงต่อกันจะเร็วขึ้น แต่ฉันต้องการอนุญาตให้มีการเปลี่ยนแปลงแบบไดนามิกในแผนที่นักร้องโดยใช้ openLayers เช่น ผู้ใช้ส่งแบบฟอร์มสคริปต์ Python ถูกเรียกใช้และถังขยะข้อมูลใหม่จะถูกส่งคืนเพื่อ openlayers เพื่อโหลด div แผนที่ใหม่ ฉันต้องการลองแบบเต็มความละเอียดก่อนที่จะลดความซับซ้อนของรูปหลายเหลี่ยมใน openlayers

คำตอบ:


4

บางทีนี่อาจทำให้เกิดความคิดใหม่ ๆ : ฉันมีแอพพลิเคชั่นที่ให้ผู้ใช้สามารถแก้ไขแผนที่ที่มีองค์ประกอบหลายอย่าง

แทนการส่งข้อมูลทั้งหมดเป็น WFS, ผมใช้แผนที่ WMS และเมื่อผู้ใช้คลิกหรือดึงให้เลือกผมเรียกรายการที่เลือกเป็น WFS

หลังจากส่งอัปเดตกลับไปที่เซิร์ฟเวอร์ฉันรีเฟรชเลเยอร์ WMS

มีตัวอย่างของ OpenLayers บางตัวที่แสดงให้เห็นว่าคุณทำได้อย่างไร คุณอาจต้องปรับแต่งนิดหน่อย แต่ OpenLayers + GeoServer จะจัดการส่วนที่ยากสำหรับคุณ ข้อมูลถูกส่งไปที่ gzipped ดังนั้นรูปแบบดั้งเดิมจึงไม่สำคัญ มันไม่ใช่คอขวด ให้ OpenLayers และ GeoServer หารูปแบบที่ใช้ในการแลกเปลี่ยนข้อมูล

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

ในที่สุด .. off-topic แต่ตามที่คุณตั้งใจจะทำสิ่งที่ฝั่งไคลเอ็นต์ด้วยข้อมูลแผนที่: โปรดทราบว่า IE7 และที่ต่ำกว่าจะเป็นปัญหาหากคุณต้องการวาดรูปหลายเหลี่ยมด้วย OpenLayers OpenLayers ใช้ SVG สำหรับการวาดภาพฝั่งไคลเอ็นต์และ IE7 และรุ่นที่ต่ำกว่าไม่มีการสนับสนุนในตัวผู้ใช้เหล่านั้นจะต้องดาวน์โหลดปลั๊กอินเก่าที่เส็งเคร็ง เบราว์เซอร์อื่น ๆ ทั้งหมดนั้นใช้ได้


IE8 เกือบจะไม่ดีเท่าที่ควร OpenLayers มีโหมดเรนเดอร์หลายตัวและสำหรับเบราว์เซอร์ที่ไม่รองรับ Canvas หรือ SVG นั้นจะใช้ VML ซึ่ง IE7 รองรับ ตัวเรนเดอร์ที่ต่างกันให้ประสิทธิภาพที่ดีขึ้นและแย่ลงในสถานที่ที่แตกต่างกันเช่นการเรนเดอร์เทียบกับการตรวจจับการเลื่อนเมาส์และคลิก
tomfumb

3

GEOJSON อยู่ในความคิดของฉันรูปแบบที่ดีที่สุดมันง่ายต่อการอ่านใช้งานง่ายในจาวาสคริปต์และโดยทั่วไปจะมีขนาดเล็กกว่า GML / KML มันยังสามารถมีข้อมูลเกี่ยวกับรูปแบบ, ดูที่นี่

มันไม่ได้เป็นมาตรฐานอย่างเป็นทางการ แต่รองรับทั้งแผ่นพับและ openlayers และในแอพ gis-desktop มากมายเช่น qgis


2

การใช้ GeoJSON เป็นการเริ่มต้นที่ดีในการเร่งความเร็วระบบของคุณ แต่อาจไม่เพียงพอ คุณควรพิจารณาการสร้างชั้นข้อมูลหลาย ๆ รุ่นต่อชั้นการซูมหนึ่งชั้นและใช้วิธีการทั่วไป / การทำให้เข้าใจง่ายในแต่ละรุ่น ลูกค้าควรขอเลเยอร์ที่เกี่ยวข้องโดยขึ้นอยู่กับระดับการซูมที่เลือก ซึ่งจะทำให้แน่ใจว่าระดับรายละเอียดของข้อมูลที่แลกเปลี่ยนระหว่างเซิร์ฟเวอร์และไคลเอนต์นั้นเหมาะสมและจะเพิ่มความสำคัญมากขึ้นทั้งการถ่ายโอนเครือข่ายและการเรนเดอร์ เพื่อเพิ่มเติมคุณสามารถขยายระบบของคุณด้วยการปูกระเบื้องแบบเวกเตอร์และการจัดทำดัชนีเชิงพื้นที่ตามที่อธิบายไว้ในเอกสารนี้แต่ฉันไม่แน่ใจว่า openlayers และ geoserver สามารถจัดการได้ ... ยัง!

แน่นอน: ลืม GML


นี่คือวิธีสำรองทางเลือกของฉันเมื่อ WFS ความละเอียดเต็มช้าเกินไป ฉันสนใจปัญหาของขนาดนี้และต้องการรายงานทั้งความเร็วความละเอียดเต็มรูปแบบและหากจำเป็นความเร็วในการลดความละเอียดจะลดลง
Jay Laura

2

ทำไมไม่ใช้สคริปต์ไพ ธ อนของคุณเพื่อสร้างไฟล์ SLD ใหม่และส่งไปยังเซิร์ฟเวอร์ WMS พร้อมกับคำขอของคุณ

มีตัวอย่างเป็นที่นี่


ฉันได้พิจารณาสิ่งนี้แล้วและจะทดสอบตัวเลือกนี้เพื่อความเร็ว นี่ไม่ใช่เพื่อการพัฒนา แต่เพื่อการวิจัยดังนั้นฉันจึงอยากลองใช้ WFS
Jay Laura

1

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

หากคุณต้องการแสดงผลแบบไดนามิกฉันวิธี @ วินาที iant ผมอธิบายไว้ก่อนหน้าจำนวนของตัวเลือกสำหรับปัญหาที่แตกต่างกัน แต่ที่เกี่ยวข้องที่นี่ ฉันได้ใช้การรวมหลายเหลี่ยมทั่วไปเพื่อช่วยในการเรนเดอร์ฝั่งไคลเอ็นต์และในขณะที่มันช่วยได้แน่นอนมันสร้างปัญหาที่ยากขึ้นเช่นถ้าคุณต้องการดึงโพลีกอนที่ไม่ได้ทำให้เป็นมาตรฐาน

แม้ว่าคุณจะทำงานกับแพลตฟอร์มที่รู้จัก - เช่นคุณรู้ว่าฮาร์ดแวร์รุ่นของเบราว์เซอร์และปลั๊กอินของลูกค้าทั้งหมด - ซึ่งไม่น่าเป็นไปได้คุณไม่ทราบว่าลูกค้าเหล่านั้นอยู่ภายใต้การโหลดแบบใด วิธีการแบบนี้ต้องการให้เบราว์เซอร์สามารถใช้เวลา CPU นานในการรักษาประสบการณ์การใช้งานของผู้ใช้และสิ่งอื่น ๆ จะสร้างความรำคาญให้กับผู้ใช้ของคุณ

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