javascript - Leaflet/JS:在平移/缩放后添加折线
问题描述
我正在使用 Leaflet 地图作为图像查看器,并且我正在尝试添加一个“切换十字准线”功能,该功能将在图像中心放置一个十字准线。我已经让它工作到了十字准线正确出现的程度,并且在进行平移/缩放时与图像“耦合”,这是我期望看到的。
我遇到的问题是,如果我先进行平移/缩放,然后切换十字准线,十字准线会出现在“窗口”的中心,而不是图像的中心。
我为此使用的代码在这里:
toggleCrosshair(toggleVal) {
let map = this.map;
if (toggleVal == true) {
var north = map.getBounds().getNorth(); // these are in lat, lng
var south = map.getBounds().getSouth();
var east = map.getBounds().getEast();
var west = map.getBounds().getWest();
var center = map.getCenter();
var latlngHorizontalLeft = new L.latLng(center.lat, west);
var latlngHorizontalRight = new L.latLng(center.lat, east);
var horizLineList = [latlngHorizontalLeft, latlngHorizontalRight];
let horizLine = new L.Polyline(horizLineList, {
color: 'red',
weight: 2,
opacity: 0.5,
smoothFactor: 1
});
var latlngVerticalTop = new L.latLng(north, center.lng);
var latlngVerticalBottom = new L.latLng(south, center.lng);
var vertLineList = [latlngVerticalTop, latlngVerticalBottom];
let vertLine = new L.Polyline(vertLineList, {
color: '#A5CE3A',
weight: 2,
opacity: 0.5,
smoothFactor: 1
});
horizLine.addTo(map);
vertLine.addTo(map);
} else {
var i;
for (i in map._layers) {
if (map._layers[i].options.color == '#A5CE3A') {
try {
map.removeLayer(map._layers[i]);
} catch (e) {
console.log("problem with " + e + map._layers[i]);
}
} else if (map._layers[i].options.color == 'red') {
try {
map.removeLayer(map._layers[i]);
} catch (e) {
console.log("problem with " + e + map._layers[i]);
}
}
}
}
}
有人对如何获得我希望的行为有任何提示吗?谢谢!
解决方案
map.getBounds() 只为您提供当前地图视图中可见的地理范围。
简而言之,无论您在屏幕上看到什么。
将其设置为实际的中心 lat lng 坐标。
推荐阅读
- android - 为什么在 ubuntu 中运行 Android Virtual Device 如此滞后?
- c++ - 您如何允许逗号用于基于整数的输入 c++ 的用户输入?
- excel - 关闭源文件时,无法在 for 循环中重用内容
- java - before 方法中的给定方法运行两次。为第一个捕获 null 并为第二次捕获字符串参数
- javascript - 如何在 VS Code 中禁用自动换行符?
- excel - 如何对特定行进行计算?
- flutter - flutter firebase身份验证FirebaseUser问题
- reactjs - React 导入样式中的 SCSS @import mixin
- matlab - 格雷码模式看起来像二进制模式。这个对吗?
- python-3.x - 如何检测两个检测到的窗口之间的可用空间