Lebih
Menghitung jarak antara dua titik (Lintang, Bujur)
Saya mencoba untuk menghitung jarak antara dua posisi pada peta. Saya telah disimpan di data saya: Bujur, Lintang, X POS, Y POS.
Saya sebelumnya telah menggunakan berikut cuplikan.
DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
3956 * 2 * ASIN(
SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2)
+ COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)
* POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) ))
AS distance
--INTO #includeDistances
FROM #orig dest
Saya don't namun kepercayaan data yang keluar dari ini, tampaknya akan memberikan sedikit hasil yang tidak akurat.
Beberapa contoh data dalam kasus anda membutuhkannya
Latitude Longitude Distance
53.429108 -2.500953 85.2981833133896
Bisa ada yang membantu saya keluar dengan kode saya, saya don't pikiran jika anda ingin memperbaiki apa yang sudah saya miliki jika anda memiliki cara baru untuk mencapai ini yang akan menjadi besar.
Sebutkan apa yang unit pengukuran hasil anda di.
82
6
Karena anda're menggunakan SQL Server 2008, anda memiliki
geografi
jenis data yang tersedia, yang dirancang untuk persis seperti ini data:Memberikan
Memberitahu kami itu adalah tentang 538 km dari (dekat) London (dekat) Edinburgh.
Tentu akan ada jumlah belajar untuk melakukan yang pertama, tetapi sekali anda tahu itu's jauh lebih mudah daripada melaksanakan sendiri Haversine perhitungan; plus anda mendapatkan BANYAK fungsi.
Jika anda ingin mempertahankan yang sudah ada struktur data, anda masih dapat menggunakan
STDistance
, dengan membangun cocokgeografi
contoh menggunakanTitik
metode:Fungsi di bawah ini memberikan jarak antara dua geocoordinates di m
Fungsi di bawah ini memberikan jarak antara dua geocoordinates di kilometer
Fungsi di bawah ini memberikan jarak antara dua geocoordinates di kilometer menggunakan Geografi tipe data yang diperkenalkan pada sql server 2008
Penggunaan:
Referensi: Ref1,Ref2
Sepertinya Microsoft menginvasi otak dari semua responden lain dan membuat mereka menulis sebagai solusi yang rumit mungkin. Berikut adalah cara paling sederhana tanpa ada tambahan fungsi-fungsi/menyatakan pernyataan:
PILIH: geografi:Titik(LATITUDE_1, LONGITUDE_1, 4326).STDistance(geografi::Titik(LATITUDE_2, LONGITUDE_2, 4326))
Cukup mengganti data anda bukan
LATITUDE_1
,LONGITUDE_1
,LATITUDE_2
,LONGITUDE_2
misalnya:Seperti yang anda're menggunakan SQL 2008 atau yang lebih baru, aku'd sarankan memeriksa GEOGRAFI tipe data. SQL memiliki built-in dukungan untuk geospasial pertanyaan.
misalnya anda'd memiliki kolom dalam tabel jenis GEOGRAFI yang akan diisi dengan geospasial representasi koordinat (check out MSDN referensi terkait di atas untuk contoh). Datatype ini kemudian memaparkan metode yang memungkinkan anda untuk melakukan seluruh host geospasial pertanyaan (misalnya mencari jarak antara 2 poin)
Penggunaan:
pilih dbo.DistanceKM(37.848832506474, 37.848732506474, 27.83935546875, 27.83905546875)
Output:
0,02849639
Anda dapat mengubah @R parameter dengan berkomentar mengapung.
Selain jawaban-jawaban berikut adalah cara untuk menghitung jarak dalam MEMILIH:
Penggunaan:
Skalar fungsi juga bekerja tetapi mereka sangat tidak efisien ketika komputasi data dalam jumlah besar.
Saya berharap ini bisa membantu seseorang.