ดังนั้นชื่อค่อนข้างอึดอัดใจ ฉันจะให้พื้นหลังแล้วถามคำถามของฉัน
ความเป็นมา : ฉันทำงานเป็นนักพัฒนาแอปพลิเคชั่นเว็บGISแต่ในเวลาว่างฉันเล่นกับการเรนเดอร์แผนที่และปรับปรุงรูปแบบการแลกเปลี่ยนข้อมูล ฉันทำงานในพื้นที่ 2D เท่านั้น
ปัญหาที่น่าสนใจอย่างหนึ่งที่ฉันได้พบก็คือเมื่อคุณแสดงรูปหลายเหลี่ยมในขนาดเล็ก (ซูมออก) จุดยอดเยี่ยมจำนวนมากซ้ำซ้อนกัน กรณีที่รุนแรงคือคุณมีรูปหลายเหลี่ยมที่มี 500,000 จุดยอดที่ใช้พิกเซลเดียวเท่านั้น หากคุณกำลังส่งข้อมูลนี้ไปยังเบราว์เซอร์มันจะเป็นการไม่เหมาะสมที่จะละเว้นจุดยอดเหล่านั้น ~ 499,999 วิธีหนึ่งที่เราสามารถทำได้คือการแสดงภาพบนเซิร์ฟเวอร์และส่งเป็น PNG: voila มันเป็นประเด็น อย่างไรก็ตามบางครั้งเราต้องการข้อมูลที่ส่งไปยังเบราว์เซอร์ซึ่งสามารถแสดงผลด้วย SVG (หรือแคนวาสหรือผ้าใบหรือ webgl) เพื่อให้สามารถโต้ตอบได้
ปัญหา : ปรากฎว่าการใช้ชุดข้อมูลทางภูมิศาสตร์สมัยใหม่มันง่ายเกินความสามารถในการแสดงผลของ SVG ในความพยายามที่จะรับมือกับข้อ จำกัด เหล่านั้นฉันพยายามที่จะหาวิธีลดขนาดข้อมูลที่ตั้งไว้ตามขนาดและขอบเขตของแผนที่ (และถ้าจำเป็นสำหรับความกว้างและความสูงของพิกเซลแผนที่ที่ทราบ)
ฉันลดขนาดข้อมูลลงอย่างมากเพียงแค่ใช้อัลกอริทึม Douglas-Peuckerและฉันเชื่อว่าฉันสามารถทำให้รูปหลายเหลี่ยมเป็นจริงได้ภายในหนึ่งพิกเซล แต่น่าเสียดายที่ Douglas-Peucker ไม่รักษาโทโพโลยีดังนั้นจึงเปลี่ยนวิธีการแสดงเส้นขอบระหว่างรูปหลายเหลี่ยม ฉันไม่สามารถหาอัลกอริทึมอื่น ๆ เพื่อทดลองและปรับให้เข้ากับวัตถุประสงค์ได้อย่างง่ายดาย แต่ฉันมีพื้นหลัง CS / อัลกอริทึมไม่มากและอาจจำไม่ได้ถ้าฉันเห็นพวกเขา