map: add coordinates picker
This commit is contained in:
parent
9215387fbe
commit
f9e8c72508
65
lib/map.js
65
lib/map.js
|
@ -68,6 +68,46 @@ 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 = ""
|
||||||
|
|
||||||
|
L.DomEvent.disableClickPropagation(button)
|
||||||
|
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 () {
|
||||||
|
this.f(!this.active)
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
function mkMarker(dict, iconFunc, router) {
|
function mkMarker(dict, iconFunc, router) {
|
||||||
return function (d) {
|
return function (d) {
|
||||||
var m = L.circleMarker([d.nodeinfo.location.latitude, d.nodeinfo.location.longitude], iconFunc(d))
|
var m = L.circleMarker([d.nodeinfo.location.latitude, d.nodeinfo.location.longitude], iconFunc(d))
|
||||||
|
@ -152,6 +192,13 @@ define(["map/clientlayer", "map/labelslayer",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var showCoordsPickerButton = new CoordsPickerButton(function (d) {
|
||||||
|
if (d)
|
||||||
|
enableCoords()
|
||||||
|
else
|
||||||
|
disableCoords()
|
||||||
|
})
|
||||||
|
|
||||||
function saveView() {
|
function saveView() {
|
||||||
savedView = {center: map.getCenter(),
|
savedView = {center: map.getCenter(),
|
||||||
zoom: map.getZoom()}
|
zoom: map.getZoom()}
|
||||||
|
@ -171,6 +218,23 @@ define(["map/clientlayer", "map/labelslayer",
|
||||||
locateUserButton.set(false)
|
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) {
|
function locationFound(e) {
|
||||||
if (!userLocation)
|
if (!userLocation)
|
||||||
userLocation = new LocationMarker(e.latlng).addTo(map)
|
userLocation = new LocationMarker(e.latlng).addTo(map)
|
||||||
|
@ -228,6 +292,7 @@ define(["map/clientlayer", "map/labelslayer",
|
||||||
map.on("dragend", saveView)
|
map.on("dragend", saveView)
|
||||||
|
|
||||||
addButton(locateUserButton)
|
addButton(locateUserButton)
|
||||||
|
addButton(showCoordsPickerButton)
|
||||||
|
|
||||||
addButton(new AddLayerButton(function () {
|
addButton(new AddLayerButton(function () {
|
||||||
/*eslint no-alert:0*/
|
/*eslint no-alert:0*/
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
paint-order: stroke;
|
paint-order: stroke;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pick-coordinates {
|
||||||
|
cursor: crosshair;
|
||||||
|
}
|
||||||
|
|
||||||
.map {
|
.map {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
Loading…
Reference in a new issue