Changeset 91347 in spip-zone


Ignore:
Timestamp:
Aug 14, 2015, 12:19:44 PM (4 years ago)
Author:
brunobergot@…
Message:

Version 4.28.0 : utiliser le geocoder nominatim pour les exifs/iptc des images

  • exit google, on se branche sur le geocoder nominatim et on utilise du json pour simplifier le code
  • un peu de mise en forme
  • ajout de nominatim aux crédits et maj du copyright
Location:
_plugins_/gis/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/trunk/gis_pipelines.php

    r91218 r91347  
    9292                AND (in_array(table_objet_sql('document'), lire_config('gis/gis_objets', array())))
    9393        ) {
    94                 if(in_array($document['extension'],array('jpg','kml','kmz'))){
     94                if (in_array($document['extension'],array('jpg','kml','kmz'))) {
    9595                        $config = @unserialize($GLOBALS['meta']['gis']);
    96                         if(!is_array($config))
     96                        if (!is_array($config))
    9797                                $config = array();
    9898                        include_spip('inc/documents');
     
    103103                        // on recupere les coords definies dans les exif du document s'il y en a
    104104                        if (function_exists('exif_read_data') AND $exifs =  @exif_read_data($fichier,'GPS')) {
    105                                 if(!function_exists('dms_to_dec'))
     105                                if (!function_exists('dms_to_dec'))
    106106                                        include_spip('gis_fonctions');
    107107                                spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier","gis");
    108108                               
    109109                                $LatDeg = explode("/",$exifs["GPSLatitude"][0]);
    110                                 if(is_numeric($LatDeg[1]) > 0)
     110                                if (is_numeric($LatDeg[1]) > 0)
    111111                                        $intLatDeg = $LatDeg[0]/$LatDeg[1];
    112112
    113113                                $LatMin = explode("/",$exifs["GPSLatitude"][1]);
    114                                 if(is_numeric($LatMin[1]) > 0)
     114                                if (is_numeric($LatMin[1]) > 0)
    115115                                        $intLatMin = $LatMin[0]/$LatMin[1];
    116116
    117117                                $LatSec = explode("/",$exifs["GPSLatitude"][2]);
    118                                 if(is_numeric($LatSec[1]) > 0)
     118                                if (is_numeric($LatSec[1]) > 0)
    119119                                        $intLatSec = $LatSec[0]/$LatSec[1];
    120120
    121121                                $LongDeg = explode("/",$exifs["GPSLongitude"][0]);
    122                                 if(is_numeric($LongDeg[1]) > 0)
     122                                if (is_numeric($LongDeg[1]) > 0)
    123123                                        $intLongDeg = $LongDeg[0]/$LongDeg[1];
    124124
    125125                                $LongMin = explode("/",$exifs["GPSLongitude"][1]);
    126                                 if(is_numeric($LongMin[1]) > 0)
     126                                if (is_numeric($LongMin[1]) > 0)
    127127                                        $intLongMin = $LongMin[0]/$LongMin[1];
    128128
    129129                                $LongSec = explode("/",$exifs["GPSLongitude"][2]);
    130                                 if(is_numeric($LongSec[1]) > 0)
     130                                if (is_numeric($LongSec[1]) > 0)
    131131                                        $intLongSec = $LongSec[0]/$LongSec[1];
    132132
    133133                                // round to 5 = approximately 1 meter accuracy
    134                                 if(is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec))
     134                                if (is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec))
    135135                                        $latitude = round(dms_to_dec($exifs["GPSLatitudeRef"],
    136136                                                $intLatDeg,$intLatMin,$intLatSec),5);
    137137
    138                                 if(is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec))
     138                                if (is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec))
    139139                                        $longitude =  round(dms_to_dec($exifs["GPSLongitudeRef"],
    140140                                                $intLongDeg,$intLongMin,$intLongSec), 5);
    141                                 if($config['geocoder'] == 'on'){
    142                                         include_spip('inc/xml');
    143                                         $url_geocoder = 'http://maps.googleapis.com/maps/api/geocode/xml?latlng='.urlencode($latitude).','.urlencode($longitude).'&sensor=true';
    144                                         $geocoder = spip_xml_load($url_geocoder);
    145                                         spip_xml_match_nodes(',result,',$geocoder,$matches_adress);
    146                                         if(is_array($matches_adress['result'])){
    147                                                 foreach($matches_adress['result'] as $component){
    148                                                         if(in_array('country',$component['type'])){
    149                                                                 $pays = $component['address_component'][0]['long_name'][0];
    150                                                                 $code_pays = $component['address_component'][0]['short_name'][0];
    151                                                         }
    152                                                         if(in_array('administrative_area_level_1',$component['type'])){
    153                                                                 $region = $component['address_component'][0]['long_name'][0];
    154                                                         }
    155                                                         if(in_array('administrative_area_level_2',$component['type'])){
    156                                                                 $departement = $component['address_component'][0]['long_name'][0];
    157                                                         }
    158                                                         if(in_array('locality',$component['type'])){
    159                                                                 $ville = $component['address_component'][0]['long_name'][0];
    160                                                         }
    161                                                         if(in_array('postal_code',$component['type'])){
    162                                                                 $code_postal = $component['address_component'][0]['long_name'][0];
    163                                                         }
    164                                                         if(in_array('route',$component['type'])){
    165                                                                 $adresse = $component['address_component'][0]['long_name'][0];
    166                                                         }
     141                                if ($config['geocoder'] == 'on') {
     142                                        include_spip('inc/distant');
     143                                        $url_geocoder = 'http://nominatim.openstreetmap.org/reverse/?format=xml&addressdetails=1&accept-language='.urlencode($GLOBALS['meta']['langue_site']).'&lat='.urlencode($latitude).'&lon='.urlencode($longitude);
     144                                        $json = recuperer_page($url_geocoder);
     145                                        $geocoder = json_decode($json,true);
     146                                        if (is_array($geocoder)) {
     147                                                $pays = $geocoder['address']['country'];
     148                                                $code_pays = $geocoder['address']['country_code'];
     149                                                $region = $geocoder['address']['state'];
     150                                                if ($geocoder['address']['city']) {
     151                                                        $ville = $geocoder['address']['city'];
     152                                                } else if ($geocoder['address']['town']) {
     153                                                        $ville = $geocoder['address']['town'];
     154                                                } else if ($geocoder['address']['village']) {
     155                                                        $ville = $geocoder['address']['village'];
    167156                                                }
     157                                                $code_postal = $geocoder['address']['postcode'];
     158                                                $adresse = $geocoder['address']['road'];
    168159                                        }
    169160                                }
    170                         }else if(file_exists($fichier)){
     161                        } else if (file_exists($fichier)) {
    171162                                include_spip("inc/iptc");
    172163
     
    176167                                $string_recherche = '';
    177168                               
    178                                 if($iptc['city']){
     169                                if ($iptc['city']) {
    179170                                        $string_recherche .= $iptc['city'].', ';
    180171                                }
    181                                 if($iptc['provinceState']){
     172                                if ($iptc['provinceState']) {
    182173                                        $string_recherche .= $iptc['provinceState'].', ';
    183174                                }
    184                                 if($iptc['country']){
     175                                if ($iptc['country']) {
    185176                                        $string_recherche .= $iptc['country'];
    186177                                }
    187                                 if(strlen($string_recherche)){
    188                                         include_spip('inc/xml');
    189                                         $url_geocoder = 'http://maps.googleapis.com/maps/api/geocode/xml?address='.urlencode($string_recherche).'&sensor=true';
    190                                         $geocoder = spip_xml_load($url_geocoder);
    191                                         if(is_array($geocoder)){
    192                                                 spip_xml_match_nodes(',location,',$geocoder,$matches);
    193                                                 $latitude = $matches['location']['0']['lat']['0'];
    194                                                 $longitude = $matches['location']['0']['lng']['0'];
    195                                                 if($config['adresse'] == 'on'){
    196                                                         spip_xml_match_nodes(',address_component,',$geocoder,$matches_adress);
    197                                                         if(is_array($matches_adress['address_component'])){
    198                                                                 foreach($matches_adress['address_component'] as $component){
    199                                                                         if(in_array('country',$component['type'])){
    200                                                                                 $pays = $component['long_name'][0];
    201                                                                                 $code_pays = $component['short_name'][0];
    202                                                                         }
    203                                                                         if(in_array('administrative_area_level_1',$component['type'])){
    204                                                                                 $region = $component['long_name'][0];
    205                                                                         }
    206                                                                         if(in_array('administrative_area_level_2',$component['type'])){
    207                                                                                 $departement = $component['long_name'][0];
    208                                                                         }
    209                                                                         if(in_array('locality',$component['type'])){
    210                                                                                 $ville = $component['long_name'][0];
    211                                                                         }
    212                                                                 }
     178                                if (strlen($string_recherche)) {
     179                                        include_spip('inc/distant');
     180                                        $url_geocoder = 'http://nominatim.openstreetmap.org/search/?format=json&addressdetails=1&limit=1&accept-language='.urlencode($GLOBALS['meta']['langue_site']).'&q='.urlencode($string_recherche);
     181                                        $json = recuperer_page($url_geocoder);
     182                                        $geocoder = json_decode($json,true);
     183                                        if (is_array($geocoder[0])) {
     184                                                $latitude = $geocoder[0]['lat'];
     185                                                $longitude = $geocoder[0]['lon'];
     186                                                if ($config['adresse'] == 'on') {
     187                                                        $pays = $geocoder[0]['address']['country'];
     188                                                        $code_pays = $geocoder[0]['address']['country_code'];
     189                                                        $region = $geocoder[0]['address']['state'];
     190                                                        if ($geocoder[0]['address']['city']) {
     191                                                                $ville = $geocoder[0]['address']['city'];
     192                                                        } else if ($geocoder[0]['address']['town']) {
     193                                                                $ville = $geocoder[0]['address']['town'];
     194                                                        } else if ($geocoder[0]['address']['village']) {
     195                                                                $ville = $geocoder[0]['address']['village'];
    213196                                                        }
    214197                                                }
     
    216199                                }
    217200                        }
    218                         if(is_numeric($latitude) && is_numeric($longitude)){
     201                        if (is_numeric($latitude) && is_numeric($longitude)) {
    219202                                $c = array(
    220203                                        'titre' => basename($fichier),
     
    238221                                include_spip('action/editer_gis');
    239222       
    240                                 if($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT  JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")){
     223                                if ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT  JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")) {
    241224                                        // Des coordonnées sont déjà définies pour ce document => on les update
    242225                                        revisions_gis($id_gis,$c);
    243226                                        spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
    244                                 }
    245                                 else{
     227                                } else {
    246228                                        // Aucune coordonnée n'est définie pour ce document  => on les crées
    247229                                        $id_gis = insert_gis();
     
    251233                                }
    252234                        }
    253                 }elseif(in_array($document['extension'],array('kml','kmz','gpx'))){
     235                } elseif (in_array($document['extension'],array('kml','kmz','gpx'))) {
    254236                        $recuperer_info = charger_fonction('kml_infos','inc');
    255237                        $infos = $recuperer_info($document['id_document']);
    256                         if($infos){
    257                                 if(is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])){
     238                        if ($infos) {
     239                                if (is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])) {
    258240                                        $c = array(
    259241                                                'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier),
     
    266248                                        include_spip('action/editer_gis');
    267249               
    268                                         if($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT  JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")){
     250                                        if ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT  JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")) {
    269251                                                // Des coordonnées sont déjà définies pour ce document => on les update
    270252                                                revisions_gis($id_gis,$c);
    271253                                                spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
    272                                         }
    273                                         else{
     254                                        } else {
    274255                                                // Aucune coordonnée n'est définie pour ce document  => on les crées
    275256                                                $id_gis = insert_gis();
     
    281262                                unset($infos['longitude']);
    282263                                unset($infos['latitude']);
    283                                 if(count($infos) > 0){
     264                                if (count($infos) > 0) {
    284265                                        include_spip('action/editer_document');
    285266                                        document_modifier($id_document, $infos);
  • _plugins_/gis/trunk/paquet.xml

    r91218 r91347  
    22        prefix="gis"
    33        categorie="divers"
    4         version="4.27.1"
     4        version="4.28.0"
    55        schema="2.0.7"
    66        etat="stable"
     
    2121        <credit lien="https://github.com/brunob/leaflet.fullscreen">Leaflet fullscreen</credit>
    2222        <credit lien="https://github.com/Norkart/Leaflet-MiniMap">Leaflet minimap</credit>
    23         <copyright>2011-2014</copyright>
     23        <credit lien="http://wiki.openstreetmap.org/wiki/Nominatim">Nominatim</credit>
     24        <credit lien="http://mattrich.deviantart.com/art/Picnic-101256405">Icône de mattrich sous licence CC BY-NC-SA</credit>
     25        <copyright>2011-2015</copyright>
    2426        <licence>GPL v3</licence>
    25         <credit lien="http://mattrich.deviantart.com/art/Picnic-101256405">Icône de mattrich sous licence CC BY-NC-SA</credit>
    2627
    2728        <traduire module="gis" reference="fr" gestionnaire="salvatore" />
Note: See TracChangeset for help on using the changeset viewer.