batch/1.1/old/geoCodeAdresses.php
2013-06-19 08:24:49 +00:00

229 lines
12 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
include_once(FWK_PATH.'common/chiffres.php');
include_once(FWK_PATH.'common/dates.php');
include_once(FWK_PATH.'common/ftp.php');
include_once(INCLUDE_PATH.'insee/classMInsee.php');
include_once(INCLUDE_PATH.'partenaires/classMMap.php');
include_once(FWK_PATH.'mail/sendMail.php');
$strInfoScript='Usage : '.basename($argv[0]). " <option>
Chargement du/des flux quotidiens en provenance de Insee.
Options :
-v Mode debug (Verbosité au maximum)
-d=20080430 Réappliquer les évènements depuis cette date
-f=20091230 Réappliquer les évènements jusqu'à cette date
-q Traiter le dernier flux Insee (Quotidien)
-h Traiter les flux historiques Insee
-l Traiter les conversions Lamberts
-a Traiter les altitudes
";
$iDb=new WDB('insee');
$iInsee=new MInsee();
$imap=new MMap();
$nbSiretInvalides=$nbErreurs=$nbInsert=$nbUpdate=
$nbLignes=$nbEnCache=$nbDistant=0;
$modeDebug=$dateReprise=$dateFin=false;
$doQuotidien=$doHisto=$doLamberts=$doAltitudes=false;
//Initialistation des variables
$argv=$_SERVER['argv'];
//if ($_SERVER['argc']==1) die("Non géré pour l'instant : chargera les derniers fichiers EVEN non chargés !".EOL);
for ($i=1,$j=0; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 'v': $modeDebug=true; break;
case 'd': $dateReprise=substr($argv[$i],3,8); break;
case 'f': $dateFin =substr($argv[$i],3,8); break;
case 'q': $doQuotidien=true; break;
case 'h': $doHisto =true; break;
case 'l': $doLamberts =true; break;
case 'a': $doAltitudes=true; break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else $tabFichier[]=$argv[$i];
}
if (!$doQuotidien && !$doHisto && !$doLamberts && !$doAltitudes)
$doQuotidien=$doHisto=$doLamberts=$doAltitudes=true;
if ($doQuotidien) {
echo date ('Y/m/d - H:i:s') . " - Début du traitement de géocodage des adresses INSEE".EOL;
$db_table='insee_even';
$ret=$iDb->select($db_table, 'MAX(idFlux) as idFlux', "1");
$idFluxFin=$ret[0]['idFlux'];
echo date ('Y/m/d - H:i:s')." - Le dernier flux INSEE géocodé est le flux $idFluxFin !".EOL;
if (!$dateReprise) {
$idFlux=$idFluxFin;
$idFlux3=(substr($idFlux,0,4)*1)-3;
$idFlux3=''.$idFlux3.substr($idFlux,4,6);
}
else {
if (!$dateFin) $dateFin=strtr($idFluxFin, array('-'=>''));
$idFlux=WDate::dateT('Ymd', 'Y-m-d', $dateReprise);
$idFluxFin=WDate::dateT('Ymd', 'Y-m-d', $dateFin);
echo date ('Y/m/d - H:i:s')." - On réapplique le géocodage du flux $idFlux au $idFluxFin !".EOL;
}
$nbLignes=$nbEnCache=$nbDistant=$nbAlt=0;
$nbLoaded=$iDb->select($db_table, 'insL4_VOIE, insNUMVOIE, insINDREP, insTYPVOIE, insLIBVOIE, insCODPOS, insLIBCOM, insDEPCOM, insCODEVOIE, insL7_ETRG, idFlux', "idFlux BETWEEN '$idFlux' AND '$idFluxFin'", false, MYSQL_ASSOC, true);
//$nbLoaded=$iDb->select('jo.etablissements_act', "'' AS insL4_VOIE, adr_num AS insNUMVOIE, adr_btq AS insINDREP, adr_typeVoie AS insTYPVOIE, adr_libVoie AS insLIBVOIE, adr_cp AS insCODPOS, adr_ville AS insLIBCOM, CONCAT(adr_dep*1,adr_com) AS insDEPCOM, rivoli AS insCODEVOIE, '' AS insL7_ETRG, '2012-02-13' AS idFlux", "adr_dep IN (/*03,*/18,23,28,36,37,41,43,44,45,49,53,58,63,69,71,72,79,86,87) AND adr_libVoie<>'' GROUP BY adr_num, adr_btq, adr_typeVoie, adr_libVoie, adr_cp, adr_ville", false, MYSQL_ASSOC, true);
echo date ('Y/m/d - H:i:s')." - Il y a $nbLoaded adresses à mettre à jour...".EOL;
$message='Le '.date('d/m/Y H:i:s')." : $nbLoaded adresses à géocoder".EOL;
//die(mysql_error().EOL);
$tabGeocodeur=array();
while($adr=$iDb->fetch(MYSQL_ASSOC)) {
$nbLignes++;
if (trim($adr['insL7_ETRG'])=='') $pays='France';
else $pays=trim($adr['insL7_ETRG']);
$codeRivoli=$adr['insDEPCOM'].$adr['insCODEVOIE'];
$geo=$imap->geoCodeAdresse($adr['insNUMVOIE'], $adr['insINDREP'], $adr['insTYPVOIE'], $adr['insTYPVOIE'], $adr['insLIBVOIE'], $adr['insCODPOS'], $adr['insLIBCOM'], $pays, $codeRivoli);
echo "$nbLignes/$nbLoaded:".$adr['idFlux'].','.$imap->enCache.':'.$imap->latitudeDec.','.$imap->longitudeDec.' ('.$imap->altitude.' m., p='.$imap->precision.")\t";
echo $adr['insL4_VOIE'].', '.$adr['insCODPOS'].' '.$adr['insLIBCOM'].', '.$pays. ' => ';
echo $imap->adresseValidee.' ('.$imap->geocodeur.')'.EOL;
@$tabGeocodeur[$imap->geocodeur][$imap->enCache]++;
if ($imap->enCache==true) $nbEnCache++;
if ($imap->altitude<>NULL) $nbAlt++;
else {
$nbDistant++;
usleep(100);
}
}
$pct=round($nbEnCache/$nbLignes,3)*100;
$pct2=round($nbAlt/$nbLignes,3)*100;
$message.='Le '.date('d/m/Y H:i:s')." : $nbLignes adresses géocodées du $idFlux au $idFluxFin dont $nbDistant par accès partenaire ($nbEnCache adresses en cache soit $pct %)".EOL;
$message.="$nbAlt adresses ont une altitude connue soit $pct2 %".EOL;
$message.=print_r($tabGeocodeur,true);
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du traitement de géocodage ($idFlux)", $message);
}
if ($doHisto) {
/** Déb à supprimer HISTO : quand l'historique du géocodage sera complet
**/
$nbLignes=$nbEnCache=$nbDistant=$nbAlt=0;
$nbLoaded=$iDb->select($db_table, 'insL4_VOIE, insNUMVOIE, insINDREP, insTYPVOIE, insLIBVOIE, insCODPOS, insLIBCOM, insDEPCOM, insCODEVOIE, insL7_ETRG, idFlux', "idFlux='$idFlux3'", false, MYSQL_ASSOC, true);
echo date ('Y/m/d - H:i:s')." - Il y a $nbLoaded adresses à mettre à jour...".EOL;
$message='Le '.date('d/m/Y H:i:s')." : $nbLoaded adresses à géocoder".EOL;
$tabGeocodeur=array();
while($adr=$iDb->fetch(MYSQL_ASSOC)) {
$nbLignes++;
if (trim($adr['insL7_ETRG'])=='') $pays='France';
else $pays=trim($adr['insL7_ETRG']);
$codeRivoli=$adr['insDEPCOM'].$adr['insCODEVOIE'];
$geo=$imap->geoCodeAdresse($adr['insNUMVOIE'], $adr['insINDREP'], $adr['insTYPVOIE'], $adr['insTYPVOIE'], $adr['insLIBVOIE'], $adr['insCODPOS'], $adr['insLIBCOM'], $pays, $codeRivoli);
echo $adr['idFlux'].','.$imap->enCache.':'.$imap->latitudeDec.','.$imap->longitudeDec.' ('.$imap->precision.")\t";
echo $adr['insL4_VOIE'].', '.$adr['insCODPOS'].' '.$adr['insLIBCOM'].', '.$pays. ' => ';
echo $imap->adresseValidee.' ('.$imap->geocodeur.')'.EOL;
@$tabGeocodeur[$imap->geocodeur][$imap->enCache]++;
if ($imap->enCache==true) $nbEnCache++;
else {
$nbDistant++;
usleep(100);
}
}
$pct=round($nbEnCache/$nbLignes,3)*100;
$pct2=round($nbAlt/$nbLignes,3)*100;
$message.='Le '.date('d/m/Y H:i:s')." : $nbLignes adresses géocodées en histo pour le $idFlux3 dont $nbDistant par accès partenaire ($nbEnCache adresses en cache soit $pct %)".EOL;
$message.="$nbAlt adresses ont une altitude connue soit $pct2 %".EOL;
$message.=print_r($tabGeocodeur,true);
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du traitement de géocodage Histo ($idFlux3)", $message);
/** Fin à supprimer HISTO **/
}
if ($doAltitudes) {
/** Déb à supprimer ALTITUDE : quand toutes les adresses seront altimétriques
**/
$nbLignes=$nbEnCache=$nbDistant=$nbAlt=0;
$nbLoaded=$iDb->select('jo.zonageXY', "address AS insL4_VOIE, adrNum AS insNUMVOIE, adrIndRep AS insINDREP, adrTypeVoie AS insTYPVOIE, adrLibVoie AS insLIBVOIE, adr_cp AS insCODPOS, adr_ville AS insLIBCOM,
SUBSTRING(rivoli,1,5) AS insDEPCOM, SUBSTRING(rivoli,6,5) AS insCODEVOIE, '' AS insL7_ETRG, 0 AS idFlux", "alt IS NULL AND precis>4 LIMIT 80000,40000", false, MYSQL_ASSOC, true);
echo date ('Y/m/d - H:i:s')." - Il y a $nbLoaded adresses sans altitude à mettre à jour...".EOL;
$message='Le '.date('d/m/Y H:i:s')." : $nbLoaded adresses sans altitude".EOL;
$tabGeocodeur=array();
while($adr=$iDb->fetch(MYSQL_ASSOC)) {
$nbLignes++;
if (trim($adr['insL7_ETRG'])=='') $pays='France';
else $pays=trim($adr['insL7_ETRG']);
$codeRivoli=$adr['insDEPCOM'].$adr['insCODEVOIE'];
$geo=$imap->geoCodeAdresse($adr['insNUMVOIE'], $adr['insINDREP'], $adr['insTYPVOIE'], $adr['insTYPVOIE'], $adr['insLIBVOIE'], $adr['insCODPOS'], $adr['insLIBCOM'], $pays, $codeRivoli);
echo $adr['idFlux'].','.$imap->enCache.':'.$imap->latitudeDec.','.$imap->longitudeDec.' ('.$imap->precision.") ".$imap->altitude." m.\t";
echo $adr['insL4_VOIE'].', '.$adr['insCODPOS'].' '.$adr['insLIBCOM'].', '.$pays. ' => ';
echo $imap->adresseValidee.' ('.$imap->geocodeur.')'.EOL;
@$tabGeocodeur[$imap->geocodeur][$imap->enCache]++;
if ($imap->enCache==true) $nbEnCache++;
else {
$nbDistant++;
usleep(100);
}
}
$pct=round($nbEnCache/$nbLignes,3)*100;
$pct2=round($nbAlt/$nbLignes,3)*100;
$message.='Le '.date('d/m/Y H:i:s')." : $nbLignes adresses sans altitude dont $nbDistant par accès partenaire ($nbEnCache adresses en cache soit $pct %)".EOL;
$message.="$nbAlt adresses ont une altitude connue soit $pct2 %".EOL;
$message.=print_r($tabGeocodeur,true);
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du traitement de géocodage/altitude", $message);
/** Fin à supprimer ALTITUDE **/
}
if ($doLamberts) {
/** Déb à supprimer LAMBERT : quand toutes les adresses seront aussi stockées en lambert 93 **/
unset ($imap);
$imap=new MMap(false);
$iDb2=new WDB('jo');
$nbLignes=$nbEnCache=$nbDistant=$nbAlt=0;
$nbLoaded=$iDb->select('jo.zonageXY', "address AS insL4_VOIE, adrNum AS insNUMVOIE, adrIndRep AS insINDREP, adrTypeVoie AS insTYPVOIE, adrLibVoie AS insLIBVOIE, adr_cp AS insCODPOS, adr_ville AS insLIBCOM, SUBSTRING(rivoli,1,5) AS insDEPCOM, SUBSTRING(rivoli,6,5) AS insCODEVOIE, '' AS insL7_ETRG, 0 AS idFlux", "l93_x IS NULL OR l93_y IS NULL", false, MYSQL_ASSOC, true);
echo date ('Y/m/d - H:i:s')." - Il y a $nbLoaded adresses sans Lambert 93 à mettre à jour...".EOL;
$message='Le '.date('d/m/Y H:i:s')." : $nbLoaded adresses sans Lambert 93".EOL;
$tabGeocodeur=array();
while($adr=$iDb->fetch(MYSQL_ASSOC)) {
$nbLignes++;
if (trim($adr['insL7_ETRG'])=='') $pays='France';
else $pays=trim($adr['insL7_ETRG']);
$codeRivoli=$adr['insDEPCOM'].$adr['insCODEVOIE'];
$geo=$imap->geoCodeAdresse($adr['insNUMVOIE'], $adr['insINDREP'], $adr['insTYPVOIE'], $adr['insTYPVOIE'], $adr['insLIBVOIE'], $adr['insCODPOS'], $adr['insLIBCOM'], $pays, $codeRivoli);
echo $adr['idFlux'].','.$imap->enCache.':'.$imap->latitudeDec.','.$imap->longitudeDec.' ('.$imap->precision.")\t";
echo $adr['insL4_VOIE'].', '.$adr['insCODPOS'].' '.$adr['insLIBCOM'].', '.$pays. ' => ';
echo $imap->adresseValidee.' ('.$imap->geocodeur.')'.EOL;
@$tabGeocodeur[$imap->geocodeur][$imap->enCache]++;
if ($imap->enCache==true) $nbEnCache++;
else {
$nbDistant++;
usleep(100);
}
// Conversion WGS84 en Lambert93
$latitude=$imap->latitudeDec;
$longitude=$imap->longitudeDec;
$lambert=geos2lambert93($latitude,$longitude);
$x93=round($lambert['x_93']);
$y93=round($lambert['y_93']);
$tabUpdate=array('l93_x'=>$x93, 'l93_y'=>$y93);
$adresse=addslashes($adr['insL4_VOIE']);
$cp=$adr['insCODPOS'];
$ville=$adr['insLIBCOM'];
$iDb2->update('zonageXY', $tabUpdate, "address='$adresse' AND adr_cp='$cp' AND adr_ville='$ville' LIMIT 1");
}
$pct=round($nbEnCache/$nbLignes,3)*100;
$pct2=round($nbAlt/$nbLignes,3)*100;
$message.='Le '.date('d/m/Y H:i:s')." : $nbLignes adresses converties en Lambert 93 pour le $idFlux3 dont $nbDistant par accès partenaire ($nbEnCache adresses en cache soit $pct %)".EOL;
$message.="$nbAlt adresses ont une altitude connue soit $pct2 %".EOL;
$message.=print_r($tabGeocodeur,true);
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du traitement de géocodage en Lambert 93", $message);
/** Fin à supprimer LAMBERT **/
}
die();
?>