Question

J'ai une base de données d'adresses et je veux être en mesure d'avoir un utilisateur déposer une pointe d'épingle sur la carte et définir une région en fonction de la distance parcourue autour de ce point. Je me demandais s'il y avait un moyen de rechercher ma base de données par cette région définie par l'utilisateur.

Était-ce utile?

La solution

Pour le système international qui utilise Kilomètres , remplacer une partie du script avec celui-ci:

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

Source: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe#MySQL

Autres conseils

Vous devriez être en mesure d'obtenir la longitude et la latitude de la chute de la broche, puis envoyer ces données à votre serveur et retourner un résultat en utilisant la requête figurant sur cette page: 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;

Vous devrez géocodage vos adresses en longitude et latitude ainsi, et de les stocker à chaque adresse bien. Ce code est exact que je l'habitude de longitude et de latitude pour éraflure adresses dans ma base de données:

  /* 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'] . "'");
    }
  }

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

Fonction XML2array: http://www.bin-co.com/php/ scripts / xml2array /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top