Diberikan satu set titik lintang dan bujur, bagaimana saya bisa menghitung garis lintang dan bujur dari titik pusat set itu (alias titik yang akan memusatkan tampilan pada semua titik)?
EDIT: Solusi Python yang saya gunakan:
Convert lat/lon (must be in radians) to Cartesian coordinates for each location.
X = cos(lat) * cos(lon)
Y = cos(lat) * sin(lon)
Z = sin(lat)
Compute average x, y and z coordinates.
x = (x1 + x2 + ... + xn) / n
y = (y1 + y2 + ... + yn) / n
z = (z1 + z2 + ... + zn) / n
Convert average x, y, z coordinate to latitude and longitude.
Lon = atan2(y, x)
Hyp = sqrt(x * x + y * y)
Lat = atan2(z, hyp)
math
latitude-longitude
geo
Zeke
sumber
sumber
z
, pls?Jawaban:
Pendekatan sederhana hanya rata-rata mereka memiliki kasus tepi aneh dengan sudut ketika mereka membungkus dari 359 'kembali ke 0'.
Sebuah pertanyaan yang jauh lebih awal pada SO bertanya tentang menemukan rata-rata satu set sudut kompas
Perluasan pendekatan yang direkomendasikan di sana untuk koordinat bola adalah:
sumber
Terima kasih! Berikut adalah versi C # dari solusi OP menggunakan derajat. Ini menggunakan kelas System.Device.Location.GeoCoordinate
sumber
Saya menemukan posting ini sangat berguna jadi inilah solusinya dalam PHP. Saya telah menggunakan ini dengan sukses dan hanya ingin menghemat waktu lain.
sumber
Posting yang sangat berguna! Saya sudah menerapkan ini dalam JavaScript, dengan ini kode saya. Saya telah menggunakan ini dengan sukses.
sumber
Versi Javascript dari fungsi aslinya
sumber
Untuk kepentingan menyelamatkan seseorang satu atau dua menit, berikut adalah solusi yang digunakan dalam Objective-C, bukan python. Versi ini mengambil NSArray of NSValues yang berisi MKMapCoordinates, yang dipanggil dalam implementasi saya:
sumber
<GLKit/GLKMath.h>
dan gunakanGLKMathDegreesToRadians
danGLKMathRadiansToDegrees
solusi yang sangat bagus, hanya apa yang saya butuhkan untuk proyek cepat saya, jadi inilah port cepat. terima kasih & ini juga proyek taman bermain: https://github.com/ppoh71/playgounds/tree/master/centerLocationPoint.playground
sumber
Jika Anda tertarik untuk mendapatkan 'pusat' poin yang sangat disederhanakan (misalnya, untuk hanya memusatkan peta ke pusat poligon gmaps Anda), maka inilah pendekatan dasar yang bekerja untuk saya.
Ini mengembalikan koordinat lat / lng tengah untuk pusat poligon.
sumber
Di Django ini sepele (dan benar-benar berfungsi, saya punya masalah dengan sejumlah solusi yang tidak mengembalikan negatif untuk lintang dengan benar).
Sebagai contoh, katakanlah Anda menggunakan django-geopostcodes (saya penulisnya).
point
adalahPoint
contoh Django yang kemudian dapat digunakan untuk melakukan hal-hal seperti mengambil semua objek yang berada dalam jarak 10 km dari titik pusat itu;Mengubah ini menjadi Python mentah itu sepele;
Di bawah tenda Django menggunakan GEOS - detail lebih lanjut di https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geos/
sumber
Versi Java jika ada yang membutuhkannya. Konstanta didefinisikan statis untuk tidak menghitungnya dua kali.
sumber
Berikut ini adalah versi Android berdasarkan jawaban C # @ Yodacheese menggunakan Google Maps api:
di app build.gradle tambahkan:
sumber
Implementasi Dart untuk Flutter untuk menemukan titik Tengah untuk Multiple Latitude, Longitude.
paket impor matematika
Daftar Lintang dan Bujur
sumber
Ini sama dengan masalah rata-rata tertimbang di mana semua bobotnya sama, dan ada dua dimensi.
Temukan rata-rata semua garis lintang untuk garis lintang pusat dan rata-rata semua garis bujur untuk garis bujur pusat.
Caveat Emptor: Ini adalah perkiraan jarak dekat dan kesalahan akan menjadi sulit ketika penyimpangan dari rata-rata lebih dari beberapa mil karena kelengkungan Bumi. Ingatlah bahwa garis lintang dan bujur adalah derajat (bukan benar-benar kotak).
sumber
Jika Anda ingin mempertimbangkan ellipsoid yang digunakan, Anda dapat menemukan formula di sini http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf
lihat Lampiran B
Dokumen itu berisi banyak hal berguna lainnya
B
sumber
Keluar dari objek dalam PHP. Diberikan array pasangan koordinat, pusat pengembalian.
Diambil ide dari # 4
sumber
Berikut adalah Versi python untuk menemukan titik pusat. Lat1 dan lon1 adalah daftar lintang dan bujur. itu akan mengembalikan garis lintang dan bujur dari titik pusat.
sumber
Dart / Flutter Menghitung titik pusat dari beberapa koordinat koordinat lintang / bujur
sumber
Jika Anda ingin semua titik terlihat dalam gambar, Anda ingin ekstrema dalam lintang dan bujur dan pastikan bahwa tampilan Anda menyertakan nilai-nilai itu dengan batas apa pun yang Anda inginkan.
(Dari jawaban Alnitak, bagaimana Anda menghitung ekstrem mungkin sedikit bermasalah, tetapi jika mereka beberapa derajat di kedua sisi garis bujur yang membungkus, maka Anda akan memanggil tembakan dan mengambil kisaran yang tepat.)
Jika Anda tidak ingin mendistorsi peta apa pun yang ada pada titik-titik ini, maka sesuaikan rasio aspek kotak pembatas sehingga cocok dengan piksel apa pun yang telah Anda alokasikan untuk tampilan tetapi masih menyertakan ekstrema.
Untuk menjaga agar titik-titik tetap di tengah pada beberapa tingkat pembesaran sewenang-wenang, hitung pusat dari kotak pembatas yang "pas" dengan titik-titik di atas, dan pertahankan titik itu sebagai titik tengah.
sumber
Saya melakukan tugas ini dalam javascript seperti di bawah ini
sumber
Sebagai penghargaan untuk utas ini, berikut adalah kontribusi kecil saya dengan implementasi di Ruby, berharap bahwa saya akan menyelamatkan seseorang beberapa menit dari waktu berharga mereka:
sumber
Saya menggunakan formula yang saya dapatkan dari www.geomidpoint.com dan menulis implementasi C ++ berikut. Itu
array
dangeocoords
adalah kelas saya sendiri yang fungsinya harus jelas.sumber