Deps:
jquery jquery ui openlayers
Deps:
jquery jquery ui openlayers
function installSearch() { | |
$("#search>#query").autocomplete({ | |
source: function (request, response) { | |
var query = request.term; | |
Utils.searchAddress(query, function(places) { | |
response(places.map(function(place) { | |
return { | |
label: place["display_name"], | |
value: place["display_name"], | |
option: { | |
lat: +place["lat"], | |
lon: +place["lon"] | |
} | |
}; | |
})); | |
}); | |
}, | |
select: function(event, ui) { | |
var lat = ui.item.option.lat; | |
var lon = ui.item.option.lon; | |
map.setCenter( | |
new OpenLayers.LonLat(lon, lat) | |
.transform(map.displayProjection, map.projection)); | |
return false; | |
} | |
}); | |
} |
<div id="search"> | |
<input id="query" type="text" style="width:100%;" placeholder="Введите запрос..."></input> | |
</div> |
"use strict"; | |
window.Utils = { | |
searchAddress: function(address, cb) { | |
$.ajax({ | |
url: "http://nominatim.openstreetmap.org/search", | |
data: { | |
format: "json", | |
q: address, | |
addressdetails: 1, | |
limit: 10, | |
countrycodes: "ru" | |
}, | |
global: false, | |
success: function(data) { | |
cb(data); | |
}, | |
error: function() { | |
cb(null); | |
} | |
}); | |
}, | |
}; |