Merge pull request #14 from plumpudding/pr-coord-picker

map: add coordinates picker
This commit is contained in:
Nils Schneider 2016-01-13 11:33:22 +01:00
commit e80e8b2b87
2 changed files with 71 additions and 0 deletions

View File

@ -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*/

View File

@ -2,6 +2,10 @@
paint-order: stroke;
}
.pick-coordinates {
cursor: crosshair;
}
.map {
width: 100%;
height: 100%;