ใช้การวัดเนื้อที่สำหรับวงกลมรัศมี?


15

ฉันกำลังพัฒนาเว็บไซต์ทำแผนที่ 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


1
บางสิ่งต้องผิดที่นี่ ความแตกต่างไม่สามารถเป็น 20% ในระยะทางสั้น ๆ ระหว่างเส้นตรงและเส้นที่ตามหลังดาวฤกษ์ มีอย่างอื่นต้องมีส่วนร่วม
Nicklas Avén

4
การฉายภาพเป็นไปได้มากว่า Mercator ซึ่งมีขนาดเท่าจริงที่เส้นศูนย์สูตร (โดยทั่วไปแล้วเป็นไปได้ที่จะมีการคาดการณ์ของ Mercator ที่มีขนาดจริงที่อื่น (ที่ละติจูดเดียว) แต่พารามิเตอร์ทั่วโลกส่วนใหญ่ใช้เส้นศูนย์สูตร) และความคลาดเคลื่อนของสเกลสำหรับ Mercator นั้นสูงมากอย่างแน่นอน (ไม่มีที่สิ้นสุดที่เสา) เพิ่มขึ้นเมื่อคุณมุ่งไปทางทิศเหนือ / ทิศใต้จากละติจูดมาตราส่วนที่แท้จริง
พอลแรมซีย์

การตรวจวัดนั้นอยู่ที่ 52 องศาเหนือและอยู่ในรูปของ Mercator สิ่งนี้หมายความว่าฟีเจอร์ฝั่งไคลเอ็นต์ใด ๆ ที่ดึงมาใน Mercator จะส่งคืนพื้นที่และความยาวที่ไม่ถูกต้องเว้นแต่อยู่ใกล้เส้นศูนย์สูตร
geographika

1
ใช่ว่าเป็นกรณีที่ค่อนข้างมากฉายข้อมูลไปยังกริดท้องถิ่นเป็นเมตรหรือฟุตและทั้งหมดก็จะดี
Ian Turton

2
@Paul โทรดี แต่ข้อมูลเหล่านี้บ่งบอกว่าการฉายเป็นทรงกระบอกเท่านั้นซึ่ง Mercator นั้นเป็นหนึ่ง ในการคาดการณ์รูปทรงกระบอกที่แท้จริงการบิดเบือนแนวนอนเท่ากับวินาที (ละติจูด) โดยสูตรนี้การบิดเบือนของ 20 / 12.13 ทำงานออกไปที่ละติจูดของ 52.66 องศา; ที่ตรงละติจูดของโคลง
whuber

คำตอบ:


8

หากคุณทำเบียร์ที่บ้านในเบราว์เซอร์คุณจะได้รับ "วงกลม" (จะไม่ถูกปัดบนหน้าจอเนื่องจากการฉายภาพของคุณโดยประมาณด้วยรูปหลายเหลี่ยมที่มีหลายจุดตามที่คุณต้องการวาด) ใช้ รูปแบบโดยตรงของการคำนวณทางธรณีวิทยา: ให้จุดทิศทาง (ราบ) และระยะทางมันให้คุณจุดที่เกิด รายละเอียดเลือด: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method

หน้าตาเหมือนใครบางคนได้ทำแปลจาวาสคริปต์แล้ว: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html โชคดีนะคุณ!

ในการทำให้สิ่งต่าง ๆ เสร็จสิ้น:

  • ตัดสินใจว่าจุดยอด (จำนวนจุดยอดเรียกว่า n) คุณเต็มใจที่จะได้ผลลัพธ์สุดท้ายอย่างไร
  • แบ่ง 360 องศาออกเป็น n ชิ้น
  • สร้างรูปหลายเหลี่ยมโดย (สำหรับ i ในช่วง (n): polygon.add (vincenty_direct (start_point, i * 360 / n, ระยะทาง)))
  • หลังจากที่จริงแล้วอาจแก้ไขการฉายภาพและการระคายเคืองของ planarisation:
    • หากคุณกำลังใช้การฉายภาพแผนที่เว็บทั่วไปซึ่งคุณเกือบจะเป็นจริงรูปหลายเหลี่ยมที่เกิดขึ้นจะถูกยืดอย่างมากในแนวตั้งหากอยู่ใกล้กับเสา
    • ในทำนองเดียวกันถ้ารูปหลายเหลี่ยมผลลัพธ์ข้ามบรรทัดวันที่สากลก็จะถูก borked จริงๆ

ไชโย!


1
เมธอด Vincenty ได้ถูกเพิ่มไปยัง OpenLayers ในเนมสเปซ utils แล้ว - dev.openlayers.org/apidocs/files/OpenLayers/…ด้วยสิ่งนี้และคำอธิบายของคุณโดยเฉพาะพารามิเตอร์การแบก ขอบคุณ!
geographika

:) ให้ฉันรู้ว่าการระคายเคืองเป็นอย่างไร เป็นการดีที่การแก้ไขจะเป็นส่วนหนึ่งของ OpenLayers & มันก็ใช้ได้ แต่ฉันไม่แน่ใจ
Dan S.

3

OpenLayers อนุญาตเฉพาะสำหรับการวาดวงกลมโดยใช้ระยะทางระนาบ

เพื่อให้ได้วงกลมทางภูมิศาสตร์คุณสามารถใช้การดำเนินการบัฟเฟอร์ในบริการรูปทรงเรขาคณิตของ ESRI

... หากหน่วยเป็นเส้นตรงเช่นฟุตหรือเมตรการบัฟเฟอร์พื้นผิวจะดำเนินการ

สามารถเข้าถึงได้อย่างอิสระมีอยู่ที่นี่


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

วงกลมควรมีความถูกต้องอย่างไรก็ตามฉันจะตรวจสอบโดยใช้เครื่องมือวัดของคุณ ฉันคิดว่าบริการรูปทรงเรขาคณิตเป็นส่วนหนึ่งของการติดตั้งเซิร์ฟเวอร์มาตรฐานของ arcgis ดังนั้นหากบริการดังกล่าวเลิกใช้แล้วควรมีอีกมากมายบนเว็บให้เลือก google.com/…
Kirk Kuykendall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.