วิธีที่ดีที่สุดในการสร้างภาพเรดาร์ข้อมูลใน openlayers


9

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

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

ฉันพยายามทำสิ่งเดียวกันโดยใช้เลเยอร์ WMS สำหรับแต่ละเลเยอร์ แต่การวาดใหม่ช้าเกินไป (ภาพเคลื่อนไหวเปลี่ยนเลเยอร์ทุก ๆ 100 มิลลิวินาที) และการใช้หน่วยความจำก็ไม่ดีไปกว่าเวอร์ชั่นเวคเตอร์

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

คำตอบ:


9

ลองหน้าต่างบานเลื่อนแปลก ๆ คุณสามารถบัฟเฟอร์ 10 ชั้นในเวลาเดียวกัน เริ่มทำลายเลเยอร์และลบออกจาก DOM และหน่วยความจำเมื่อคุณไปถึง 10 เลเยอร์ ดังนั้นเมื่อคุณกดที่เลเยอร์ 10 เลเยอร์ 0-9 จะถูกทำลายและเลเยอร์ 20-30 จะถูกโหลดด้วยการมองเห็นเป็นเท็จ สิ่งนี้จะทำให้คุณมีบัฟเฟอร์ประมาณ 10 เลเยอร์ แต่คุณสามารถปรับเปลี่ยนค่าความคลาดเคลื่อนได้ตามที่เห็นเหมาะสมกับประสิทธิภาพ หากคุณรู้สึกว่า 20 เลเยอร์ทำงานได้ดีขึ้นไปด้วย 20

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition

คุณเป็นอัจฉริยะ! ฉันยังไม่ได้นำสิ่งนี้ไปใช้ในทางปฏิบัติ แต่ฉันไม่เห็นเหตุผลใด ๆ ที่ทำให้มันใช้งานไม่ได้และบัฟเฟอร์ที่ปรับได้หมายความว่าเราสามารถปรับแต่งสิ่งนี้ให้มากขึ้นสำหรับสภาพแวดล้อมที่แตกต่างกัน ฉันไม่สามารถขอบคุณมากพอสำหรับคำแนะนำนี้!
TheOx

ขอบคุณฉันหวังว่ามันใช้งานได้จริง แจ้งให้เราทราบว่ามันทำงานอย่างไร
CaptDragon

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

ยอดเยี่ยมดีที่ได้ยินเช่นนั้น
CaptDragon

@CaptDragon: (หรือ TheOx) เป็นไปได้ไหมที่จะโพสต์ไปยังตัวอย่างที่ใช้งานได้? ฉันเข้าใจวิธีแก้ปัญหาจนถึงจุดหนึ่ง แต่การเห็นตัวอย่างง่ายๆและรหัสจะช่วยอย่างมากเนื่องจากฉันมีปัญหาเดียวกันค่อนข้างมาก ขอบคุณ!
teknocreator

1

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


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

1

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

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