[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / gis / javascript / gis_geocoder.js
index 1494d32..3eec60d 100644 (file)
@@ -36,7 +36,7 @@ L.Geocoder = L.Class.extend({
                                q: text,
                                limit: this.options.limit,
                                addressdetails: this.options.addressdetails,
-                               "accept-language":this.options.acceptLanguage
+                               'accept-language': this.options.acceptLanguage
                        }
                );
        },
@@ -60,66 +60,126 @@ L.Geocoder = L.Class.extend({
                        dataType: 'jsonp',
                        jsonp: 'json_callback',
                        success: this._callback,
+                       error: function (e) {
+                               /**
+                                * Photon me renvoie une erreur à chaque fois
+                                */
+                               if (e.statusText == 'OK' && e.status == '200') {
+                                       this._callback(e.responseText,e.status,e);
+                               }
+                       },
                        url: url
                });
        },
        
-       _callback: function (response,textStatus,jqXHR) {
-               var return_location = {};
-               if(this.options.search)
+       _callback: function (response, textStatus, jqXHR) {
+               var return_location = {},
+                       geocoder_server = false;
+               if (this.options.search) {
                        return_location.search = this.options.search;
+               }
+               if (typeof response === 'string') {
+                       geocoder_server = 'photon';
+                       response = JSON.parse(response);
+               }
                if (((response instanceof Array) && (!response.length)) || ((response instanceof Object) && (response.error))) {
                        return_location.error = 'not found';
                } else {
                        return_location.street = return_location.postcode = return_location.postcode = 
                        return_location.locality = return_location.region = return_location.country  = '';
+                       if (geocoder_server == 'photon') {
+                               if (!response.features.length || response.features.length == 0) {
+                                       return_location.error = 'not found';
+                               }
+                               else {
+                                       place = response.features[0];
+                                       var street_components = [];
 
-                       if (response.length > 0)
-                               place = response[0];
-                       else {
-                               place = response;
+                                       if (place.properties.country) {
+                                               return_location.country = place.properties.country;
+                                       }
+                                       if (place.properties.country_code) {
+                                               return_location.country_code = place.properties.country_code;
+                                       }
+                                       if (place.properties.state) {
+                                               return_location.region = place.properties.state;
+                                       }
+                                       if (place.properties.city) {
+                                               return_location.locality = place.properties.city;
+                                       } else if (place.properties.town) {
+                                               return_location.locality = place.properties.town;
+                                       } else if (place.properties.village) {
+                                               return_location.locality = place.properties.village;
+                                       } else if (place.properties.osm_key == 'place' && (place.properties.osm_value == 'city' || place.properties.osm_value == 'village')) {
+                                               return_location.locality = place.properties.name;
+                                       } else if (place.properties.county) {
+                                               street_components.push(place.properties.county);
+                                       }
+                                       if (place.properties.postcode) {
+                                               return_location.postcode = place.properties.postcode;
+                                       }
+                                       if (place.properties.street) {
+                                               street_components.push(place.properties.street);
+                                       }
+                                       else if (place.properties.road) {
+                                               street_components.push(place.properties.road);
+                                       } else if (place.properties.pedestrian) {
+                                               street_components.push(place.properties.pedestrian);
+                                       }
+                                       if (place.properties.housenumber) {
+                                               street_components.unshift(place.properties.housenumber);
+                                       }
+                                       if (return_location.street === '' && street_components.length > 0) {
+                                               return_location.street = street_components.join(' ');
+                                       }
+                                       place.lat = place.geometry.coordinates[1];
+                                       place.lon = place.geometry.coordinates[0];
+                                       return_location.point = new L.LatLng(place.lat, place.lon);
+                               }
                        }
+                       else {
+                               if (response.length > 0)
+                                       place = response[0];
+                               else {
+                                       place = response;
+                               }
 
-                       var street_components = [];
-
-                       if (place.address.country) {
-                               return_location.country = place.address.country;
-                       }
-                       if (place.address.country_code) {
-                               return_location.country_code = place.address.country_code;
-                       }
-                       if (place.address.state) {
-                               return_location.region = place.address.state;
-                       }
-                       /* un jour peut-être...
-                       if (place.address.county) {
-                               return_location.departement = place.address.county;
-                       }
-                       */
-                       if (place.address.city) {
-                               return_location.locality = place.address.city;
-                       } else if (place.address.town) {
-                               return_location.locality = place.address.town;
-                       } else if (place.address.village) {
-                               return_location.locality = place.address.village;
-                       } else if (place.address.county) {
-                               street_components.push(place.address.county);
-                       }
-                       if (place.address.postcode) {
-                               return_location.postcode = place.address.postcode;
-                       }
-                       if (place.address.road) {
-                               street_components.push(place.address.road);
-                       } else if (place.address.pedestrian) {
-                               street_components.push(place.address.pedestrian);
-                       }
-                       if (place.address.house_number) {
-                               street_components.unshift(place.address.house_number);
-                       }
-                       if (return_location.street === '' && street_components.length > 0) {
-                               return_location.street = street_components.join(' ');
+                               var street_components = [];
+       
+                               if (place.address.country) {
+                                       return_location.country = place.address.country;
+                               }
+                               if (place.address.country_code) {
+                                       return_location.country_code = place.address.country_code;
+                               }
+                               if (place.address.state) {
+                                       return_location.region = place.address.state;
+                               }
+                               if (place.address.city) {
+                                       return_location.locality = place.address.city;
+                               } else if (place.address.town) {
+                                       return_location.locality = place.address.town;
+                               } else if (place.address.village) {
+                                       return_location.locality = place.address.village;
+                               } else if (place.address.county) {
+                                       street_components.push(place.address.county);
+                               }
+                               if (place.address.postcode) {
+                                       return_location.postcode = place.address.postcode;
+                               }
+                               if (place.address.road) {
+                                       street_components.push(place.address.road);
+                               } else if (place.address.pedestrian) {
+                                       street_components.push(place.address.pedestrian);
+                               }
+                               if (place.address.house_number) {
+                                       street_components.unshift(place.address.house_number);
+                               }
+                               if (return_location.street === '' && street_components.length > 0) {
+                                       return_location.street = street_components.join(' ');
+                               }
+                               return_location.point = new L.LatLng(place.lat, place.lon);
                        }
-                       return_location.point = new L.LatLng(place.lat, place.lon);
                }
                this._user_callback(return_location);
        }