Changeset 96515 in spip-zone


Ignore:
Timestamp:
Apr 7, 2016, 1:29:28 PM (4 years ago)
Author:
kent1@…
Message:

Un nouveau geocoder à tester : http://photon.komoot.de/

Pour le moment pas utilisé par défaut, il faut faire un define('_GIS_GEOCODER','photon'); pour l'activer

A tester

Location:
_plugins_/gis/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/trunk/action/gis_geocoder_rechercher.php

    r90130 r96515  
    2222        $arguments = collecter_requests(array("json_callback", "format", "q", "limit", "addressdetails", "accept-language", "lat", "lon"), array());
    2323
    24         if(!empty($arguments)) {
     24        $geocoder = defined('_GIS_GEOCODER') ? _GIS_GEOCODER : 'nominatim';
     25       
     26        if(!empty($arguments) && in_array($geocoder,array('photon','nominatim'))) {
    2527                header('Content-Type: application/json; charset=UTF-8');
    26                 echo recuperer_page("http://nominatim.openstreetmap.org/{$mode}?" . http_build_query($arguments));
     28                if($geocoder == 'photon'){
     29                        if(isset($arguments['accept-language'])){
     30                                $arguments['lang'] = $arguments['accept-language'];
     31                                unset($arguments['accept-language']);
     32                        }
     33                        if($mode == 'search'){
     34                                $mode = '';
     35                        }
     36                        $url = 'http://photon.komoot.de/api/';
     37                }
     38                else{
     39                        $url = 'http://nominatim.openstreetmap.org/';
     40                }
     41                $data = recuperer_page("{$url}{$mode}?" . http_build_query($arguments));
     42                echo $data;
    2743        }
    2844}
  • _plugins_/gis/trunk/javascript/gis_geocoder.js

    r91550 r96515  
    6161                        jsonp: 'json_callback',
    6262                        success: this._callback,
     63                        error:function(e){
     64                                /**
     65                                 * Photon me renvoie une erreur à chaque fois
     66                                 */
     67                                if(e.statusText == "OK" && e.status == "200"){
     68                                        this._callback(e.responseText,e.status,e);
     69                                }
     70                        },
    6371                        url: url
    6472                });
     
    6977                if(this.options.search)
    7078                        return_location.search = this.options.search;
     79                if(typeof response === "string"){
     80                        geocoder_server = 'photon';
     81                        response = JSON.parse(response);
     82                }
    7183                if (((response instanceof Array) && (!response.length)) || ((response instanceof Object) && (response.error))) {
    7284                        return_location.error = 'not found';
     
    7486                        return_location.street = return_location.postcode = return_location.postcode =
    7587                        return_location.locality = return_location.region = return_location.country  = '';
     88                        if(geocoder_server == 'photon'){
     89                                place = response.features[0];
     90                                var street_components = [];
     91                               
     92                                if (place.properties.country) {
     93                                        return_location.country = place.properties.country;
     94                                }
     95                                if (place.properties.country_code) {
     96                                        return_location.country_code = place.properties.country_code;
     97                                }
     98                                if (place.properties.state) {
     99                                        return_location.region = place.properties.state;
     100                                }
     101                                if (place.properties.city) {
     102                                        return_location.locality = place.properties.city;
     103                                } else if (place.properties.town) {
     104                                        return_location.locality = place.properties.town;
     105                                } else if (place.properties.village) {
     106                                        return_location.locality = place.properties.village;
     107                                }else if(place.properties.osm_key == 'place' && (place.properties.osm_value == 'city' || place.properties.osm_value == 'village')){
     108                                        return_location.locality = place.properties.name;
     109                                } else if (place.properties.county) {
     110                                        street_components.push(place.properties.county);
     111                                }
     112                                if (place.properties.postcode) {
     113                                        return_location.postcode = place.properties.postcode;
     114                                }
     115                                if (place.properties.street) {
     116                                        street_components.push(place.properties.street);
     117                                }
     118                                else if (place.properties.road) {
     119                                        street_components.push(place.properties.road);
     120                                } else if (place.properties.pedestrian) {
     121                                        street_components.push(place.properties.pedestrian);
     122                                }
     123                                if (place.properties.housenumber) {
     124                                        street_components.unshift(place.properties.housenumber);
     125                                }
     126                                if (return_location.street === '' && street_components.length > 0) {
     127                                        return_location.street = street_components.join(' ');
     128                                }
     129                                place.lat = place.geometry.coordinates[1];
     130                                place.lon = place.geometry.coordinates[0];
     131                        }
     132                        else{
     133                                if (response.length > 0)
     134                                        place = response[0];
     135                                else {
     136                                        place = response;
     137                                }
    76138
    77                         if (response.length > 0)
    78                                 place = response[0];
    79                         else {
    80                                 place = response;
    81                         }
    82 
    83                         var street_components = [];
    84 
    85                         if (place.address.country) {
    86                                 return_location.country = place.address.country;
    87                         }
    88                         if (place.address.country_code) {
    89                                 return_location.country_code = place.address.country_code;
    90                         }
    91                         if (place.address.state) {
    92                                 return_location.region = place.address.state;
    93                         }
    94                         /* un jour peut-être...
    95                         if (place.address.county) {
    96                                 return_location.departement = place.address.county;
    97                         }
    98                         */
    99                         if (place.address.city) {
    100                                 return_location.locality = place.address.city;
    101                         } else if (place.address.town) {
    102                                 return_location.locality = place.address.town;
    103                         } else if (place.address.village) {
    104                                 return_location.locality = place.address.village;
    105                         } else if (place.address.county) {
    106                                 street_components.push(place.address.county);
    107                         }
    108                         if (place.address.postcode) {
    109                                 return_location.postcode = place.address.postcode;
    110                         }
    111                         if (place.address.road) {
    112                                 street_components.push(place.address.road);
    113                         } else if (place.address.pedestrian) {
    114                                 street_components.push(place.address.pedestrian);
    115                         }
    116                         if (place.address.house_number) {
    117                                 street_components.unshift(place.address.house_number);
    118                         }
    119                         if (return_location.street === '' && street_components.length > 0) {
    120                                 return_location.street = street_components.join(' ');
     139                                var street_components = [];
     140       
     141                                if (place.address.country) {
     142                                        return_location.country = place.address.country;
     143                                }
     144                                if (place.address.country_code) {
     145                                        return_location.country_code = place.address.country_code;
     146                                }
     147                                if (place.address.state) {
     148                                        return_location.region = place.address.state;
     149                                }
     150                                if (place.address.city) {
     151                                        return_location.locality = place.address.city;
     152                                } else if (place.address.town) {
     153                                        return_location.locality = place.address.town;
     154                                } else if (place.address.village) {
     155                                        return_location.locality = place.address.village;
     156                                } else if (place.address.county) {
     157                                        street_components.push(place.address.county);
     158                                }
     159                                if (place.address.postcode) {
     160                                        return_location.postcode = place.address.postcode;
     161                                }
     162                                if (place.address.road) {
     163                                        street_components.push(place.address.road);
     164                                } else if (place.address.pedestrian) {
     165                                        street_components.push(place.address.pedestrian);
     166                                }
     167                                if (place.address.house_number) {
     168                                        street_components.unshift(place.address.house_number);
     169                                }
     170                                if (return_location.street === '' && street_components.length > 0) {
     171                                        return_location.street = street_components.join(' ');
     172                                }
    121173                        }
    122174                        return_location.point = new L.LatLng(place.lat, place.lon);
Note: See TracChangeset for help on using the changeset viewer.