gpt4 book ai didi

javascript - 关于拖动更新 lat、lng 变量的传单

转载 作者:行者123 更新时间:2023-11-29 20:57:40 24 4
gpt4 key购买 nike

我试图让用户在我的传单 map 上只创建一个标记。这工作正常:

var map = L.map("map").setView([-41.5, 173], 6);
var lat = 0.0;
var lon = 0.0;
var marker;

// on map click: get lat, lon - only allowed to happen once
var onClick = function(e) {
map.off('click', onClick); //turn off listener for map click
marker = L.marker(e.latlng,{icon: pin, draggable: true}).addTo(map);
lat = e.latlng.lat;
lon = e.latlng.lng;
document.getElementById('outlat').innerHTML = e.latlng.lat;
document.getElementById('outlon').innerHTML = e.latlng.lng;
};
map.on('click', onClick); //calling

问题是当单个标记被拖动到新位置时,我需要更新坐标变量。我已经尝试了几种没有运气的方法:

marker.addListener('down', onDrag);
marker.addListener('drag', onDrag);
marker.addListener('dragend', onDrag);

// on drag: update lat and lon
var onDrag = function (e) {
lat = e.latlng.lat;
lon = e.latlng.lng;
document.getElementById('outlat').innerHTML = lat;
document.getElementById('outlon').innerHTML = lon;
};
map.on('down', onDrag);
map.on('dragstart', onDrag);
map.on('dragend', onDrag);

谢谢

最佳答案

  1. 您正在监听 map 上的拖动事件,但您应该监听标记(drag 事件应该足够了):

    var onClick = function(e) {
    // ...

    marker.on('drag', onDrag);
    };
  2. Leaflet 中的拖动事件主要是 base events并且不要公开 latlng 属性。您可以通过 marker.getLatLng() 获取当前坐标:

    var onDrag = function (e) {
    var latlng = marker.getLatLng();
    document.getElementById('outlat').innerHTML = latlng.lat;
    document.getElementById('outlon').innerHTML = latlng.lng;
    };

还有一个演示

var map = L.map("map").setView([-41.5, 173], 6);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

var lat = 0.0;
var lon = 0.0;
var marker;

var onDrag = function (e) {
var latlng = marker.getLatLng();
document.getElementById('outlat').innerHTML = latlng.lat;
document.getElementById('outlon').innerHTML = latlng.lng;
};

var onClick = function(e) {
map.off('click', onClick); //turn off listener for map click
marker = L.marker(e.latlng, {draggable: true}).addTo(map);
lat = e.latlng.lat;
lon = e.latlng.lng;
document.getElementById('outlat').innerHTML = e.latlng.lat;
document.getElementById('outlon').innerHTML = e.latlng.lng;

marker.on('drag', onDrag);
};
map.on('click', onClick);
html, body {
height: 100%;
margin: 0;
}
#map {
width: 100%;
height: 200px;
}

.leaflet-tooltip {
pointer-events: auto
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.js"></script>

<div id='map'></div>
Lat: <span id='outlat'></span>
Lon: <span id='outlon'></span>

关于javascript - 关于拖动更新 lat、lng 变量的传单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48459095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com