229 lines
12 KiB
PHP
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();
|
|
?>
|