mxn.register('openlayersv2', { Geocoder: { init: function() { }, /** * Note : OpenLayers.Request.GET doesn't work with 2.12 version * @param address */ geocode: function(address, rowlimit){ var me = this; var url = 'https://nominatim.openstreetmap.org/'; var params = { 'addressdetails': 1, 'format': 'json' }; if (address.hasOwnProperty('lat') && address.hasOwnProperty('lon')) { url += 'reverse'; params.lat = address.lat; params.lon = address.lon; } else { url += 'search'; if (!address.hasOwnProperty('address') || address.address === null || address.address === '') { address.address = [ address.street, address.locality, address.region, address.country ].join(', '); } if (address.hasOwnProperty('address')) { params.q = address.address; } else { params.q = address; } params.limit = rowlimit; } OpenLayers.Request.GET({ url: url, params: params, callback: function(response) { if (response.status == 503) { // Service Temporarily Unavailable me.error_callback("Nominatim is temporarily unavailable (were you blocked for excessive use?)"); } else if (response.status != 200) { me.error_callback(response.statusText); } else { me.geocode_callback(JSON.parse(response.responseText)); } } }); }, geocode_callback: function(results){ if (results instanceof Array) { if (!results.length) { this.error_callback("Nominatim didn't recognize this address."); return; } } else { results = [results]; } var place; var places = []; for (i=0; i 0) { return_location.street = street_components.join(' '); } return_location.point = new mxn.LatLonPoint(parseFloat(place.lat), parseFloat(place.lon)); places.push(return_location); } this.callback(places); } } });