<php>

class GeoCodage { public static $DEBUG = false ; public $agentEmail = 'cgiquello@openstreetmap.fr' ; public function &geoCode($address, array $countrycodes = null) {

if( self::$DEBUG )
 echo 'geoCode: address: '.$address.'<br/>';
$data = array();
//$data['google'] = self::geoCode_Google($address);
$data['nominatim'] = $this->geoCode_Nominatim($address, $countrycodes);
return $data ;

} public function &geoCode_Nominatim( $address, array $countrycodes = null){

if( self::$DEBUG )
 echo 'Nominatim: address: '.$address.'<br/>';
$url = 'http://nominatim.openstreetmap.org/search/?q='
  .urlencode($address)
  .'&format=json'.'&email='.urlencode($this->agentEmail);
if( $countrycodes != null )
 $url .= '&countrycodes='.implode(',',$countrycodes);
$get = file_get_contents($url);
if( self::$DEBUG )
 echo 'Nominatim: result: '.print_r($get,true).'<br/>';
$results = json_decode($get);
if( is_array($results) && count($results)>0 ){
 $data = array(
  'lat' => $results[0]->lat,
  'lon' => $results[0]->lon
 );
}
else {
 $data = array(
  'lat' =>0,
  'lon' => 0
 );
}
return $data;

} public function &geoCode_Google($address) {

 if( self::$DEBUG )
  echo 'Google: address: '.$address.'<br/>';
  $url = 'http://maps.google.com/maps/geo?q=' . urlencode($address) . '&output=csv&sensor=false';
  $get = file_get_contents($url);
  if( self::$DEBUG )
   echo 'Google: result: '.print_r($get,true).'<br/>';
   $records = explode(',', $get);
   $data = array(
    'lat' => $records['2'],
    'lon' => $records['3']
   );
return $data;

} }

$dataPluginFile = DOKU_PLUGIN.'data/syntax/table.php'; if(!file_exists($dataPluginFile)){ msg('Cannot find Data plugin.', -1); } require_once $dataPluginFile; $pdt = new syntax_plugin_data_table();

$data = array( 'classes' ⇒ 'association', 'limit' ⇒ 0, 'dynfilters' ⇒ false, 'summarize' ⇒ false, 'rownumbers' ⇒ false, 'sepbyheaders' ⇒ false, 'headers' ⇒ array(), 'widths' ⇒ array(), 'filter' ⇒ array() ); $dthlp = $pdt→dthlp ; $column = $dthlp→_column('%pageid%');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('nom');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('lat');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('lon');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('adresse1');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('adresse2');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('adresse3');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('codepostal');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('ville');$data['cols'][$column['key']] = $column; $column = $dthlp→_column('web');$data['cols'][$column['key']] = $column;

$sql = $pdt→_buildSQL($data); $sqlite = $dthlp→_getDB(); $res = $sqlite→query($sql); $rows = $sqlite→res2arr($res); $rowsCount = count($rows);

$geocodepage = ; if( isset($_REQUEST['geocodepage']) && strlen(trim($_REQUEST['geocodepage']))>0 ) { $geocodepage = trim($_REQUEST['geocodepage']); } echo '<br/>geocodepage: ' .$geocodepage ; function getOsmUrl($lat,$lon) { return 'http://www.openstreetmap.org?mlat='.$lat.'&mlon='.$lon.'#map=17/'.$lat.'/'.$lon ; } foreach( $rows as $n ⇒ $row ){ list($pageid, $nom, $lat, $lon, $adr1, $adr2, $adr3, $cp, $ville, $web) = array_values($row); $addr = $adr1.', '.$adr2.', '.$adr3.','.$cp.','.$ville ; echo '<p>', '<a href=“/',$pageid,'”>',$nom,'</a> ', $addr; echo '<br/>sur le Wiki: <a href=“'.getOsmUrl($lat,$lon).'” target=“_blank”>',$lon,' ',$lat ,'</a> - <a href=“?geocodepage='.$pageid.'”>geocodage</a>' ; if( $geocodepage == trim($pageid) ){ sans le code postal (pour Nominatim) $addr = $adr1 ; $addr.= strlen(trim($adr2))>0 ? ','.$adr2 : ; $addr.= strlen(trim($adr3))>0 ? ','.$adr3 : ; $addr.= $ville ; GeoCodage::$DEBUG = true ; $geoCod = new GeoCodage(); $geodata = $geoCod→geoCode( $addr, array('FR') ); $geo = $geodata['nominatim']; if( $geo['lon']==0 || $geo['lat'] == 0 ) $color='red'; else if( $geo['lon']!=$lon || $geo['lat']!=$lat ) $color='orange'; else $color='green'; echo '<br/>sur le Nominatim: <a href=“'.getOsmUrl($geo['lat'],$geo['lon']).'” style=“color: '.$color.'” target=“_blank”>',$geo['lon'],' ',$geo['lat'] ,'</a>' ; if( $geo['lon']==0 || $geo['lat'] == 0 ){ $geo = $geodata['google']; echo '<br/><span style=“color: '.$color.'”>'.$geo['lat'].';'.$geo['lon'].“</class>\n”; } } echo '</p>'; } </php>