Diberikan seperangkat koordinat, bagaimana saya bisa menghitung batas minimum?

13

Saya memiliki satu set koordinat di lon / lat. Selalu ada setidaknya 3 koordinat yang disusun yang membentuk poli (jika mereka diproyeksikan datar). Bagaimana saya bisa menghitung batas minimum untuk koordinat ini sebagai satu set garis bujur dan lintang yang valid? (dengan 'valid' yang saya maksud adalah rentang yang secara eksplisit menjelaskan antimeridian). Agak sulit untuk menjelaskan apa yang saya cari jadi saya punya gambar.

masukkan deskripsi gambar di sini

Kasus dalam gambar ini sepele; Anda hanya menemukan minimum absolut dan maksimum untuk semua poin. Ini tidak bekerja untuk semua kasus. Apakah ada solusi generik?

Sunting: Untuk mengklarifikasi apa yang saya maksud dengan 'valid', katakan saya memiliki tiga nilai bujur dalam kumpulan data saya: -76, -135 dan 164. Nilai melintasi antimeridian dan saya ingin rentang hasil yang akan dipisah: -76 ke -180 DAN 164 hingga 180.

Beberapa klarifikasi lagi. Poin membentuk poligon, jadi dalam kasus tertentu, rentang yang diperlukan bisa dari -180 hingga +180 (yaitu, 360 derajat penuh):

masukkan deskripsi gambar di sini

Gambar di sebelah kiri menunjukkan garis bujur empat koordinat yang terjadi pada satu 'setengah' Bumi. Bayangkan seolah-olah Anda sedang melihat ke bawah ke kutub utara (titik hitam). Warna merah muda menunjukkan rentang longitudinal minimum yang mencakup poligon (poligon ditampilkan di antara empat titik berwarna ungu). Kasing di sebelah kiri akan memiliki dua rentang memanjang: [-180 hingga -120] dan [135 hingga 180] (hanya memperkirakannya secara visual)

Gambar di sebelah kanan menunjukkan kasus lain di mana titik-titiknya berputar di sekitar Bumi. Kisaran ini adalah [-180 hingga 180].

Pris
sumber
1
Saya belum pernah mempertimbangkan masalah ini sebelumnya, ini pertanyaan yang bagus. Contoh lain di mana bumi rata akan membuat pekerjaan kita lebih mudah! Saya berharap dapat melihat beberapa solusi untuk ini.
sgrieve
Saya pikir Anda harus lebih eksplisit tentang "(dengan 'valid' yang saya maksud adalah rentang yang secara eksplisit menjelaskan antimeridian)" - Saya menduga kata minimum yang harus ada di depan batas dalam pertanyaan.
Ian Turton
dapatkah Anda menambahkan kembali gambar Anda mungkin membantu menjelaskan masalah Anda.
Mapperz
1
iant: secara eksplisit memperjelas Mapperz 'valid': tambahkan kembali? apakah itu tidak muncul? Saya bisa melihatnya dengan baik.
Pris
1
Koordinat dalam lon / lat, dan digunakan untuk query database untuk mengambil data geografis. Sebenarnya Anda dapat mengubahnya menjadi masalah matematika murni (meskipun itu dapat dikatakan tentang banyak hal dalam GIS)
Pris

Jawaban:

5

Semoga saya mengerti pertanyaan dengan benar ...

Kita dapat memecahkan masalah garis bujur dan garis lintang secara terpisah, jadi saya akan mengambil contoh Anda dengan garis bujur: -76, -135 dan 164.

Pertama saya akan memesannya:

-135, -76, 164

Maka saya akan menambahkan koordinat paling kiri ke kanan lagi: -135 + 360 = 225

-135, -76, 164, 225

Sekarang kita dapat menghitung jarak antar koordinat:

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

Kesenjangan terbesar (240) harus menjadi batas kotak batas minimum, bagian yang bukan milik kotak. Garis putus-putus adalah bagian terbesar dari lingkaran yang bisa kita keluarkan. Dalam contoh kami itu berarti, kotak batas dimulai dengan 164, termasuk -135 dan berakhir dengan -76.

martinstoeckli
sumber
Ini berfungsi untuk sebagian besar kasus saya pikir. Tetapi pertimbangkan contoh saya dengan garis bujur tambahan (+60) [sebagai titik keempat dalam poli]. Dalam hal ini saya ingin -180 hingga 180. Menggunakan metode Anda, saya akan mendapatkan 61 hingga 180 dan -76 hingga -180.
Pris
@Pris - Jadi Anda ingin garis bujur 180 / -180 (ini adalah titik yang sama), menjadi bagian dari kotak dalam setiap kasus, bahkan jika itu bukan kotak sekecil mungkin?
martinstoeckli
Saya pikir perbedaan utama di sini adalah bahwa poin membentuk poligon. Lihat hasil edit saya.
Pris
@Pris - Oh well, ini terlihat sangat rumit. Ini seperti setiap titik tepi antara dua titik juga sebagai titik simpul.
martinstoeckli
1

Ini sangat mudah dilakukan dalam Javascript dengan Google Maps API. Inilah cara Anda melakukannya dari sisi klien dengan API itu:

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);
SeanMaday
sumber
Hai, terima kasih atas jawabannya, namun saya mencari metode yang sebenarnya daripada memanggil API atau menggunakan solusi yang sudah ada sebelumnya.
Pris
Anda memberi saya metode bounds.extend, saya mencari solusi yang tepat ini, jadi terima kasih!
Thomson Comer
Apakah ini berfungsi dengan poligon? Saya melihat Anda menggunakan Rectangle.
Danny G
1

Saya pikir saya mungkin telah menemukan cara untuk melakukan ini. Implementasi awal saya berfungsi, tetapi saya tidak yakin apakah ada kasus tepi yang saya lewatkan. Jika ada yang salah dengan solusi ini, harap tunjukkan.

Mengingat bahwa saya khawatir dengan mendapatkan rentang lon / lat untuk poligon daripada hanya titik-titik yang menyusunnya, salah satu cara untuk mencoba masalahnya adalah dengan benar-benar 'berjalan' di sepanjang set koordinat yang dipesan dari awal hingga selesai. Anda melacak seberapa jauh searah jarum jam dan berlawanan arah jarum jam yang telah Anda lalui relatif terhadap pusat Bumi yang diberi titik awal dan terus berjalan sampai Anda menyelesaikan poligon:

masukkan deskripsi gambar di sini

Anda bisa mendapatkan kisaran seberapa jauh CW dan CCW Anda bepergian dari titik awal Anda ... ini memberi Anda informasi yang cukup untuk mendapatkan batas yang benar dalam kasus normal (kiri di gambar). Dalam kasus di mana poligon berjalan penuh di sekitar atau memotong di tengah, sudut perjalanan kembali akan 360 derajat.

Metode ini juga berfungsi ketika Anda memiliki poligon 'memeluk' permukaan bumi daripada memotongnya. Jadi jika Anda memiliki poligon yang menunjukkan seseorang bepergian di permukaan bumi dari Toronto (lon: -79) ke London (lon: -5) ke Tokyo (lon: 139) dan kembali (dalam urutan yang sama), Anda akan dapatkan kisaran [-79 hingga 139].

Jika poligon memotong bagian tengah (bayangkan dua titik yang berdekatan pada +90 dan -90), saya menganggap ini sebagai sapuan penuh (360 derajat) meskipun Anda dapat memilih salah satu cara.

Pris
sumber