Silakan lihat contoh dan gambar yang sesuai.
Saya ingin mencapai berikut: menyediakan dua lokasi (lat / lng), yang ditunjukkan di bawah ini sebagai A dan B . Dari ini, garis virtual akan ditarik dan kemudian jarak antara garis ini dan C akan dihitung (dalam pengukuran apa pun).
Saya telah mencapai ini saat ini di Google Maps API v3 tetapi ingin juga dapat melakukan ini di belakang layar dalam bahasa pilihan saya. Setiap tips / ide akan sangat dihargai!
geolocation
mathematics
Tawanan
sumber
sumber
Jawaban:
Panjang terpendek adalah jarak yang Anda butuhkan, kecuali saya salah?
sumber
None
ketika ada solusi yang sah. Masalahnya adalah bahwa kondisi bersyarat mengasumsikan X1 <X2 dan Y1 <Y2, yang tidak selalu dapat dipastikan. Tes yang lebih baik antara keduanya diperlukan.Mungkin saya membuatnya terlalu rumit, tetapi yang Anda inginkan adalah jarak dari titik ke titik. Itu adalah jarak dari titik di sepanjang AB yang menghubungkan AB dengan C dengan garis ortogonal ke AB. Vektor ini tegak lurus terhadap AB diberikan oleh
(Saya telah menggunakan tanda kurung siku untuk mendefinisikan vektor, atau array dua elemen). Jarak antara C [xp, yp] dan titik A adalah
Jarak antara garis dan C hanyalah proyeksi u ke v. Jika kita menganggap mod (v) = 1 (normalisasikan saja), maka
Satu-satunya komplikasi adalah Anda mungkin ingin memastikan koordinat Anda bukan pasangan lat / log WGS84, tetapi diproyeksikan (atau gunakan koordinat geodetik). Anda dapat menggunakan OGR atau Proj4 untuk ini.
sumber
Menjadi sedikit benci dengan semua matematika ini juga, saya akan datang dari sudut yang berbeda. Saya akan membuatnya menjadi garis 'aktual', daripada garis virtual, dan kemudian menggunakan alat yang ada.
Jika A dan B berbagi atribut, Anda dapat menghubungkannya dengan menggambar garis (Kosmo GIS memiliki alat yang akan membuat garis dari titik, dan saya percaya ada juga plugin QGIS untuk ini). Setelah Anda memiliki garis, fungsi 'dekat' pada lapisan titik 'C' akan memberi Anda jarak ke garis. Biarkan perangkat lunak menangani matematika untuk Anda!
sumber
Jika Anda menggunakan java di android, itu hanya satu baris dengan fungsi perpustakaan
distanceToLine:
Menghitung jarak pada bola antara titik p dan segmen garis mulai dari akhir.
Parameter: p - titik yang akan diukur
mulai - awal segmen garis
end - akhir dari segmen garis
Pengembalian: jarak dalam meter (dengan asumsi bumi bulat)
Cukup tambahkan perpustakaan ke
sumber