Merge pull request #14 from plumpudding/pr-coord-picker
map: add coordinates picker
This commit is contained in:
commit
e80e8b2b87
67
lib/map.js
67
lib/map.js
|
@ -68,6 +68,48 @@ define(["map/clientlayer", "map/labelslayer",
|
|||
}
|
||||
})
|
||||
|
||||
var CoordsPickerButton = L.Control.extend({
|
||||
options: {
|
||||
position: "bottomright"
|
||||
},
|
||||
|
||||
active: false,
|
||||
button: undefined,
|
||||
|
||||
initialize: function (f, options) {
|
||||
L.Util.setOptions(this, options)
|
||||
this.f = f
|
||||
},
|
||||
|
||||
onAdd: function () {
|
||||
var button = L.DomUtil.create("button", "coord-picker")
|
||||
button.textContent = ""
|
||||
|
||||
// Click propagation isn't disabled as this causes problems with the
|
||||
// location picking mode; instead propagation is stopped in onClick().
|
||||
L.DomEvent.addListener(button, "click", this.onClick, this)
|
||||
|
||||
this.button = button
|
||||
|
||||
return button
|
||||
},
|
||||
|
||||
update: function() {
|
||||
this.button.classList.toggle("active", this.active)
|
||||
},
|
||||
|
||||
set: function(v) {
|
||||
this.active = v
|
||||
this.update()
|
||||
},
|
||||
|
||||
onClick: function (e) {
|
||||
L.DomEvent.stopPropagation(e)
|
||||
this.f(!this.active)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
function mkMarker(dict, iconFunc, router) {
|
||||
return function (d) {
|
||||
var m = L.circleMarker([d.nodeinfo.location.latitude, d.nodeinfo.location.longitude], iconFunc(d))
|
||||
|
@ -152,6 +194,13 @@ define(["map/clientlayer", "map/labelslayer",
|
|||
})
|
||||
}
|
||||
|
||||
var showCoordsPickerButton = new CoordsPickerButton(function (d) {
|
||||
if (d)
|
||||
enableCoords()
|
||||
else
|
||||
disableCoords()
|
||||
})
|
||||
|
||||
function saveView() {
|
||||
savedView = {center: map.getCenter(),
|
||||
zoom: map.getZoom()}
|
||||
|
@ -171,6 +220,23 @@ define(["map/clientlayer", "map/labelslayer",
|
|||
locateUserButton.set(false)
|
||||
}
|
||||
|
||||
function enableCoords() {
|
||||
map.getContainer().classList.add("pick-coordinates")
|
||||
map.on("click", showCoordinates)
|
||||
showCoordsPickerButton.set(true)
|
||||
}
|
||||
|
||||
function disableCoords() {
|
||||
map.getContainer().classList.remove("pick-coordinates")
|
||||
map.off("click", showCoordinates)
|
||||
showCoordsPickerButton.set(false)
|
||||
}
|
||||
|
||||
function showCoordinates(e) {
|
||||
window.prompt("Koordinaten (Lat, Lng)", e.latlng.lat.toFixed(6) + ", " + e.latlng.lng.toFixed(6))
|
||||
disableCoords()
|
||||
}
|
||||
|
||||
function locationFound(e) {
|
||||
if (!userLocation)
|
||||
userLocation = new LocationMarker(e.latlng).addTo(map)
|
||||
|
@ -228,6 +294,7 @@ define(["map/clientlayer", "map/labelslayer",
|
|||
map.on("dragend", saveView)
|
||||
|
||||
addButton(locateUserButton)
|
||||
addButton(showCoordsPickerButton)
|
||||
|
||||
addButton(new AddLayerButton(function () {
|
||||
/*eslint no-alert:0*/
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
paint-order: stroke;
|
||||
}
|
||||
|
||||
.pick-coordinates {
|
||||
cursor: crosshair;
|
||||
}
|
||||
|
||||
.map {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
|
Loading…
Reference in a new issue