CRM dan Platform DataAnalisis & Pengujianmarketing Tools

Hitung atau Kueri Jarak Lingkaran Besar Antara Titik Lintang dan Bujur Menggunakan Rumus Haversine (Contoh PHP, Python, MySQL, MSSQL)

Bulan ini saya telah memprogram cukup banyak di PHP dan MySQL sehubungan dengan GIS. Mengintai di sekitar net, saya sebenarnya kesulitan menemukan beberapa Perhitungan geografis untuk menemukan jarak antara dua lokasi jadi saya ingin membagikannya di sini.

Peta Penerbangan Eropa Dengan Jarak Lingkaran Besar

Cara sederhana untuk menghitung jarak antara dua titik menggunakan rumus Pythagoras untuk menghitung sisi miring segitiga (A² + B² = C²). Ini dikenal sebagai Jarak Euclidean.

Itu awal yang menarik tetapi tidak berlaku dengan Geografi karena jarak antara garis lintang dan bujur jarak tidak sama selain. Semakin dekat ke ekuator, garis lintang semakin menjauh. Jika Anda menggunakan sejenis persamaan triangulasi sederhana, persamaan ini dapat mengukur jarak secara akurat di satu lokasi dan sangat salah di lokasi lain, karena kelengkungan Bumi.

Jarak Lingkaran Besar

Rute yang ditempuh jarak jauh di sekitar Bumi dikenal sebagai Jarak Lingkaran Besar. Artinya… jarak terpendek antara dua titik pada bola berbeda dengan titik pada peta datar. Kombinasikan itu dengan fakta bahwa garis lintang dan garis bujur tidak berjarak sama… dan Anda mendapatkan perhitungan yang sulit.

Berikut adalah penjelasan video fantastis tentang cara kerja Great Circles.

Formula Haversine

Jarak yang menggunakan kelengkungan bumi dimasukkan ke dalam Formula Haversine, yang menggunakan trigonometri untuk memungkinkan kelengkungan bumi. Saat Anda mencari jarak antara 2 tempat di bumi (saat burung gagak terbang), garis lurus sebenarnya adalah busur.

Ini berlaku dalam penerbangan udara - pernahkah Anda melihat peta penerbangan yang sebenarnya dan melihat peta itu melengkung? Itu karena lebih pendek terbang di lengkungan antara dua titik daripada langsung ke lokasi.

PHP: Menghitung Jarak Antara 2 Titik Lintang dan Bujur

Berikut rumus PHP untuk menghitung jarak antara dua titik (bersama dengan konversi Mile vs. Kilometer) yang dibulatkan menjadi dua tempat desimal.

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'miles') {
  $theta = $longitude1 - $longitude2; 
  $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
  $distance = acos($distance); 
  $distance = rad2deg($distance); 
  $distance = $distance * 60 * 1.1515; 
  switch($unit) { 
    case 'miles': 
      break; 
    case 'kilometers' : 
      $distance = $distance * 1.609344; 
  } 
  return (round($distance,2)); 
}

Variabelnya adalah:

  • $Lintang1 – variabel untuk garis lintang lokasi pertama Anda.
  • $Bujur1 – variabel untuk bujur lokasi pertama Anda
  • $Lintang2 – variabel untuk garis lintang lokasi kedua Anda.
  • $Bujur2 – variabel untuk bujur lokasi kedua Anda.
  • $satuan – makhluk default mil. Ini dapat diperbarui atau diteruskan sebagai kilometer.

Python: Hitung Jarak Antara 2 Titik Lintang dan Bujur

Bagaimanapun, inilah rumus Python untuk menghitung jarak antara dua titik (bersama dengan konversi Mile vs. Kilometer) dibulatkan menjadi dua tempat desimal. Penghargaan untuk putra saya, Bill Karr yang merupakan Ilmuwan Data untuk OpenINSIGHTS, untuk kode.

from numpy import sin, cos, arccos, pi, round

def rad2deg(radians):
    degrees = radians * 180 / pi
    return degrees

def deg2rad(degrees):
    radians = degrees * pi / 180
    return radians

def getDistanceBetweenPointsNew(latitude1, longitude1, latitude2, longitude2, unit = 'miles'):
    
    theta = longitude1 - longitude2
    
    distance = 60 * 1.1515 * rad2deg(
        arccos(
            (sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) + 
            (cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta)))
        )
    )
    
    if unit == 'miles':
        return round(distance, 2)
    if unit == 'kilometers':
        return round(distance * 1.609344, 2)

Variabelnya adalah:

  • lintang1 – variabel untuk lokasi pertama Anda lintang.
  • bujur1 – variabel untuk lokasi pertama Anda garis bujur
  • lintang2 – variabel untuk lokasi kedua Anda lintang.
  • bujur2 – variabel untuk lokasi kedua Anda garis bujur.
  • satuan – makhluk default mil. Ini dapat diperbarui atau diteruskan sebagai kilometer.

MySQL: Mengambil Semua Catatan Dalam Jangkauan Dengan Menghitung Jarak Dalam Mil Menggunakan Garis Lintang dan Bujur

SQL juga dapat digunakan untuk melakukan penghitungan guna menemukan semua record dalam jarak tertentu. Dalam contoh ini, saya akan meminta MyTable di MySQL untuk menemukan semua record yang kurang dari atau sama dengan variabel $ distance (dalam Miles) ke lokasi saya di $ latitude dan $ longitude:

Kueri untuk mengambil semua rekaman dalam satu jarak dengan menghitung jarak dalam mil antara dua titik lintang dan bujur adalah:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance <= ".$distance."

Anda harus menyesuaikan ini:

  • $ bujur - ini adalah variabel PHP di mana saya meneruskan garis bujur titik.
  • $ latitude - ini adalah variabel PHP di mana saya meneruskan garis bujur titik.
  • $ jarak - ini adalah jarak yang Anda inginkan untuk menemukan semua record yang kurang atau sama.
  • tabel - ini tabelnya… Anda ingin menggantinya dengan nama tabel Anda.
  • lintang - ini adalah bidang garis lintang Anda.
  • garis bujur - ini adalah bidang bujur Anda.

MySQL: Mengambil Semua Catatan Dalam Jangkauan Dengan Menghitung Jarak Dalam Kilometer Menggunakan Lintang dan Bujur

Dan inilah kueri SQL menggunakan kilometer di MySQL:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance <= ".$distance."

Anda harus menyesuaikan ini:

  • $ bujur - ini adalah variabel PHP di mana saya meneruskan garis bujur titik.
  • $ latitude - ini adalah variabel PHP di mana saya meneruskan garis bujur titik.
  • $ jarak - ini adalah jarak yang Anda inginkan untuk menemukan semua record yang kurang atau sama.
  • tabel - ini tabelnya… Anda ingin menggantinya dengan nama tabel Anda.
  • lintang - ini adalah bidang garis lintang Anda.
  • garis bujur - ini adalah bidang bujur Anda.

Saya menggunakan kode ini dalam platform pemetaan perusahaan yang kami gunakan untuk toko ritel dengan lebih dari 1,000 lokasi di seluruh Amerika Utara dan berfungsi dengan baik.

Jarak Geografis Microsoft SQL Server: Jarak ST

Jika Anda menggunakan Microsoft SQL Server, mereka menawarkan fungsinya sendiri, Jarak ST untuk menghitung jarak antara dua titik menggunakan tipe data Geografi.

DECLARE @g geography;  
DECLARE @h geography;  
SET @g = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);  
SET @h = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);  
SELECT @g.STDistance(@h);  

Kiat topi untuk Manash Sahoo, VP dan Arsitek Highbridge.

Douglas Karr

Douglas Karr adalah pendiri Martech Zone dan ahli transformasi digital yang diakui. Doug adalah seorang Pembicara Utama dan Pemasaran Publik. Dia adalah VP dan salah satu pendiri Highbridge, sebuah firma yang mengkhususkan diri dalam membantu perusahaan enterprise untuk mengubah dan memaksimalkan investasi teknologi mereka secara digital dengan menggunakan teknologi Salesforce. Dia mengembangkan pemasaran digital dan strategi produk untuk Dell Technologies, Ayo ayah, Salesforce, Tren web, dan FOKUS Cerdas. Douglas juga penulis Blogging Perusahaan untuk Dummies dan co-penulis Buku Bisnis yang Lebih Baik.

78 Komentar

  1. Terima kasih banyak telah berbagi. Ini adalah pekerjaan salin dan tempel yang mudah dan berfungsi dengan baik. Anda telah menghemat banyak waktu saya.
    FYI untuk siapa saja yang melakukan porting ke C:
    double deg2rad (double deg) {return deg * (3.14159265358979323846 / 180.0); }

  2. Sepotong posting yang sangat bagus - bekerja sangat baik - saya hanya perlu mengubah nama tabel yang menahan lat-long. Ini bekerja cukup cepat untuk .. Saya memiliki sejumlah kecil lintang (<400) tapi saya pikir ini akan menskalakan dengan baik. Situs yang bagus juga - saya baru saja menambahkannya ke akun del.icio.us saya dan akan memeriksa kembali secara teratur.

  3. Saya mencari sepanjang hari untuk penghitungan jarak dan menemukan algoritma harversine, terima kasih kepada Anda karena telah memberikan contoh tentang cara memasukkannya ke dalam pernyataan sql. Terima kasih dan salam, Daniel

    1. Senang bisa membantu, teman rel!

      Sekarang saya sedang mencari fungsi PHP 'dalam Poligon' yang akan mengambil array koordinat lintang dan bujur yang diurutkan dan mencari tahu apakah titik lain ada di dalam atau di luar poligon.

  4. Saya pikir SQL Anda membutuhkan pernyataan memiliki.
    bukannya DI MANA jarak <= $ jarak yang mungkin Anda butuhkan
    gunakan HAVING jarak <= $ jarak

    jika tidak, terima kasih telah menghemat banyak waktu dan energi saya.

  5. Terima kasih banyak telah membagikan kode ini. Ini menghemat banyak waktu pengembangan. Juga, terima kasih kepada pembaca Anda karena telah menunjukkan bahwa pernyataan HAVING diperlukan untuk MySQL 5.x. Sangat membantu.

  6. Halo,

    Pertanyaan lain. Apakah ada rumus string NMEA seperti di bawah ini?

    1342.7500, N, 10052.2287, E.

    $GPRMC,032731.000,A,1342.7500,N,10052.2287,E,0.40,106.01,101106,,*0B

    Terima kasih,
    menyerobot

  7. Saya juga menemukan bahwa WHERE tidak berhasil untuk saya. Berubah menjadi HAVING dan semuanya bekerja dengan sempurna. Pada awalnya saya tidak membaca komentar dan menulis ulang menggunakan pilihan bersarang. Keduanya akan bekerja dengan baik.

  8. Sangat membantu, terima kasih banyak! Saya mengalami beberapa masalah dengan "HAVING" yang baru, bukan "WHERE", tetapi setelah saya membaca komentar di sini (setelah sekitar setengah jam mengertakkan gigi karena frustrasi = P), saya membuatnya berfungsi dengan baik. Terima kasih ^ _ ^

  9. Ingatlah bahwa pernyataan pilih seperti itu akan sangat intens secara komputasi dan karenanya lambat. Jika Anda memiliki banyak kueri tersebut, itu dapat memperlambat segalanya dengan cukup cepat.

    Pendekatan yang jauh lebih tidak intens adalah dengan menjalankan pemilihan (kasar) pertama menggunakan area KOTAK yang ditentukan oleh jarak yang dihitung, yaitu "pilih * dari nama tabel di mana lintang antara lintang dan lintang antara lintang dan 1 dan bujur antara lon2 dan lon1". lat2 = targetlatitude - latdiff, lat1 = targetlatitude + latdiff, mirip dengan lon. latdiff ~ = jarak / 2 (untuk km), atau jarak / 111 untuk mil karena 69 derajat lintang adalah ~ 1 km (sedikit variasi karena bumi agak lonjong, tetapi cukup untuk tujuan ini). londiff = jarak / (abs (cos (deg111rad (latitude)) * 2)) - atau 111 mil (Anda sebenarnya dapat mengambil persegi yang sedikit lebih besar untuk memperhitungkan variasi). Kemudian ambil hasilnya dan masukkan ke dalam pemilihan radial. Jangan lupa untuk memperhitungkan koordinat di luar batas - yaitu rentang bujur yang dapat diterima adalah -69 hingga +180 dan rentang garis lintang yang dapat diterima adalah -180 hingga +90 - jika latdiff atau londiff Anda berada di luar rentang ini . Perhatikan bahwa dalam banyak kasus hal ini mungkin tidak berlaku karena hanya mempengaruhi perhitungan melalui garis melalui samudra pasifik dari kutub ke kutub, meskipun itu memotong sebagian chukotka dan sebagian alaska.

    Apa yang kami capai dengan ini adalah pengurangan yang signifikan dalam jumlah poin yang Anda gunakan untuk membuat perhitungan ini. Jika Anda memiliki satu juta titik global dalam database yang didistribusikan secara kasar dan Anda ingin mencari dalam jarak 100 km, maka pencarian pertama (cepat) Anda adalah seluas 10000 km persegi dan mungkin akan menghasilkan sekitar 20 hasil (berdasarkan distribusi yang merata di luas permukaan sekitar 500M km persegi), yang berarti Anda menjalankan penghitungan jarak kompleks sebanyak 20 kali untuk kueri ini, bukan satu juta kali.

    1. Kesalahan kecil dalam contoh… yaitu dalam jarak 50 km (bukan 100) karena kita melihat “jari-jari” kotak… kita.

      1. Saran yang fantastis! Saya benar-benar bekerja dengan pengembang yang menulis fungsi yang menarik bagian dalam persegi dan kemudian fungsi rekursif yang membuat 'kotak' di sekeliling untuk memasukkan dan mengecualikan poin yang tersisa. Hasilnya adalah hasil yang sangat cepat - dia dapat mengevaluasi jutaan poin dalam mikrodetik.

        Pendekatan saya di atas jelas 'kasar' tetapi mampu. Terima kasih lagi!

        1. anjing,

          Saya telah mencoba menggunakan mysql dan php untuk mengevaluasi apakah titik panjang lintang berada dalam poligon. Apakah Anda tahu jika teman pengembang Anda menerbitkan contoh tentang bagaimana menyelesaikan tugas ini. Atau apakah Anda tahu contoh yang bagus. Terima kasih sebelumnya.

  10. Halo semuanya, ini adalah pernyataan SQL uji saya:

    SELECT DISTINCT area_id, (
    (
    (
    acos( sin( ( 13.65 * pi( ) /180 ) ) * sin( (
    `lat_dec` * pi( ) /180 ) ) + cos( ( 13.65 * pi( ) /180 ) ) * cos( (
    `lat_dec` * pi( ) /180 )
    ) * cos( (
    ( 51.02 - `lon_dec` ) * pi( ) /180 )
    )
    )
    ) *180 / pi( )
    ) *60 * 1.1515 * 1.609344
    ) AS distance
    FROM `post_codes` WHERE distance <= 50

    dan Mysql memberi tahu saya jarak itu, tidak ada sebagai kolom, saya dapat menggunakan pesanan dengan, saya dapat melakukannya tanpa DI MANA, dan berfungsi, tetapi tidak dengan itu…

  11. Ini bagus, tapi ini seperti burung yang terbang. Akan sangat bagus untuk mencoba dan memasukkan API peta google ke ini entah bagaimana (mungkin menggunakan jalan, dll.) Hanya untuk memberikan ide menggunakan bentuk transportasi yang berbeda. Saya masih belum membuat fungsi anil simulasi dalam PHP yang dapat menawarkan solusi yang efisien untuk masalah penjual keliling. Tapi saya pikir saya mungkin dapat menggunakan kembali beberapa kode Anda untuk melakukannya.

  12. Artikel bagus! Saya menemukan banyak artikel yang menjelaskan cara menghitung jarak antara dua titik tetapi saya benar-benar mencari potongan SQL.

  13. 2 hari penelitian untuk akhirnya menemukan halaman ini yang memecahkan masalah saya. Sepertinya lebih baik saya memecahkan WolframAlpha saya dan memoles matematika saya. Perubahan dari WHERE ke HAVING membuat skrip saya berfungsi. TERIMA KASIH

    1. Terima kasih Georgi. Saya terus mendapatkan kolom 'jarak' tidak ditemukan. Setelah saya mengubah WHERE menjadi HAVING, ini bekerja seperti pesona!

  14. Saya berharap ini adalah halaman pertama yang saya temukan tentang ini. Setelah mencoba banyak perintah berbeda, inilah satu-satunya yang berfungsi dengan baik, dan dengan sedikit perubahan yang diperlukan agar sesuai dengan database saya sendiri.
    Terima kasih banyak!

  15. Saya berharap ini adalah halaman pertama yang saya temukan tentang ini. Setelah mencoba banyak perintah berbeda, inilah satu-satunya yang berfungsi dengan baik, dan dengan sedikit perubahan yang diperlukan agar sesuai dengan database saya sendiri.
    Terima kasih banyak!

  16. Saya tahu rumus ini berhasil, tetapi saya tidak dapat melihat di mana jari-jari bumi diperhitungkan. Adakah yang bisa mencerahkan saya, tolong?

  17. Terima kasih Douglas, SQL Query persis seperti yang saya butuhkan, dan saya pikir saya harus menulisnya sendiri. Anda telah menyelamatkan saya dari kemungkinan berjam-jam kurva pembelajaran garis lintang!

  18. Douglas, terima kasih untuk kode yang luar biasa ini. Telah memecahkan kepalaku tentang cara melakukan ini di portal komunitas GPS saya. Anda telah menghemat saya berjam-jam.

  19. terima kasih telah memposting artikel bermanfaat ini,  
    tetapi untuk beberapa alasan saya ingin bertanya
    bagaimana cara mendapatkan jarak antara coord di dalam mysql db dan coord yang dimasukkan ke php oleh pengguna?
    untuk lebih jelas menjelaskan:
    1. pengguna harus memasukkan [id] untuk memilih data tertentu dari db dan coord pengguna itu sendiri
    2. file php mendapatkan data target (coord) menggunakan [id] dan kemudian menghitung jarak antara pengguna dan titik target

    atau bisa langsung saja mendapatkan jarak dari kode di bawah ini?

    $ qry = “PILIH *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((“. $ latitude. ”* pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((“. $ longitude.” - `Longitude`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) sebagai jarak DARI `MyTable` WHERE jarak> =". $ Jarak. " >>>> dapatkah saya “mengambil” jarak dari sini?
    Terima kasih lagi,
    Timmy S

    1. tidak apa-apa, saya sudah memikirkan bagaimana "fungsi" bekerja di php
      $ dis = getDistanceBetweenPointsNew ($ userLati, $ userLongi, $ lati, $ longi, $ unit = 'Km')
      Terima kasih banyak!! 

  20. ok, semua yang saya coba tidak berhasil. Maksud saya, apa yang saya miliki berhasil, tetapi jaraknya jauh.

    Adakah yang mungkin melihat apa yang salah dengan kode ini?

    if (isset ($ _ POST ['terkirim'])) {$ z = $ _POST ['zipcode']; $ r = $ _POST ['radius']; echo “Hasil untuk“. $ z; $ sql = mysql_query (“PILIH DISTINCT m.zipcode, m.MktName, m.LocAddSt, m.LocAddCity, m.LocAddState, m.x1, m.y1, m.verified, z1.lat, z2.lon, z1. kota, z1.state DARI mrk m, zip z1, zip z2 DIMANA m.zipcode = z1.zipcode DAN z2.zipcode = $ z AND (3963 * acos (truncate (sin (z2.lat / 57.2958) * sin (m. y1 / 57.2958) + cos (z2.lat / 57.2958) * cos (m.y1 / 57.2958) * cos (m.x1 / 57.2958 - z2.lon / 57.2958), 8))) <= $ r ") atau mati (mysql_error ()); while ($ row = mysql_fetch_array ($ sql)) {$ store1 = $ row ['MktName']. "”; $ store = $ row ['LocAddSt']. ””; $ store. = $ row ['LocAddCity']. ”,“. $ row ['LocAddState']. ” “. $ Row ['zipcode']; $ latitude1 = $ baris ['lat']; $ bujur1 = $ baris ['lon']; $ latitude2 = $ baris ['y1']; $ bujur2 = $ baris ['x1']; $ kota = $ baris ['kota']; $ state = $ row ['state']; $ dis = getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi'); // $ dis = jarak ($ ​​lat1, $ lon1, $ lat2, $ lon2); $ terverifikasi = $ baris ['diverifikasi']; if ($ Verified == '1') {echo “”; echo "". $ store. ""; echo $ dis. " bermil-mil jauhnya"; echo ""; } lain {echo "". $ store. ""; echo $ dis. " bermil-mil jauhnya"; echo ""; }}}

    kode functions.php saya
    function getnew ($ latitude1, $ longitude1, $ latitude2, $ longitude2, $ unit = 'Mi') {$ theta = $ longitude1 - $ longitude2; $ jarak = (sin (deg2rad ($ latitude1)) * sin (deg2rad ($ latitude2))) + (cos (deg2rad ($ latitude1)) * cos (deg2rad ($ latitude2)) * cos (deg2rad ($ theta)) ); $ jarak = acos ($ jarak); $ jarak = rad2deg ($ jarak); $ jarak = $ jarak * 60 * 1.1515; switch ($ unit) {case 'Mi': break; kasus 'Km': $ jarak = $ jarak * 1.609344; } kembali (putaran ($ jarak, 2)); }

    Terima kasih sebelumnya

  21. Hei Douglas, artikel bagus. Saya menemukan penjelasan Anda tentang konsep geografis dan kodenya sangat menarik. Satu-satunya saran saya adalah memberi spasi dan memasukkan kode untuk tampilan (seperti Stackoverflow, misalnya). Saya memahami bahwa Anda ingin menghemat ruang, tetapi spasi / lekukan kode konvensional akan membuat saya lebih mudah, sebagai programmer, untuk membaca dan membedah. Bagaimanapun, itu hal yang kecil. Pertahankan kerja bagus.

  22. Di sini saat menggunakan dengan fungsi kita mendapatkan satu jenis jarak .. sedangkan menggunakan query yang datang jenis jarak lainnya

  23. tampaknya lebih cepat (mysql 5.9) untuk menggunakan dua kali rumus di pilih dan di mana:
    $ formula = “(((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` Latitude` * pi () / 180)) + cos ((“. $ latitude. ”* Pi () / 180)) * cos ((` Latitude` * pi () / 180)) * cos (((“. $ Longitude.” - `Longitude`) * pi () / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) ”;
    $ sql = 'PILIH *,'. $ formula. ' sebagai jarak DARI tabel WHERE '.. $ formula.' <= '. $ jarak;

  24. Terima kasih banyak atas artikel ini. Ini sangat membantu.
    PHP pada awalnya dibuat sebagai platform scripting sederhana yang disebut “Personal Home Page”. Saat ini PHP (kependekan dari Hypertext Preprocessor) adalah alternatif dari teknologi Active Server Pages (ASP) Microsoft.

    PHP adalah bahasa sisi server open source yang digunakan untuk membuat halaman web dinamis. Itu dapat disematkan ke dalam HTML. PHP biasanya digunakan bersama dengan database MySQL di server web Linux / UNIX. Ini mungkin bahasa skrip paling populer.

  25. Saya menemukan solusi di atas tidak berfungsi dengan baik.
    Saya perlu mengubah ke:

    $ qqq = “PILIH *, (((acos (sin ((“. $ latitude. ”* pi () / 180)) * sin ((` latt` * pi () / 180)) + cos ((”. $ latitude. “* pi () / 180)) * cos ((` latt` * pi () / 180)) * cos (((”. $ longitude.“ - `longt`) * pi () / 180) ))) * 180 / pi ()) * 60 * 1.1515) sebagai jarak DARI `register`“;

  26. terima kasih pak wroking dengan sempurna .. tetapi saya punya satu pertanyaan jika saya ingin keluaran tanpa titik desimal lalu apa yang dapat saya lakukan ..?

    Terima kasih sebelumnya.

  27. Halo, tolong saya sangat membutuhkan bantuan Anda dalam hal ini.

    Saya membuat permintaan get ke server web saya http://localhost:8000/users/findusers/53.47792/-2.23389/20/
    53.47792 = $ latitude
    -2.23389 = $ bujur
    dan 20 = jarak yang ingin saya ambil

    Namun menggunakan rumus Anda, itu mengambil semua baris di db saya

    $ results = DB :: select (DB :: raw ("SELECT *, (((acos (sin ((". $ latitude. "* pi () / 180)) * sin ((lat * pi () / 180 )) + cos ((". $ latitude." * pi () / 180)) * cos ((lat * pi () / 180)) * cos (((". $ longitude." - lng) * pi ( ) / 180)))) * 180 / pi ()) * 60 * 1.1515 * 1.609344) sebagai jarak DARI penanda MEMILIKI jarak> = ". $ Jarak));

    [{“Id”: 1, ”name”: ”Frankie Johnnie & Luigo Too”, ”address”: ”939 W El Camino Real, Mountain View, CA”, ”lat”: 37.386337280273, ”lng”: - 122.08582305908, ”Jarak”: 16079.294719663}, {“id”: 2, ”name”: ”Amici's East Coast Pizzeria”, ”address”: ”790 Castro St, Mountain View, CA”, ”lat”: 37.387138366699, ”lng”: -122.08323669434, ”distance”: 16079.175940152}, {“id”: 3, ”name”: ”Kapp's Pizza Bar & Grill”, ”address”: ”191 Castro St, Mountain View, CA”, ”lat”: 37.393886566162, ”Lng”: - 122.07891845703, ”jarak”: 16078.381373826}, {“id”: 4, ”name”: ”Round Table Pizza: Mountain View”, ”alamat”: ”570 N Shoreline Blvd, Mountain View, CA”, ”Lat”: 37.402652740479, ”lng”: - 122.07935333252, ”jarak”: 16077.420540582}, {“id”: 5, ”name”: ”Tony & Alba's Pizza & Pasta”, ”address”: ”619 Escuela Ave, Mountain View, CA ”,” lat ”: 37.394012451172,” lng ”: - 122.09552764893,” distance ”: 16078.563225154}, {“ id ”: 6,” name ”:” Oregano's Wood-Fired Pizza ”,” address ”:” 4546 El Camino Real, Los Altos, CA "," lat ": 37.401725769043," lng ": - 122.11464691162," jarak ": 16077.937560795}, {" id ”: 7,” name ”:” The Bars and Grills ”,” address ”:” 24 Whiteley Street, Manchester ”,” lat ”: 53.485118865967,” lng ”: - 2.1828699111938,” distance ”: 8038.7620112314}]

    Saya hanya ingin mengambil baris dengan jarak 20 mil tetapi itu membawa semua baris. Tolong apa yang saya lakukan salah

  28. Saya mencari kueri serupa tetapi sedikit meningkat – singkatnya ini adalah mengelompokkan semua koordinat dalam jarak 2 mil dari setiap koordinat dan kemudian menghitung berapa banyak koordinat di setiap grup dan hanya menghasilkan satu grup yang memiliki koordinat paling banyak – bahkan jika Anda memiliki lebih dari satu grup di antara grup yang memiliki jumlah koordinat paling banyak – cukup keluarkan grup acak dari grup dengan jumlah terbesar yang sama –

Bagaimana menurut Anda?

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Artikel terkait