从传单定位控件获取坐标
get coordinate from leaflet locate control
我尝试使用定位控件插件提取用户坐标以通过ajax
发送
var startMarker;
var lc = L.control.locate({
position: "topright",
layer: startMarker,
drawCircle: false,
showPopup: false,
markerClass: L.marker,
})
.addTo(mymap);
当标记出现时,我点击通过ajax发送startMarker图层坐标,代码
$("button").on("click", (e) => {
e.preventDefault();
if (startMarker == null) {
alert(`startpoint not defined`);
} else {
$.ajax({
type: "POST",
data: {
startlat: startMarker.getLatLng().lat,
startlng: startMarker.getLatLng().lng,
},
url: "php/find_nearest_path.php",
dataType: "json",
success: dosomething,
error: function () {
alert("failed getting respond from server");
},
});
}
});
但我得到的错误是 alert(`startpoint not defined`);
现在有人知道获取坐标的正确方法吗?
当您将 startMarker
变量传递给 L.control.locate
的 layer
选项(来自 leaflet-locatecontrol plugin)时,它仍然是 undefined
.
因此插件的行为就像您没有向该选项传递任何值一样。在这种情况下,它的默认行为是创建自己的内部图层组。
由于您似乎需要在创建的标记可用后对其进行检查,因此您只需在将变量传递给选项之前将图层组分配给变量即可:
var startMarker = L.layerGroup();
var lc = L.control.locate({
layer: startMarker,
})
.addTo(mymap);
然后在您的情况下,检查该图层组是否有子标记,而不是检查分配:
var locationLayers = startMarker.getLayers();
if (locationLayers.length === 0) {
alert(`startpoint not defined`);
} else {
// Last position should be represented by one of the last layers
// (there may be several layers on same position, should you
// have enabled circle and/or compass)
var positionMarker = locationLayers[locationLayers.length - 1];
// Do something with positionMarker.getLatLng()...
}
话虽如此,正如 Ivan 在问题评论中隐含指出的那样,由于您似乎只需要创建的标记来获取位置坐标,因此您可以从 locationfound 事件中获取。这样,您就不需要检索任何标记。
我尝试使用定位控件插件提取用户坐标以通过ajax
var startMarker;
var lc = L.control.locate({
position: "topright",
layer: startMarker,
drawCircle: false,
showPopup: false,
markerClass: L.marker,
})
.addTo(mymap);
当标记出现时,我点击通过ajax发送startMarker图层坐标,代码
$("button").on("click", (e) => {
e.preventDefault();
if (startMarker == null) {
alert(`startpoint not defined`);
} else {
$.ajax({
type: "POST",
data: {
startlat: startMarker.getLatLng().lat,
startlng: startMarker.getLatLng().lng,
},
url: "php/find_nearest_path.php",
dataType: "json",
success: dosomething,
error: function () {
alert("failed getting respond from server");
},
});
}
});
但我得到的错误是 alert(`startpoint not defined`);
现在有人知道获取坐标的正确方法吗?
当您将 startMarker
变量传递给 L.control.locate
的 layer
选项(来自 leaflet-locatecontrol plugin)时,它仍然是 undefined
.
因此插件的行为就像您没有向该选项传递任何值一样。在这种情况下,它的默认行为是创建自己的内部图层组。
由于您似乎需要在创建的标记可用后对其进行检查,因此您只需在将变量传递给选项之前将图层组分配给变量即可:
var startMarker = L.layerGroup();
var lc = L.control.locate({
layer: startMarker,
})
.addTo(mymap);
然后在您的情况下,检查该图层组是否有子标记,而不是检查分配:
var locationLayers = startMarker.getLayers();
if (locationLayers.length === 0) {
alert(`startpoint not defined`);
} else {
// Last position should be represented by one of the last layers
// (there may be several layers on same position, should you
// have enabled circle and/or compass)
var positionMarker = locationLayers[locationLayers.length - 1];
// Do something with positionMarker.getLatLng()...
}
话虽如此,正如 Ivan 在问题评论中隐含指出的那样,由于您似乎只需要创建的标记来获取位置坐标,因此您可以从 locationfound 事件中获取。这样,您就不需要检索任何标记。