executerRequete($requete); echo " ".count($liste_stations)." stations trouvées \n"; echo "Début de la recherche des communes associées \n"; $recherche_infos = new OdsCommune($this->config); $communes_inconnues = array(); $infos_stations_completees = array(); foreach($liste_stations as $station) { $infos_code_insee = $this->effectuerRechercheCommune($station['os_latitude'], $station['os_longitude']); $infos_code_insee['ancien_nom'] = $station['os_ce_commune']; $infos_code_insee['lat'] = $station['os_latitude']; $infos_code_insee['lon'] = $station['os_longitude']; if($infos_code_insee['certitude'] == "ok") { $infos_stations_completees[$station['os_id_station']] = $infos_code_insee; } else { $communes_inconnues[$station['os_id_station']] = $infos_code_insee; } } echo "Fin de la recherche : \n"; echo " - ".count($infos_stations_completees)." stations se verront affecter un code insee \n"; echo " - ".count($communes_inconnues)." stations ne correspondent à aucune commune connue \n"; file_put_contents($this->config["appli"]["chemin_fichiers_temp"]."/communes_inconnues.txt", print_r($communes_inconnues, true)); file_put_contents($this->config["appli"]["chemin_fichiers_temp"]."/communes_localisees.txt", print_r($infos_stations_completees, true)); $fin = microtime(true) - $debut; echo "La recherche à pris ".$fin." secondes \n"; echo "Modification des stations dont la certitude est ok \n"; $suite = microtime(true); foreach($infos_stations_completees as $id_station => $infos_station) { $requete = "UPDATE ods_stations SET os_ce_commune = ".$this->proteger($infos_station['codeINSEE'])." WHERE os_id_station = ".$this->proteger($id_station); $this->executerRequeteSimple($requete); } $suite_et_fin = microtime(true) - $suite; echo "Fin de modification des stations concernées \n"; echo "La mise à jour de la base a pris ".$suite_et_fin." secondes \n"; echo "Les stations non modifiées sont disponibles dans le fichier situé dans ".$this->config["appli"]["chemin_fichiers_temp"]."/communes_inconnues.txt \n"; } function effectuerRechercheCommune($lat, $lon) { $url_commune = "http://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon=".urlencode($lon)."&lat=".urlencode($lat); $infos_commune_json = @file_get_contents($url_commune); $infos = null; if($infos_commune_json != null) { $infos_d = json_decode($infos_commune_json, true); if(isset($infos_d['codeINSEE']) && trim($infos_d['codeINSEE']) != "") { $infos_d['source'] = 'osm'; $infos = $infos_d; $infos['certitude'] = 'ok'; } else { $infos = $this->rechercherParGoogleMaps($lat, $lon); } } else { $infos = $this->rechercherParGoogleMaps($lat, $lon); } return $infos; } private function rechercherParGoogleMaps($lat, $lon) { $url_commune_fallback = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".urlencode($lat).",".urlencode($lon)."&sensor=false"; $infos = $this->decoderRetourGoogleMaps(@file_get_contents($url_commune_fallback)); return $infos; } private function decoderRetourGoogleMaps($retour) { $nom = null; $code_postal = null; $retour_infos_tpl = array("certitude" => "bof", "source" => "google", "nom" => "", "codeINSEE" => ""); if($retour != null) { $retour = json_decode($retour, true); if(isset($retour['results']) && count($retour['results']) != 0) { $infos_commune = $retour['results'][0]; foreach($infos_commune['address_components'] as $tranche) { if(isset($tranche['types'])) { if(in_array('locality',$tranche['types'])) { $nom = $tranche['long_name']; } if(in_array('postal_code',$tranche['types'])) { $code_postal = $tranche['long_name']; } if($nom != null && $code_postal != null) { break; } } } } } if($nom != null && $code_postal != null) { $dpt = substr($code_postal, 0, 2); $dpt = $dpt."___"; // le retour de google maps est un code postal et pas un code insee $requete = "SELECT oc_code_insee FROM ods_communes WHERE oc_nom LIKE ".$this->proteger($nom."%")." AND oc_code_insee LIKE ".$this->proteger($dpt); $resultat = $this->executerRequete($requete); if(!empty($resultat)) { $retour_infos[1] = $resultat[0]['oc_code_insee']; $retour_infos_tpl = array( "certitude" => "ok", "source" => "google", "nom" => $nom, "codeINSEE" => $resultat[0]['oc_code_insee']); } else { $retour_infos_tpl = array( "certitude" => "douteux", "source" => "google", "nom" => $nom, "codeINSEE" => $code_postal); } } return $retour_infos_tpl; } } ?>