จำนวนคุณสมบัติจุดสูงสุดในเลเยอร์เวกเตอร์ OpenLayers


27

จากประสบการณ์ของคุณคุณสามารถเพิ่มคุณสมบัติจุดจำนวนเท่าใดให้กับเลเยอร์เวกเตอร์ OpenLayers (OpenLayers.Layer.Vector ใหม่ ("เลเยอร์จุด")) ก่อนที่มันจะช้าลงอย่างผิดปกติ?

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


มีเบราว์เซอร์มาตรฐานที่ใช้อยู่หรือไม่? ขีด จำกัด อาจจะแตกต่างกันไปขึ้นอยู่กับเบราว์เซอร์ที่คุณใช้
Derek Swingley

Firefox ส่วนใหญ่ ไม่ต้องทำงานใน IEs เก่า ๆ
underdark

1
แทนที่จะเตือนผู้ใช้คุณสามารถสลับจากการขอข้อมูลเวกเตอร์เป็นการส่งคืนคะแนนเป็น WMS / รูปภาพ
geographika

@geographika: โดยปกติฉันจะทำอย่างนั้น แต่ผู้ใช้ยังได้รับการตัดสินใจว่าจะเชื่อมต่อฐานข้อมูลใด ฉันต้องรู้ฐานข้อมูลที่เป็นไปได้ทั้งหมดและมีให้ใช้ผ่าน WMS พวกเขาไม่ได้ติดตั้ง PostGIS ไว้ฉันดึงคอลัมน์ละติจูด / ลองจิจูด
underdark

คำตอบ:


38

ฉันไม่มีคำตอบที่ชัดเจนสำหรับคุณ แต่ฉันรวบรวมหน้าเว็บที่คุณสามารถเล่นด้วยคะแนนที่แตกต่างกันในแผนที่ OL: http://derekswingley.com/lab/olpts/


5
ดีเร็กควรมีตราสัญลักษณ์ 'คำตอบที่ยอดเยี่ยมพร้อมตัวอย่างจริง' สำหรับสิ่งนั้น ดีที่จะเห็นความแตกต่างของความเร็วในการวางจุด
Mapperz

3
น่าสนใจมาก! มันทำให้ฉันคิดถึง geoipsum อีกวิธีหนึ่งก็สามารถใช้เป็นอย่างดีในการทดสอบประสิทธิภาพ: craigmmills.com/geoipsum (ฉันไม่รู้ว่ามีขีด จำกัด จำนวนรูปหลายเหลี่ยม)
simo

1
@ So4ne ที่เว็บไซต์เครื่องมือของ Google app เสียชีวิตในบางจุดรหัสเดียวกัน (เกือบ 5 ปี) อยู่ที่นี่: derekswingley.com/lab/olpts
Derek

1
@nospor ออกมาเสียจากการสลับไปใช้ https อัปเดตแล้วและไซต์จะกลับมา
Derek Swingley

1
@DerekSwingley ฉันได้ทำการอัปเดตตัวอย่างตามความคิดของคุณโดยใช้ Leaflet, MapboxGL JS และ OpenLayers 4 medium.com/@ThomasG77/…ฉันใส่เครดิตสำหรับตัวอย่างของคุณ
ThomasG77

5

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

กฎหมาย radix ของTöpferระบุว่าคุณลักษณะความหนาแน่นควรอยู่ภายใต้เกณฑ์คงที่ไม่ว่าระดับการซูมจะเป็นเท่าไหร่ วิธีการแก้ปัญหานี้และปรับข้อมูลเพื่อการสร้างภาพขนาดคือการแปลงโดยใช้การดำเนินงานทั่วไปเช่นนี้หรือนี้คนอื่น


ในหัวข้อเดียวกัน: gis.stackexchange.com/q/4096/162
julien

2
จริงแท้แน่นอน. และเกี่ยวกับ Openlayers นั้นใช้กลยุทธ์คลัสเตอร์เพื่อจัดการสิ่งนั้น ดูตัวอย่าง: openlayers.org/dev/examples/strategy-cluster.html
simo

1
สำหรับแอปพลิเคชันปัจจุบันของฉันฉันเพียงแค่เชื่อมต่อ (GPS) ชี้ไปที่เส้น (แทร็ก) ที่ปรับปรุงเวลาการเรนเดอร์เรียบร้อยแล้วอย่างมาก
underdark

3

ฉันไม่คิดว่ามันเป็นไปไม่ได้ที่จะให้คำตอบที่ชัดเจนสำหรับคำถามนี้ จุดแสดงผล / รูปหลายเหลี่ยมขึ้นอยู่กับเบราว์เซอร์และฮาร์ดแวร์ (CPU & หน่วยความจำ) ที่ไม่ได้อยู่กับ OpenLayers ฉันมีปัญหากับ Openlayers และ IE6 สำหรับการเรนเดอร์ Lake (Polygon) อย่างใดอย่างหนึ่ง แต่มันโหลดได้ดีใน Firefox และตัวเลือกที่ดีที่สุดคือการตรวจสอบการใช้งานหน่วยความจำและ CPU ด้วย Chrome หรือเครื่องมือบางอย่างจะดีกว่า


1

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


1

ใน OpenLayers 6 มี WebGL point renderer ซึ่งควรอนุญาตให้คุณสร้างการแสดงผล 100 พันคุณลักษณะพร้อมการกรองตามเวลา คุณอาจต้องการที่จะตรวจสอบเวอร์ชันล่าสุดของการประชุมเชิงปฏิบัติการอย่างเป็นทางการที่https://openlayers.org/workshop/en/webgl/

ด้วย OpenLayers 2 ซึ่งฉันไม่แนะนำให้ใช้อีกต่อไปสูงสุดสำหรับอัตราเฟรมที่ยอมรับได้จะเป็นคุณสมบัติสองสามร้อยเท่านั้น


0

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

การรวมกลุ่มกันเป็นคำที่แนะนำจะใช้กลุ่มของจุดและรวมกันในจุดเดียวเช่นคุณมี 100 คะแนนในเมืองใด ๆ ทุกจุดจะมองเห็นได้เป็นจุดเดียวจากการซูมของสมมติว่า4แต่เป็นคะแนนแต่ละจุดจากการซูมขอ พูดได้ว่า10สิ่งที่คุณทำได้คือเมื่อซูมคือ4คุณสามารถรวมจุดเหล่านั้นเข้าด้วยกันสิ่งนี้จะช่วยลดจำนวนคะแนนที่จะแสดงในบางพื้นที่

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

ประสิทธิภาพที่น่าพอใจ ลิงก์ไปยังตัวอย่างการทำคลัสเตอร์บน Openlayers


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