Saya telah merenung (dan melakukan pengkodean prototipe) untuk basis kode geografis 'bebas proyeksi' dengan titik dasar, garis & poligon primitif Anda.
Alih-alih berurusan dengan semua pengorbanan yang datang bersama dengan memproyeksikan ke pesawat, saya menulis algoritma yang bekerja langsung pada permukaan ellipsoid.
Salah satu komplikasi potensial adalah bahwa ada berbagai jenis "jalur" di luar sana:
- (busur) lingkaran besar: jarak terpendek di sepanjang permukaan (konstan-nol-ketinggian) antara dua titik; harus sesuai persis dengan jalur pandang.
- rhumb lines: sambungkan kedua titik dengan lintasan arah konstan - misalnya, beberapa batas negara mengikuti garis lintang (yang bukan lingkaran besar).
- kurva: busur melingkar (jalur jarak konstan dari titik pusat yang diberikan); Bezier (tidak yakin tentang interpretasi ulang yang benar dalam konteks permukaan melengkung), dll.
Dari berbagai jenis jalur (termasuk jalur yang saya lewatkan), manakah yang cukup penting sehingga memiliki representasi 'tepat', vs mewakili dalam batas kesalahan dengan segmen pendek dari jalur yang lebih sederhana (mis. Segmen busur geodesik pendek)?
Suntingan klarifikasi: dengan 'tepat' di atas, maksud saya parametrik. Dengan kata lain: dapat dihitung dengan akurasi yang diinginkan, tanpa langkah densifikasi saat impor.
Sunting , jauh kemudian, untuk menambahkan kutipan yang saya temui yang sangat dekat dengan pemikiran saya sendiri tentang penggunaan vektor satuan 3D sebagai primitif geografis: Representasi Posisi Horizontal Non-singular ( alt link ). Bagian terbaik? Saya tidak harus menulis semuanya sendiri!
Jawaban:
Pertanyaannya menyangkut jenis kurva apa yang layak mendapatkan representasi yang tersirat secara implisit daripada perkiraan yang didiskritisasi. Inti masalahnya adalah ini: untuk menjadi sukses, kelas kurva yang Anda dukung dengan cara ini harus ditutup di bawah kelas operasi pembuatan kurva dan poligon yang didukung dalam GIS.
Operasi-operasi ini meliputi:
Buffering. Dalam proses ini, Anda perlu membuat kurva yang sejajar dengan fitur. ("Paralel" berarti dalam arti menjaga jarak tetap.) Ini termasuk lingkaran dan bagian-bagiannya (untuk titik-titik penyangga), paralel paralel (yang merupakan kurva yang berjarak sama dengan geodesik pada spheroid, dan dapat direduksi menjadi titik-titik terisolasi dalam kasus khusus) , dan lingkaran konsentris. Pada bola (tetapi tidak, pada umumnya, pada ellipsoid) paralelnya adalah lingkaran itu sendiri.
Poligon pengaruh (Poli Thiessen; Poligon Voronoi; Sel Dirichlet). Untuk membangun poligon Thiessen untuk kumpulan fitur titik, kita perlu menemukan garis pembagi dua, yang geodesik (lurus); tetapi untuk koleksi jenis fitur lainnya, seperti titik dan segmen, batas poligon Thiessen mencakup bagian parabola (di dalam pesawat). Mungkin Anda tidak ingin mendukung ini ...
Set-teoritik overlay (persimpangan, penyatuan, perbedaan, komplemen). Operasi ini tidak membuat jenis kurva baru.
Terjemahan dan rotasi paralel . Ini biasanya tidak mungkin dilakukan tepat pada ellipsoid (karena itu bukan ruang yang homogen ), tetapi langsung pada bola. Di bidang, operasi ini tidak menciptakan jenis kurva baru.
Kelas kurva yang benar-benar bermasalah yang Anda usulkan terdiri dari garis rhumb umum (loxodromes). Garis lintang adalah garis rhumb tetapi (setidaknya pada sphere) mereka juga lingkaran, sehingga tidak ada masalah tambahan. Tapi garis rhumb umum adalah binatang yang rumit: jika mereka bukan meridian atau paralel, mereka berputar ke satu kutub atau yang lainnya. Buffer dan terjemahan paralel dari baris rhumb akan menjadi tipe kurva yang benar-benar baru. Anda harus menyatakan hasil ini sebagai segmen garis dan lingkaran yang terputus, yang akan mengalahkan tujuan Anda (dan cukup sulit untuk dihitung). Karena itu saya sarankan untuk tidak mencoba mendukung garis rhumb dengan tepat.
Singkatnya, sepertinya Anda bisa berhasil dalam program Anda jika (a) Anda bekerja pada model bola bumi daripada model ellipsoidal ("spheroidal") yang lebih umum dan (b) Anda membatasi konstruksi tertentu seperti poligon Thiessen (dan sumbu medial, yang terkait erat) dengan pengumpulan poin.
sumber
Dan,
Anda mungkin tertarik pada beberapa pekerjaan yang telah saya lakukan di geodesics. Ini dijelaskan dalam pracetak ini . Secara khusus, perhatikan:
Masalah geodesik langsung dan terbalik dapat diselesaikan dengan presisi alat berat. Ini berarti sekitar 15 nm untuk presisi ganda. Saya bisa beralih ke ganda panjang, menambahkan istilah tambahan dalam seri, dan mendapatkan akurasi pukul 6 sore. Perhatikan khususnya, bahwa solusi untuk masalah terbalik selalu konvergen (tidak seperti metode Vincenty). Kecepatannya sebanding dengan metode Vincenty (solusi langsung agak lebih cepat, solusi terbalik agak lambat).
Saya menghitung pengurangan panjang dan skala geodesi. Kuantitas ini memberikan sifat diferensial geodesik, dan memungkinkan berbagai masalah geodesik (persimpangan, garis tengah, dll.) Dipecahkan dengan cepat dan akurat menggunakan metode Newton. Lengkungan batas wilayah penyangga dapat dinyatakan dalam jumlah ini. Lihat catatan ini yang saya kirim ke milis proj.4.
Saya mendefinisikan proyeksi gnonik ellipsoidal di mana geodesik sangat lurus. Hal ini memungkinkan masalah pada permukaan ellipsoid untuk dipetakan ke masalah dalam geometri bidang. Misalnya, persimpangan dua geodesik dapat ditemukan dengan tepat dengan memperkirakan titik persimpangan, melakukan proyeksi gnomonik tentang titik itu, memperkirakan ulang persimpangan dan iterasi.
Saya memberikan ekspresi untuk area poligon geodesik. Tidak perlu lagi membagi panjang untuk mendapatkan hasil yang akurat.
GeographicLib (on sourceforge) mengimplementasikan algoritma.
Akhirnya, saya berkomentar bahwa untuk banyak tujuan, geodesik lebih disukai daripada jenis kurva lainnya (khususnya elips besar atau garis rhumb) karena mereka mematuhi ketimpangan segitiga. Ini memiliki beberapa konsekuensi:
sumber
Ini adalah jawaban untuk pertanyaan @ Dan tentang penggunaan bola bantu untuk menyelesaikan masalah persimpangan.
Tidak, bola bantu tidak memungkinkan Anda menyelesaikan persimpangan secara langsung. Masalahnya adalah bahwa pemetaan dari ellipsoid ke bola tergantung pada geodesik (misalnya, azimuth di ekuator). Dengan demikian bola bantu baik untuk memecahkan geodesik tunggal tetapi tidak untuk memecahkan masalah yang melibatkan lebih dari satu geodesi.
Cara saya yang disarankan untuk melakukan persimpangan geodesik dan intersepsi (jalur terpendek antara titik dan geodesik) adalah dengan menggunakan proyeksi gnomonik. Geodesics pada peta sphere menjadi garis lurus dalam proyeksi gnomonic dan, asalkan masalah Anda terbatas pada belahan bumi, proyeksi gnomonic mengubah masalah ini menjadi 2d.
Tidak ada proyeksi yang menjaga kelurusan geodesik untuk ellipsoid (karena kelengkungannya tidak konstan). Namun, GeographicLib menyediakan generalisasi dari proyeksi gnomonik di mana geodesik sangat lurus. Ini mengarah ke algoritma konvergensi cepat untuk interseksi dan intersepsi geodesi (sekali lagi asalkan semua titik baik-baik saja di dalam belahan bumi). Lihat jawaban saya (dengan kode!) Ke gpesquero di
https://sourceforge.net/projects/geographiclib/forums/forum/1026621/topic/4085561
Akhirnya, saya ingin menunjukkan bahwa saya baru saja mengubah rutin geodesik GeographicLib ke Javascript, sehingga Anda dapat bermain-main dengan mereka di Google Maps. Lihat
http://geographiclib.sourceforge.net/scripts/geod-google.html
http://geographiclib.sourceforge.net/scripts/geod-calc.html
(Saya belum mengonversi proyeksi gnomonic ke Javascript. Itu akan cukup mudah. Saya juga akan mengonversi proyeksi azimuth equidistant pada saat yang sama, karena itu cara yang mudah untuk menyelesaikan kelas masalah geodesi lain yang melibatkan "garis median" .)
ADDENDUM (2014-08-19)
Dimungkinkan juga untuk menyelesaikan saat pendekatan terdekat untuk dua kapal yang bepergian dengan kecepatan konstan di sepanjang geodesik. Karena kita mengetahui sifat diferensial geodesik, dimungkinkan untuk menggunakan metode Newton untuk mendapatkan solusi yang akurat dalam beberapa iterasi. Kode untuk mengimplementasikan ini diposting di
https://sourceforge.net/p/geographiclib/discussion/1026620/thread/33ce09e0
sumber