SORU
22 ŞUBAT 2009, Pazar


MySQL Büyük Daire Mesafesi (Haversine formülü)

Enlem ve Boylam değerleri alır ve sonra bir MySQL sorgu içine girdiler çalışan bir PHP komut dosyası var. Bu sadece MySQL yapmak istiyorum. Şuan benim PHP Kodu:

if ($distance != "Any" && $customer_zip != "") { //get the great circle distance

    //get the origin zip code info
    $zip_sql = "SELECT * FROM zip_code WHERE zip_code = '$customer_zip'";
    $result = mysql_query($zip_sql);
    $row = mysql_fetch_array($result);
    $origin_lat = $row['lat'];
    $origin_lon = $row['lon'];

    //get the range
    $lat_range = $distance/69.172;
    $lon_range = abs($distance/(cos($details[0]) * 69.172));
    $min_lat = number_format($origin_lat - $lat_range, "4", ".", "");
    $max_lat = number_format($origin_lat   $lat_range, "4", ".", "");
    $min_lon = number_format($origin_lon - $lon_range, "4", ".", "");
    $max_lon = number_format($origin_lon   $lon_range, "4", ".", "");
    $sql .= "lat BETWEEN '$min_lat' AND '$max_lat' AND lon BETWEEN '$min_lon' AND '$max_lon' AND ";
    }

Herkes bu tamamen MySQL yapmak için nasıl biliyor mu? İnternette biraz göz attım ama edebiyatının en çok kafa karıştırıcı.

CEVAP
22 ŞUBAT 2009, Pazar


Google Code FAQ - Creating a Store Locator with PHP, MySQL & Google Maps:

İşte 37, -122 koordinat 25 kilometre yarıçapı içinde en yakın 20 konumlarını bulabilirsiniz SQL deyimi. Hesaplar mesafeye göre enlem/boylam satır ve hedef enlem/boylam, ve sonra sorar sadece satırları mesafe değeri az 25, siparişler tüm sorgu tarafından mesafe ve sınırlar için 20 sonuç. Mil yerine kilometre ile arama yapmak için 6371 ile 3959 değiştirin.

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
* cos( radians( lng ) - radians(-122) )   sin( radians(37) ) * sin(radians(lat)) ) ) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance 
LIMIT 0 , 20;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Air_Fooj

    Air_Fooj

    24 NİSAN 2009
  • Random Act of Kindness Video Contest

    Random Act o

    18 EYLÜL 2012
  • Marissah Simonini

    Marissah Sim

    25 HAZİRAN 2013