ฉันกำลังพัฒนาเว็บไซต์ทำแผนที่ OpenLayers การวัดสามารถทำได้โดยใช้เครื่องมือเส้นและเครื่องมือพื้นที่ ทั้งสองคนนี้มีการตั้งค่าปัจจุบันในการคำนวณการวัดเนื้อที่ตามที่ระบุไว้ในOpenLayers API
ฉันใช้การวัดทางมาตรวิทยามากกว่าการวัดแบบระนาบขณะที่ผู้ใช้ทำการทดสอบผู้คนได้ถามถึงการวัดระยะทางที่พวกเขารู้ (เช่นการขับขี่ระหว่างเมือง)
คุณลักษณะใหม่ของไซต์นี้สำหรับผู้ใช้ที่จะสามารถวาดวงกลมบนแผนที่ของรัศมีที่กำหนด OpenLayers อนุญาตเฉพาะสำหรับการวาดวงกลมโดยใช้ระยะทางระนาบดังนั้นเมื่อผู้ใช้วัดวงกลมด้วยเครื่องมือการวัดทางธรณีวิทยาค่าที่ไม่ตรงกัน ในภาพด้านล่างรัศมีระนาบวงกลมคือ 10km แต่การวัดเส้น geodesic สำหรับเส้นผ่านศูนย์กลางคือ 12km
ชัดเจนว่านี่จะทำให้ผู้ใช้ (และตัวฉันเอง) สงสัยว่าสิ่งใดถูกต้อง
เมื่อดูคำตอบนี้ดูเหมือนว่าระบบ GIS ของเดสก์ท็อปส่วนใหญ่จะ“ เพิกเฉย” ปัญหานี้และส่งคืนการวัดระยะทางและระยะทาง ดังนั้นวิธีปฏิบัติที่ดีที่สุดในแง่ของส่วนต่อประสานกับผู้ใช้และความแม่นยำในการจัดการกับการวัดแบบระนาบและมาตรวิทยา
ปรับปรุง
ฉันพบตัวอย่างของ Google ซึ่งแสดงให้เห็นถึงปัญหาของรัศมีและการฉายภาพ Mercator:
http://maps.forum.nu/gm_sensitive_circle2.html
รหัส JavaScript เพื่อวาดวงกลมมีดังนี้:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
วงกลมนี้คำนึงถึงความโค้งของโลกหรือไม่?
การปรับปรุงครั้งสุดท้าย
รหัสการทำงานที่โพสต์ที่http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers