Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kueri untuk menemukan tempat dalam lat/lng tertentu

Kami mengimplementasikannya kurang lebih seperti kode di bawah ini (penafian:Saya mengambil ini dari file dan menghapus kode yang tidak relevan dengan masalah yang dihadapi. Saya tidak menjalankan ini, tetapi Anda seharusnya bisa mendapatkan idenya.

$maxLat = $city->latitude + ($max_distance / 69); // 69 Miles/Degree
$minLat = $city->latitude - ($max_distance / 69);

$maxLon = $city->longitude + ($max_distance / (69.172 * cos($city->latitude * 0.0174533)));
$minLon = $city->longitude - ($max_distance / (69.172 * cos($city->latitude * 0.0174533)));

// Simplify terms to speed query
$originLatRadCos = cos($city->latitude * 0.0174533);
$originLatRadSin = sin($city->latitude * 0.0174533);
$originLonRad = $city->longitude * 0.0174533;

$city_distance_query = "
SELECT city_id, 
  3963 * acos(($originLatRadSin * sin( latitude * 0.0174533)) + 
  ($originLatRadCos * cos(latitude * 0.0174533) * cos((longitude * 0.0174533) -
  $originLonRad))) AS distanceFromOrigin
FROM cities
WHERE
 latitude < $maxLat AND latitude > $minLat AND longitude < $maxLon AND longitude > $minLon";

Sisa kueri

SELECT cities.city_name, CityDistance.distanceFromOrigin,
FROM cities 
INNER JOIN ($city_distance_query) AS CityDistance ON CityDistance.city_id=cities.city_id
WHERE (distanceFromOrigin < $distance OR distanceFromOrigin IS NULL) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi Laravel - Mengatakan database tidak dikenal, tetapi dibuat

  2. Memasukkan nilai ke dalam tabel di dalam suatu fungsi menerima kesalahan, tetapi ketika mencoba memasukkan nilai ke dalam tabel di luar fungsi, itu berfungsi dengan baik

  3. Kinerja MySQL, gabung dalam, cara menghindari Menggunakan sementara dan filesort

  4. Saya tidak dapat memuat driver JDBC untuk MySQL

  5. Mengindeks pohon k-d?