Google Maps adresses Recherche par région personnalisée
-
27-10-2019 - |
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.
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 /