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.

¿Fue útil?

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/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top