ด้วยชุดของพิกัดฉันจะคำนวณขอบเขตขั้นต่ำได้อย่างไร


13

ฉันมีชุดของพิกัดเป็น lon / lat มีพิกัดที่สั่งอย่างน้อย 3 ตำแหน่งที่รวมกันเป็นโพลี (หากถูกฉายแบน) ฉันจะคำนวณขอบเขตขั้นต่ำสำหรับพิกัดเหล่านี้เป็นชุดของลองจิจูดและละติจูดที่ถูกต้องได้อย่างไร (โดย 'ถูกต้อง' ฉันหมายถึงช่วงที่อธิบายถึง antimeridian อย่างชัดเจน) มันยากที่จะอธิบายสิ่งที่ฉันกำลังมองหาดังนั้นฉันจึงมีรูปภาพ

ป้อนคำอธิบายรูปภาพที่นี่

กรณีในภาพเล็กน้อย คุณเพียงแค่ค้นหาค่าต่ำสุดและค่าสูงสุดแน่นอนสำหรับคะแนนทั้งหมด วิธีนี้ใช้ไม่ได้กับทุกกรณี มีวิธีแก้ปัญหาทั่วไปหรือไม่?

แก้ไข: เพื่อชี้แจงสิ่งที่ฉันหมายถึงโดย 'ถูกต้อง' ว่าฉันมีสามค่าลองจิจูดในชุดข้อมูลของฉัน: -76, -135 และ 164 ค่าข้าม antimeridian และฉันต้องการช่วงผลที่จะแยก: -76 เป็น -180 และ 164 ถึง 180

ชี้แจงเพิ่มเติมบางส่วน คะแนนเป็นรูปหลายเหลี่ยมดังนั้นในบางกรณีช่วงที่ต้องการอาจอยู่ระหว่าง -180 ถึง +180 (เช่น 360 องศาเต็ม):

ป้อนคำอธิบายรูปภาพที่นี่

รูปภาพทางด้านซ้ายแสดงให้เห็นถึงลองจิจูดของสี่พิกัดที่เกิดขึ้นบน 'ครึ่ง' ของโลก ลองนึกภาพราวกับว่าคุณกำลังมองลงไปที่ขั้วโลกเหนือ (จุดสีดำ) สีชมพูแสดงช่วงยาวตามขวางขั้นต่ำที่ครอบคลุมรูปหลายเหลี่ยม (รูปหลายเหลี่ยมแสดงระหว่างจุดสี่จุดเป็นสีม่วง) กรณีทางด้านซ้ายจะมีช่วงยาวสองช่วง: [-180 ถึง -120] และ [135 ถึง 180] (เพียงประมาณค่าสายตา)

ภาพทางด้านขวาแสดงให้เห็นอีกกรณีหนึ่งซึ่งเป็นจุดที่ไปรอบ ๆ โลก ช่วงนี้จะเป็น [-180 ถึง 180]


1
ฉันไม่เคยพิจารณาปัญหานี้มาก่อนมันเป็นคำถามที่ยอดเยี่ยม อีกตัวอย่างหนึ่งของการที่โลกเรียบทำให้งานของเราง่ายขึ้น! ฉันหวังว่าจะเห็นวิธีแก้ปัญหานี้
sgrieve

ฉันคิดว่าคุณจะต้องมีความชัดเจนมากขึ้นเกี่ยวกับ "(โดย 'ถูกต้อง' ฉันหมายถึงช่วงที่ชัดเจนสำหรับ antimeridian)" - ฉันคาดเดาว่าคำว่าขั้นต่ำต้องอยู่หน้าขอบเขตของคำถาม
Ian Turton

คุณสามารถเพิ่มรูปภาพของคุณได้อีกครั้งซึ่งอาจช่วยอธิบายปัญหาของคุณได้
Mapperz

1
iant: ชี้แจงอย่างชัดเจน 'ถูกต้อง' Mapperz: เพิ่มอีกครั้ง? มันไม่ปรากฏขึ้นมา? ฉันสามารถเห็นมันได้ดี
ริส

1
พิกัดอยู่ใน lon / lat และใช้เพื่อสืบค้นฐานข้อมูลเพื่อดึงข้อมูลทางภูมิศาสตร์ พูดอย่างเคร่งครัดคุณสามารถแปลงนี้เป็นปัญหาทางคณิตศาสตร์บริสุทธิ์ (ว่าที่สามารถพูดเกี่ยวกับหลายสิ่งหลายอย่างใน GIS)
Pris

คำตอบ:


5

หวังว่าฉันจะเข้าใจคำถามได้อย่างถูกต้อง ...

เราสามารถแก้ปัญหาสำหรับลองจิจูดและละติจูดแยกกันได้ดังนั้นฉันจะนำตัวอย่างของคุณกับลองจิจูด: -76, -135 และ 164

ก่อนอื่นฉันจะสั่งพวกเขา:

-135, -76, 164

จากนั้นฉันจะเพิ่มพิกัดทางซ้ายสุดไปทางขวาอีกครั้ง: -135 + 360 = 225

-135, -76, 164, 225

ตอนนี้เราสามารถคำนวณช่องว่างระหว่างพิกัด:

-135 (59) -76 (240) 164 (61) 225
             .......

ช่องว่างที่ใหญ่ที่สุด (240) จะต้องเป็นขอบเขตของกล่องขอบเขตขั้นต่ำส่วนที่ไม่ได้อยู่ในกล่อง เส้นประเป็นส่วนที่ใหญ่ที่สุดของวงกลมที่เราสามารถแบ่งออกได้ ในตัวอย่างของเราหมายความว่ากล่องขอบเขตเริ่มต้นด้วย 164 รวมถึง -135 และลงท้ายด้วย -76


สิ่งนี้ใช้ได้กับกรณีส่วนใหญ่ที่ฉันคิด แต่ลองพิจารณาตัวอย่างของฉันด้วยลองจิจูดเพิ่มเติม (+60) [เป็นจุดสี่ในโพลี] ในกรณีนี้ฉันต้องการ -180 ถึง 180 โดยใช้วิธีของคุณฉันจะได้รับ 61 ถึง 180 และ -76 ถึง -180
ราคา

@Pris - ดังนั้นคุณต้องการลองจิจูด 180 / -180 (เป็นจุดเดียวกันหลังจากทั้งหมด) เพื่อเป็นส่วนหนึ่งของกล่องในทุกกรณีแม้ว่าจะไม่ใช่กล่องที่เล็กที่สุด
martinstoeckli

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

@Pris - โอ้นี่ดูยุ่งยากจริงๆ มันก็เหมือนทุกจุดของขอบระหว่างสองจุดนับเป็นจุดยอด
martinstoeckli

1

นี่เป็นเรื่องง่ายที่จะทำใน Javascript ด้วย Google Maps API นี่คือวิธีที่คุณจะใช้ฝั่งไคลเอ็นต์กับ API นั้น:

var bounds = new google.maps.LatLngBounds();

//Recursively loop through your coordinate list
    latLng = new google.maps.LatLng(<YourLat>, <YourLon>);
    bounds.extend(latLng);
//

extentBox = new google.maps.Rectangle({
    bounds: bounds,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});
extentBox.setMap(map);

สวัสดีขอบคุณสำหรับคำตอบ แต่ฉันกำลังมองหาวิธีการจริงแทนที่จะเรียก API หรือใช้วิธีแก้ปัญหาก่อนหน้านี้
ราคา

คุณให้วิธีขอบเขตกับฉันฉันกำลังมองหาวิธีแก้ปัญหาที่แน่นอนนี้ขอบคุณมาก!
Thomson Comer

สิ่งนี้ใช้กับรูปหลายเหลี่ยมได้หรือไม่ ฉันเห็นคุณใช้สี่เหลี่ยมผืนผ้า
Danny G

1

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

เนื่องจากฉันเกี่ยวข้องกับการรับช่วง lon / lat สำหรับรูปหลายเหลี่ยมแทนที่จะเป็นเพียงจุดที่ประกอบไปด้วยวิธีหนึ่งในการพยายามแก้ไขปัญหาคือ 'เดิน' ตามจริงตามชุดพิกัดที่สั่งตั้งแต่ต้นจนจบ คุณติดตามว่าคุณเดินทางตามเข็มนาฬิกาและทวนเข็มนาฬิกาสัมพัทธ์กับศูนย์กลางของโลกไกลแค่ไหนให้เป็นจุดเริ่มต้นและเดินต่อไปจนกว่าคุณจะสร้างรูปหลายเหลี่ยมดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถรับช่วงของ CW และ CCW ที่คุณเดินทางจากจุดเริ่มต้นได้ไกลแค่ไหน ... นี่จะให้ข้อมูลที่เพียงพอสำหรับคุณในการรับขอบเขตที่ถูกต้องในกรณีปกติ (เหลืออยู่ในภาพ) ในกรณีที่รูปหลายเหลี่ยมเคลื่อนที่ไปรอบ ๆ หรือตัดไปกึ่งกลางมุมการเดินทางที่คืนมาจะเป็น 360 องศา

วิธีนี้ยังใช้งานได้เมื่อคุณมีรูปหลายเหลี่ยม 'กอด' พื้นผิวของโลกแทนที่จะตัดข้ามมัน ดังนั้นถ้าคุณมีรูปหลายเหลี่ยมแสดงคนที่เดินทางไปตามพื้นผิวโลกจากโตรอนโต (lon: -79) ถึงลอนดอน (lon: -5) ถึงโตเกียว (lon: 139) และกลับ (ในลำดับเดียวกัน) คุณจะ รับช่วง [-79 ถึง 139]

หากรูปหลายเหลี่ยมตัดไปที่กึ่งกลาง (ลองนึกภาพจุดสองจุดที่อยู่ติดกันที่ +90 และ -90) ฉันคิดว่านี่เป็นการกวาดแบบเต็ม (360 องศา) แม้ว่าคุณจะไปทางใดทางหนึ่ง

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