Direcciones de búsqueda de Google Maps por región personalizada
-
27-10-2019 - |
Pregunta
Tengo una base de datos de direcciones y quiero poder que un usuario caiga un punto de punto en el mapa y defina una región basada en la distancia de conducción alrededor de ese punto. Me preguntaba si había una manera de buscar en mi base de datos por esa región definida por el usuario.
Solución
Para el sistema internacional que utiliza Kilómetros, reemplace una parte del script con este:
6371 * acos( cos( radians(LATITUDE1) ) * cos( radians( LATITUDE2 ) ) * cos( radians( LONGITUDE1 ) - radians(LONGITUDE2) ) + sin( radians(LATITUDE1) ) * sin( radians( lat ) ) ) AS DISTANCE
Fuente: http://www.codecodex.com/wiki/calcule_distance_between_two_points_on_a_globe#mysql
Otros consejos
Debería poder obtener las coordenadas de longitud y latitud de la caída del pin, luego enviar esos datos a su servidor y devolver un resultado utilizando la consulta enumerada en esta página: 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;
También necesitaría geocodificar sus direcciones en longitud y latitudes, y almacenarlas con cada dirección. Este es el código exacto que usé para raspar la longitud y las latitudes de las direcciones en mi base de datos:
/* 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'] . "'");
}
}
/***********************/
Función XML2Array: http://www.bin-co.com/php/scripts/xml2array/