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

  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012