> /etc/php.d/php.ini // /etc/php5/cli/conf.d/ZZ-mycustom.ini < "SET NAMES 'UTF8'")) or die('no db'); $cache = @unserialize(file_get_contents(_GEO_STORE_CACHE)); if(function_exists('pcntl_signal')) { // SIGUSR1 handler to save the result during a run function savecache($signal = FALSE) { global $cache; if($cache) { ksort($cache, SORT_NUMERIC); file_put_contents(_GEO_STORE_CACHE, serialize($cache)); } echo "saved " . count($cache) . " results\n"; if($signal == SIGINT) exit; } declare(ticks = 1); pcntl_signal(SIGUSR1, 'savecache'); pcntl_signal(SIGINT, 'savecache'); echo '$ kill -USR1 ' . posix_getpid() . ' # to flush results to disk' . "\n"; } printf("cache already contains %d entries, will start in 4 seconds:\n", count($cache)); sleep(4); // smooth: $q = "SELECT * FROM coel_structure". " WHERE cs_latitude IS NULL OR cs_latitude = '' OR cs_longitude IS NULL". " OR cs_longitude = ''"; foreach($db->query($q)->fetchAll(PDO::FETCH_ASSOC) AS $params) { $params_override = array('countrycodes' => 'fr,de,ae'); $id = $params['cs_id_structure']; if(array_key_exists($id, $cache)) { $db->query(sprintf("UPDATE coel_structure SET cs_latitude = %.9f, cs_longitude = %.9f WHERE cs_id_structure = %d", $cache[$id]['lat'], $cache[$id]['lon'], $id)); continue; } if(array_key_exists($id, @$cache['failed'])) { if(!DOUBLE_CHECK) continue; // mode texte-libre (plus efficace pour les cas tordus) $params_override['force-q'] = TRUE; // cf (très) mauvaise gestion des CP par Nominatim if($params['cs_ville']) { unset($params['cs_code_postal']); } if($params['cs_adresse_01']) { $params['cs_adresse_01'] = preg_replace( '/.*(?:impasse|chemin|route|rue|avenue|boulevard|place|ville)(?:\s(?:du|des|de)\s)?(la\s)?/i', '', $params['cs_adresse_01']); } } $lonlat = array(); if(Coel::coordGuess(Coel::addrReStruct($params), $lonlat, $params_override)) { unset($cache['failed'][$id]); $lat = $lonlat['lat']; $lon = $lonlat['lon']; $cache[$id] = $lonlat; } else { $cache['failed'][$id] = FALSE; } echo "sleep\n"; sleep(1.5); } if($cache) { ksort($cache, SORT_NUMERIC); file_put_contents(_GEO_STORE_CACHE, serialize($cache)); echo "saved " . count($cache) . " results\n"; } /* raw: $q = "SELECT cs_id_structure AS id, cs_adresse_01 AS addr, cs_code_postal AS cp, cs_ville AS city". " FROM coel_structure". " WHERE cs_latitude IS NULL OR cs_latitude = '' OR cs_longitude IS NULL OR cs_longitude = ''"; $query = http_build_query(array('q' => implode(',',$q),'accept_language' => 'fr', 'format' => 'json', 'limit' => 1)); var_dump( json_decode(file_get_contents('http://nominatim.openstreetmap.org/search.php?' . $query)) ); */