search: draw a marker highlighting search results (rectangle for region, 10px circle for point)

This commit is contained in:
Jon Atkins 2015-02-11 23:04:08 +00:00
parent 1cc39a099c
commit 39e4608c4e

View File

@ -4,7 +4,7 @@
window.setupGeosearch = function() { window.setupGeosearch = function() {
$('#geosearch').keypress(function(e) { $('#geosearch').keypress(function(e) {
if((e.keyCode ? e.keyCode : e.which) != 13) return; if((e.keyCode ? e.keyCode : e.which) != 13) return;
var search = $(this).val(); var search = $(this).val();
if ( window.search(search) ) return; if ( window.search(search) ) return;
@ -15,36 +15,57 @@ window.setupGeosearch = function() {
map.locate({setView : true, maxZoom: 13}); map.locate({setView : true, maxZoom: 13});
}); });
$('#geosearch').keyup(function(){$(this).removeClass('search_not_found')}); $('#geosearch').keyup(function(){$(this).removeClass('search_not_found')});
window.searchResultLayer = L.layerGroup();
map.addLayer(window.searchResultLayer);
} }
window.search = function(search) { window.search = function(search) {
if (!runHooks('geoSearch', search)) { window.searchResultLayer.clearLayers();
return true;
}
if(search.split(",").length == 2) {
var ll = search.split(",");
if(!isNaN(ll[0]) && !isNaN(ll[1])) {
ll = [parseFloat(ll[0]), parseFloat(ll[1])];
if(ll[0] >= -90 && ll[0] <= 90 && ll[1] >= -180 && ll[1] <= 180) {
window.map.setView(L.latLng(ll[0], ll[1]), 17);
if(window.isSmartphone()) window.show('map');
return true;
}
}
}
$.getJSON(NOMINATIM + encodeURIComponent(search), function(data) { var searchMarkerOptions = {color:'red', weight:3, opacity: 0.5, fill:false, dashArray:"5,5", clickable:false};
if(!data || !data[0]) {
$('#geosearch').addClass('search_not_found');
if (!runHooks('geoSearch', search)) {
return true;
}
if(search.split(",").length == 2) {
var ll = search.split(",");
if(!isNaN(ll[0]) && !isNaN(ll[1])) {
ll = [parseFloat(ll[0]), parseFloat(ll[1])];
if(ll[0] >= -90 && ll[0] <= 90 && ll[1] >= -180 && ll[1] <= 180) {
var ll = L.latLng(ll);
window.map.setView(ll, 17);
window.searchResultLayer.clearLayers();
window.searchResultLayer.addLayer(L.circleMarker(ll,searchMarkerOptions));
if(window.isSmartphone()) window.show('map');
return true; return true;
} }
var b = data[0].boundingbox; }
if(!b) return true; }
var southWest = new L.LatLng(b[0], b[2]),
northEast = new L.LatLng(b[1], b[3]), $.getJSON(NOMINATIM + encodeURIComponent(search), function(data) {
bounds = new L.LatLngBounds(southWest, northEast); if(!data || !data[0]) {
window.map.fitBounds(bounds, {maxZoom: 17}); $('#geosearch').addClass('search_not_found');
if(window.isSmartphone()) window.show('map'); return true;
}); }
var b = data[0].boundingbox;
if(!b) return true;
var southWest = new L.LatLng(b[0], b[2]),
northEast = new L.LatLng(b[1], b[3]),
bounds = new L.LatLngBounds(southWest, northEast);
window.searchResultLayer.clearLayers();
if (southWest.equals(northEast)) {
window.searchResultLayer.addLayer(L.circleMarker(southWest,searchMarkerOptions));
} else {
window.searchResultLayer.addLayer(L.rectangle(bounds,searchMarkerOptions));
}
window.map.fitBounds(bounds, {maxZoom: 17});
if(window.isSmartphone()) window.show('map');
});
} }