Jika saya memiliki pembacaan garis lintang atau bujur dalam format NMEA standar, apakah ada cara / rumus mudah untuk mengonversi hasil pembacaan tersebut menjadi meter, yang kemudian dapat saya terapkan di Java (J9)?
Sunting: Ok sepertinya apa yang ingin saya lakukan tidak mungkin dengan mudah , namun yang sebenarnya ingin saya lakukan adalah:
Katakanlah saya memiliki garis lintang dan bujur titik dan lintang dan bujur pengguna apakah ada cara mudah untuk membandingkannya untuk memutuskan kapan harus memberi tahu pengguna bahwa mereka berada dalam jarak yang cukup dekat dari titik jalan? Saya menyadari masuk akal adalah subjek tetapi apakah ini mudah dilakukan atau masih terlalu matematika-y?
math
geolocation
geo
Adam Taylor
sumber
sumber
Jawaban:
Berikut adalah fungsi javascript:
Penjelasan: https://en.wikipedia.org/wiki/Haversine_formula
sumber
Mengingat Anda sedang mencari rumus sederhana, ini mungkin cara paling sederhana untuk melakukannya, dengan asumsi bahwa Bumi adalah bola dengan keliling 40075 km.
Panjang 1 ° lintang = selalu 111,32 km dalam meter
Panjang dalam meter 1 ° garis bujur = 40075 km * cos (garis lintang) / 360
sumber
Untuk memperkirakan jarak pendek antara dua koordinat, saya menggunakan rumus dari http://en.wikipedia.org/wiki/Lat-lon :
.
Dalam kode di bawah ini saya meninggalkan angka mentah untuk menunjukkan hubungannya dengan rumus dari wikipedia.
Entri wikipedia menyatakan bahwa jarak calcs berada dalam 0,6m untuk 100km longitudinal dan 1cm untuk 100km latitudinally tetapi saya belum memverifikasi ini karena mendekati akurasi itu baik-baik saja untuk penggunaan saya.
sumber
Garis lintang dan garis bujur menentukan titik, bukan jarak, jadi pertanyaan Anda agak tidak masuk akal. Jika Anda bertanya tentang jarak terpendek antara dua titik (lintang, bujur), lihat artikel Wikipedia tentang jarak lingkaran besar.
sumber
Ada banyak alat yang akan memudahkan hal ini. Lihat jawaban monjardin untuk detail lebih lanjut tentang apa yang terlibat.
Namun, melakukan ini tidak selalu sulit. Sepertinya Anda menggunakan Java, jadi saya akan merekomendasikan untuk mencari sesuatu seperti GDAL . Ini menyediakan pembungkus java untuk rutinitas mereka, dan mereka memiliki semua alat yang diperlukan untuk mengkonversi dari Lat / Lon (koordinat geografis) ke UTM (sistem koordinat yang diproyeksikan) atau beberapa proyeksi peta yang masuk akal lainnya.
UTM itu bagus, karena meternya, sangat mudah digunakan. Namun, Anda perlu mendapatkan zona UTM yang sesuai agar berfungsi dengan baik. Ada beberapa kode sederhana yang tersedia melalui googling untuk menemukan zona yang sesuai untuk pasangan lintang / bujur.
sumber
Bumi adalah permukaan yang sangat tidak beraturan, jadi tidak ada rumus sederhana untuk melakukan ini dengan tepat. Anda harus hidup dengan model perkiraan bumi, dan memproyeksikan koordinat Anda ke sana. Model yang biasanya saya lihat digunakan untuk ini adalah WGS 84 . Inilah yang biasanya digunakan perangkat GPS untuk memecahkan masalah yang sama persis.
NOAA memiliki beberapa perangkat lunak yang dapat Anda unduh untuk membantu hal ini di situs web mereka .
sumber
Berikut adalah versi R dari fungsi bh- , untuk berjaga-jaga:
sumber
Satu mil laut (1852 meter) didefinisikan sebagai satu menit busur bujur di ekuator. Namun, Anda perlu menentukan proyeksi peta (lihat juga UTM ) di mana Anda bekerja agar konversi benar-benar masuk akal.
sumber
Ada beberapa cara untuk menghitungnya. Semuanya menggunakan aproksimasi trigonometri bola di mana jari-jarinya adalah salah satu bumi.
coba http://www.movable-type.co.uk/scripts/latlong.html untuk mengetahui sedikit metode dan kode dalam berbagai bahasa.
sumber
sumber
Untuk mengonversi lintang dan bujur dalam representasi x dan y Anda perlu memutuskan jenis proyeksi peta yang akan digunakan. Bagi saya, Elliptical Mercator tampaknya sangat baik. Di sini Anda dapat menemukan implementasi (di Java juga).
sumber
Jika jaraknya cukup dekat, Anda bisa menganggapnya sebagai koordinat pada bidang datar. Ini berfungsi, katakanlah, jalan atau tingkat kota jika akurasi sempurna tidak diperlukan dan yang Anda butuhkan hanyalah tebakan kasar tentang jarak yang terlibat untuk membandingkan dengan batas sewenang-wenang.
sumber
Berdasarkan jarak rata-rata derajat di Bumi.
1 ° = 111km;
Mengkonversi ini untuk radian dan membagi untuk meter, ambil angka ajaib untuk RAD, dalam meter: 0,000008998719243599958;
kemudian:
sumber
Jika Anda menginginkan solusi sederhana, gunakan rumus Haversine seperti yang dijelaskan oleh komentar lain. Jika Anda memiliki aplikasi yang peka terhadap akurasi, ingatlah rumus Haversine tidak menjamin akurasi lebih baik dari 0,5% karena mengasumsikan bumi berbentuk bola. Untuk menganggap bahwa Bumi adalah bola oblate spheroid, pertimbangkan untuk menggunakan rumus Vincenty . Selain itu, saya tidak yakin radius apa yang harus kita gunakan dengan rumus Haversine: {Equator: 6.378.137 km, Polar: 6.356.752 km, Volumetric: 6.371.0088 km}.
sumber
it is assuming the earth is a circle
^^ Beberapa orang aneh melakukan ini saat ini ... tetapi yang Anda maksud mungkin lebihit is assuming the earth is a sphere
;)Anda perlu mengubah koordinat menjadi radian untuk melakukan geometri bola. Setelah dikonversikan, barulah Anda bisa menghitung jarak antara dua titik tersebut. Jarak kemudian dapat dikonversi ke ukuran apa pun yang Anda inginkan.
sumber