Doktrin coğrafi kayıtlarında verilen koordinatlarda mesafe alma

2 Cevap php

I'm developing a Symfony 1.4 project where one of the tables has the Geographical template. The present functions can give the distance between two records, but not between records and given coordinates.

Nasıl Symfony şekilde böyle bir özelliği uygulanabilir?

Daha spesifik: Ben belirli bir enlem ve boylam koordinatları mesafe azalan tarafından sipariş kayıtları gerekir

Hepinize teşekkür!

2 Cevap

    $radius = 200;
    $lat = mysql_real_escape_string($zipcode1->getLatitude());
    $long = mysql_real_escape_string($zipcode1->getLongitude());
    $q = Doctrine_Query::create()
    ->select("j.address, j.longitude, j.latitude, (3959 * acos(cos
(radians('".$lat."')) * cos(radians(latitude)) * cos(radians
(longitude) - radians('".$long."')) + sin(radians('".$lat."')) * sin
(radians(latitude)))) AS distance")
    ->from("Job j")
    ->having("distance < ?", $radius)
    ->orderBy("distance desc");
    $results = $q->execute(); 

Found this here: http://groups.google.com/group/doctrine-user/browse_thread/thread/5f4042649c9fa275

Ben yapmak için bir daha "symfony" yol gibi bir işlevleri var yani modelleri düzenlemek olacaktır sanırım:

$distance = $locationModel->DistanceFrom($anotherLocation);
$locations = LocationModel::GetLocationsClosestTo($lat, $long);

Benim app için ben şöyle ondalık sayılar gibi lat / uzun saklanır:

latitude: {type: decimal(4), scale: 4}
longitude: {type: decimal(4), scale: 4}

Google Maps API kadar 4 ondalık Yanal / uzun ürünler döndürür Çünkü

Bu bir "symfony yol" var olduğu için bir şey gibi gelmiyor. , Belirli bir enlem ve boylam koordinatları gelen azalan uzaklığını veritabanından veri almak, sadece normal bir şekilde bir Doktrin DQL sorgu kullanmak. Bununla birlikte, artan bir / azalan enlem veya boylam gerçek dünya mesafe açısından ne anlama geldiği hakkında birkaç temel anlamak gerekiyor. Ben daha yüksek bir enlem harita üzerinde sadece gittiği, hangi yönde, burada herhangi bir CBS uzmanlık anlamına gelmez. Yani Doktrin sorguları azalan / artan sizin inşa sağlayacaktır.

Iki enlem / uzun ürünler arasında gerçek-dünya mesafe hesaplamak için, ben size döner enlem ve uzun ve mesafe geçmek için özel bir yardımcı işlev oluştururken öneririz. O başka bir soru & bulunuyor tamamen cevap.