switch search plugin, result-dependent zoom

This commit is contained in:
Norbert Renner 2015-03-30 14:53:35 +02:00
parent b808fbe44e
commit 9aa6ede63c
4 changed files with 53 additions and 30 deletions

View file

@ -88,8 +88,8 @@ Copyright (c) 2013 Felix Bache; [MIT License](https://github.com/MrMufflon/Leafl
Copyright (c) 2013, Michael Bostock. All rights reserved.; [3-clause BSD License](https://github.com/mbostock/d3/blob/master/LICENSE) Copyright (c) 2013, Michael Bostock. All rights reserved.; [3-clause BSD License](https://github.com/mbostock/d3/blob/master/LICENSE)
* [Leaflet.draw](https://github.com/Leaflet/Leaflet.draw) * [Leaflet.draw](https://github.com/Leaflet/Leaflet.draw)
Copyright 2012 Jacob Toye; [MIT License](https://github.com/Leaflet/Leaflet.draw/blob/master/MIT-LICENCE.txt) Copyright 2012 Jacob Toye; [MIT License](https://github.com/Leaflet/Leaflet.draw/blob/master/MIT-LICENCE.txt)
* [Leaflet.Control.Search](https://github.com/stefanocudini/leaflet-search) * [Leaflet Control Geocoder](https://github.com/perliedman/leaflet-control-geocoder)
Copyright (c) 2013 Stefano Cudini; [MIT License](https://github.com/stefanocudini/leaflet-search/blob/master/LICENSE.txt) Copyright (c) 2012 [sa3m](https://github.com/sa3m), Copyright (c) 2013 Per Liedman; [2-clause BSD License](https://github.com/perliedman/leaflet-control-geocoder/blob/master/LICENSE)
* [leaflet-plugins](https://github.com/shramov/leaflet-plugins) * [leaflet-plugins](https://github.com/shramov/leaflet-plugins)
Copyright (c) 2011-2012, Pavel Shramov; [2-clause BSD License](https://github.com/shramov/leaflet-plugins/blob/master/LICENSE) Copyright (c) 2011-2012, Pavel Shramov; [2-clause BSD License](https://github.com/shramov/leaflet-plugins/blob/master/LICENSE)
* [Async.js](https://github.com/caolan/async) * [Async.js](https://github.com/caolan/async)

View file

@ -8,7 +8,6 @@
], ],
"dependencies": { "dependencies": {
"leaflet": "~0.7.3", "leaflet": "~0.7.3",
"leaflet-search": "*",
"leaflet-plugins": "~1.3.2", "leaflet-plugins": "~1.3.2",
"leaflet-routing": "Turistforeningen/leaflet-routing#gh-pages", "leaflet-routing": "Turistforeningen/leaflet-routing#gh-pages",
"async": "~0.9.2", "async": "~0.9.2",
@ -16,7 +15,8 @@
"leaflet.draw": "~0.2.3", "leaflet.draw": "~0.2.3",
"bootstrap": "~3.3.4", "bootstrap": "~3.3.4",
"DataTables": "~1.10.5", "DataTables": "~1.10.5",
"Leaflet.Elevation": "MrMufflon/Leaflet.Elevation#master" "Leaflet.Elevation": "MrMufflon/Leaflet.Elevation#master",
"leaflet-control-geocoder": "~1.1.0"
}, },
"overrides": { "overrides": {
"leaflet": { "leaflet": {
@ -26,13 +26,6 @@
"dist/images/*.png" "dist/images/*.png"
] ]
}, },
"leaflet-search": {
"main": [
"dist/leaflet-search.src.js",
"dist/leaflet-search.min.css",
"images/*.+(png|gif)"
]
},
"leaflet-plugins": { "leaflet-plugins": {
"main": [ "main": [
"control/Permalink.js", "control/Permalink.js",
@ -66,6 +59,13 @@
}, },
"Leaflet.Elevation": { "Leaflet.Elevation": {
"dependencies": null "dependencies": null
},
"leaflet-control-geocoder": {
"main": [
"Control.Geocoder.js",
"Control.Geocoder.css",
"images/*.+(png|gif)"
]
} }
} }
} }

View file

@ -26,7 +26,7 @@
var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
minZoom: 5, minZoom: 5,
maxZoom: 15, maxZoom: 16,
attribution: 'tiles &copy; <a target="_blank" href="https://opentopomap.org">OpenTopoMap</a>, <a target="_blank" href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>' attribution: 'tiles &copy; <a target="_blank" href="https://opentopomap.org">OpenTopoMap</a>, <a target="_blank" href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>'
+ ', <a target="_blank" href="http://viewfinderpanoramas.org">SRTM</a>' + ', <a target="_blank" href="http://viewfinderpanoramas.org">SRTM</a>'
}); });
@ -90,15 +90,14 @@
'Hiking (Waymarked Trails)': hiking 'Hiking (Waymarked Trails)': hiking
}).addTo(map); }).addTo(map);
map.addControl(new BR.Search());
// expose map instance for console debugging // expose map instance for console debugging
BR.debug = BR.debug || {}; BR.debug = BR.debug || {};
BR.debug.map = map; BR.debug.map = map;
} }
function initApp() { function initApp() {
var router, var search,
router,
routing, routing,
routesLayer, routesLayer,
routingOptions, routingOptions,
@ -114,6 +113,9 @@
// left sidebar as additional control position // left sidebar as additional control position
map._controlCorners[leftPaneId] = L.DomUtil.create('div', 'leaflet-' + leftPaneId, map._controlContainer); map._controlCorners[leftPaneId] = L.DomUtil.create('div', 'leaflet-' + leftPaneId, map._controlContainer);
search = new BR.Search();
map.addControl(search);
router = L.bRouter(); //brouterCgi dummyRouter router = L.bRouter(); //brouterCgi dummyRouter
function updateRoute(evt) { function updateRoute(evt) {
@ -197,6 +199,7 @@
} }
}); });
routing.on('routing:routeWaypointEnd routing:setWaypointsEnd', function(evt) { routing.on('routing:routeWaypointEnd routing:setWaypointsEnd', function(evt) {
search.clear();
onUpdate(evt && evt.err); onUpdate(evt && evt.err);
}); });

View file

@ -1,18 +1,38 @@
BR.Search = L.Control.Search.extend({ BR.Search = L.Control.Geocoder.extend({
options: { options: {
//url: 'http://nominatim.openstreetmap.org/search?format=json&q={s}', geocoder: new L.Control.Geocoder.Nominatim({
url: 'http://open.mapquestapi.com/nominatim/v1/search.php?format=json&q={s}', serviceUrl: 'https://open.mapquestapi.com/nominatim/v1/'
jsonpParam: 'json_callback', }),
propertyName: 'display_name', position: 'topleft'
propertyLoc: ['lat','lon'],
markerLocation: false,
circleLocation: false,
autoType: false,
autoCollapse: true,
minLength: 2,
zoom: 12
}, },
// patch: interferes with draw plugin (adds all layers twice to map?) onAdd: function (map) {
_onLayerAddRemove: function() {} map.attributionControl.addAttribution('Nominatim Search Courtesy of '
+ '<a href="http://www.mapquest.com/" target="_blank">MapQuest</a>'
+ ' <img src="http://developer.mapquest.com/content/osm/mq_logo.png">');
return L.Control.Geocoder.prototype.onAdd.call(this, map);
},
markGeocode: function(result) {
this._map.fitBounds(result.bbox, {
maxZoom: 17
});
this.clear();
this._geocodeMarker = new L.CircleMarker(result.center, {
clickable: false,
color: 'red',
opacity: 1,
weight: 3
}).addTo(this._map);
return this;
},
clear: function() {
if (this._geocodeMarker) {
this._map.removeLayer(this._geocodeMarker);
}
}
}); });