Список событий в определенной области, используя Google Maps - PullRequest
2 голосов
/ 27 ноября 2011

У меня есть Google Map с множеством событий и т. Д.

Как я могу перечислить все события, например. в 50 км от моего местоположения?

1 Ответ

1 голос
/ 28 ноября 2011

Поскольку ваш вопрос немного расплывчатый, я предполагаю, что у вас есть список длинных и длинных координат.Вы можете получить их из SQL, используя что-то вроде этого:

SELECT 
z.id AS z__id, 
z.zipcode AS z__zipcode, 
z.city AS z__city, 
z.state AS z__state, 
z.county AS z__county, 
z.zip_class AS z__zip_class, 
z.latitude AS z__latitude, 
z.longitude AS z__longitude, 
((ACOS(SIN(* PI() / 180) * SIN(z.latitude * PI() / 180) + COS(* PI() / 180) * COS(z.latitude * PI() / 180) * COS((- z.longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS z__0, 
((ACOS(SIN(* PI() / 180) * SIN(z.latitude * PI() / 180) + COS(* PI() / 180) * COS(z.latitude * PI() / 180) * COS((- z.longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 * 1.609344) AS z__1 
FROM zipcode z 
WHERE z.city != ? 
ORDER BY z__0 asc 
LIMIT 50

z_ 0 будет точкой в ​​милях, тогда как z _1 будет расстоянием в км.

(источник: http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual / поведение / en # core-поведение: географическое )

Или использовать что-то подобное(аналог в php):

function distance($lat1, $lon1, $lat2, $lon2, $unit) { 

  $theta = $lon1 - $lon2; 
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
  $dist = acos($dist); 
  $dist = rad2deg($dist); 
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
    return ($miles * 1.609344); 
  } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
        return $miles;
      }
}

http://www.zipcodeworld.com/samples/distance.php.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...