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

  • SignatureSeries

    SignatureSer

    24 Aralık 2006
  • Sparta Spartanutul

    Sparta Spart

    18 HAZİRAN 2013
  • Study with Substance P

    Study with S

    31 Mayıs 2008