Saya memiliki beberapa titik koordinat pusat bumi yang diberikan sebagai garis lintang dan garis bujur ( WGS-84 ).
Bagaimana cara mengubahnya menjadi koordinat Kartesius (x, y, z) dengan titik asal di pusat bumi?
mapping
geometry
geospatial
daphshez
sumber
sumber
Jawaban:
Saya baru-baru ini melakukan sesuatu yang mirip dengan ini menggunakan "Haversine Formula" pada data WGS-84, yang merupakan turunan dari "Law of Haversines" dengan hasil yang sangat memuaskan.
Ya, WGS-84 mengasumsikan Bumi adalah elipsoid, tetapi saya yakin Anda hanya mendapatkan kesalahan rata-rata 0,5% menggunakan pendekatan seperti "Formula Haversine", yang mungkin merupakan jumlah kesalahan yang dapat diterima dalam kasus Anda. Anda akan selalu mendapatkan sejumlah kesalahan kecuali jika Anda berbicara tentang jarak beberapa kaki dan bahkan kemudian ada kelengkungan secara teoritis dari Bumi ... Jika Anda memerlukan pendekatan yang lebih kompatibel dengan WGS-84, periksa "Formula Vincenty".
Saya mengerti dari mana starblue berasal, tetapi rekayasa perangkat lunak yang baik sering kali tentang kompromi, jadi semuanya tergantung pada keakuratan yang Anda perlukan untuk apa yang Anda lakukan. Misalnya, hasil yang dihitung dari "Rumus Jarak Manhattan" versus hasil dari "Rumus Jarak" bisa lebih baik untuk situasi tertentu karena secara komputasi lebih murah. Pikirkan "titik mana yang paling dekat?" skenario di mana Anda tidak memerlukan pengukuran jarak yang tepat.
Mengenai, "Formula Haversine" mudah diterapkan dan bagus karena menggunakan "Trigonometri Bulat" bukan pendekatan berbasis "Hukum Kosinus" yang didasarkan pada trigonometri dua dimensi, oleh karena itu Anda mendapatkan keseimbangan akurasi yang bagus lebih dari kompleksitas.
Seorang pria bernama Chris Veness memiliki situs web yang bagus di http://www.movable-type.co.uk/scripts/latlong.html yang menjelaskan beberapa konsep yang Anda minati dan mendemonstrasikan berbagai implementasi programatik; ini harus menjawab pertanyaan konversi x / y Anda juga.
sumber
Inilah jawaban yang saya temukan:
Hanya untuk membuat definisi lengkap, dalam sistem koordinat Kartesius:
Konversinya adalah:
Dimana R adalah radius perkiraan bumi (misalnya 6371 km).
Jika fungsi trigonometri Anda mengharapkan radian (yang mungkin bisa terjadi), Anda perlu mengonversi bujur dan lintang ke radian terlebih dahulu. Anda jelas membutuhkan representasi desimal, bukan derajat \ menit \ detik (lihat misalnya di sini tentang konversi).
Rumus konversi balik:
asin tentu saja arc sinus. baca tentang atan2 di wikipedia . Jangan lupa untuk mengubah kembali dari radian ke derajat.
Halaman ini memberikan kode c # untuk ini (perhatikan bahwa ini sangat berbeda dari rumus), dan juga beberapa penjelasan dan diagram yang bagus mengapa ini benar,
sumber
Teori untuk mengonversi
GPS(WGS84)
ke koordinat Cartesian https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinatesBerikut ini yang saya gunakan:
Saya melampirkan kode VB yang saya tulis:
Harap perhatikan bahwa
h
adalah ketinggian di atasWGS 84 ellipsoid
.Biasanya
GPS
akan memberi kita ketinggian diH
atasMSL
. TheMSL
tinggi harus dikonversi ke ketinggianh
di atasWGS 84 ellipsoid
dengan menggunakan geopotential ModelEGM96
( Lemoine et al, 1998 ).Ini dilakukan dengan menginterpolasi grid file ketinggian geoid dengan resolusi spasial 15 arc-menit.
Atau jika Anda memiliki beberapa level profesional
GPS
memiliki KetinggianH
( msl, tinggi di atas permukaan laut rata-rata ) danUNDULATION
, hubungan antarageoid
danellipsoid (m)
dari keluaran datum yang dipilih dari tabel internal. Anda bisa mendapatkanh = H(msl) + undulation
Ke XYZ dengan koordinat Cartesian:
sumber
Perangkat lunak proj.4 menyediakan program baris perintah yang dapat melakukan konversi, misalnya
Ini juga menyediakan C API . Secara khusus, fungsi tersebut
pj_geodetic_to_geocentric
akan melakukan konversi tanpa harus menyiapkan objek proyeksi terlebih dahulu.sumber
Di python3.x itu bisa dilakukan dengan menggunakan:
sumber
Jika Anda ingin mendapatkan koordinat berdasarkan elipsoid daripada bola, lihat http://en.wikipedia.org/wiki/Geodetic_system#From_geodetic_to_ECEF - ini memberikan rumus serta konstanta WGS84 yang Anda butuhkan untuk konversi .
Rumusnya juga memperhitungkan ketinggian relatif terhadap permukaan elipsoid referensi (berguna jika Anda mendapatkan data ketinggian dari perangkat GPS).
sumber
Mengapa menerapkan sesuatu yang telah diterapkan dan diuji-terbukti?
C #, misalnya, memiliki NetTopologySuite yang merupakan port .NET dari JTS Topology Suite.
Secara khusus, Anda memiliki kesalahan yang parah dalam perhitungan Anda. Bumi bukanlah bola yang sempurna, dan perkiraan jari-jari bumi mungkin tidak tepat untuk pengukuran yang tepat.
Jika dalam beberapa kasus dapat diterima untuk menggunakan fungsi homebrew, GIS adalah contoh yang baik dari bidang yang lebih disukai untuk menggunakan pustaka yang andal dan terbukti uji.
sumber
sumber
java.lang.IllegalArgumentException: dimension must be <= 3
Anda dapat melakukannya dengan cara ini di Java.
sumber