Карты Google Поиск адресов по пользовательскому региону - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть база данных адресов, и я хочу, чтобы пользователь мог указать точку на карте и определить регион на основе расстояния, пройденного вокруг этой точки.Мне было интересно, есть ли способ поиска в моей базе данных по указанному пользователем региону.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2012

Для Международной системы, которая использует Километры , замените часть сценария на следующую:

6371 * acos( cos( radians(LATITUDE1) ) * cos( radians( LATITUDE2 ) ) * cos( radians( LONGITUDE1 ) - radians(LONGITUDE2) ) + sin( radians(LATITUDE1) ) * sin( radians( lat ) ) ) AS DISTANCE

Источник: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe#MySQL

0 голосов
/ 07 сентября 2011

Вы сможете получить координаты долготы и широты отбрасывания булавки, затем отправить эти данные на ваш сервер и вернуть результат, используя запрос, указанный на этой странице: http://code.google.com/apis/maps/articles/phpsqlsearch.html

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;

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

  /* Geocode Address
  /***********************/
  $query = $db->query("SELECT * FROM wholesale_clients WHERE hq_id IN (SELECT owner_id FROM storelocator)");
  while($info = $query->fetch_array()) {
    $address = str_replace(' ', '+', $info['address_1'] . ' ' . $info['address_2'] . ' ' . $info['suburb'] . ' ' . $info['state'] . ' ' . $info['zip'] . ' Australia');
    $file = file_get_contents('https://maps.googleapis.com/maps/api/geocode/xml?address='.$address.'&sensor=false');
    $file = xml2array($file);
    $lat = $file['GeocodeResponse']['result']['geometry']['location']['lat'];
    $lng = $file['GeocodeResponse']['result']['geometry']['location']['lng'];
    //echo $info['hq_id'] . ' ' . $lat . ' ' . $lng . '<br />';
    if(!empty($lat) && !empty($lng)) {
    $db->query("UPDATE `storelocator` SET `lat` = '" . $lat . "', `lng` = '" . $lng . "', `updated` = 1 WHERE `owner_id` = '" . $info['hq_id'] . "'");
    }
  }

  /***********************/

Функция XML2array: http://www.bin -co.com / php / scripts / xml2array /

...