gpt4 book ai didi

javascript - 带有自定义投影的传单 maxBounds

转载 作者:行者123 更新时间:2023-12-02 19:01:57 24 4
gpt4 key购买 nike

我做了简单的传单example 。它渲染程序图 block ,并在每个图 block 上显示位置和缩放。投影和 CRS 配置为将 lat 和 lng 直接映射到 x 和 y,无需在 Zoom=20 时进行任何转换。您可以通过单击 map 并查看带有坐标的弹出窗口来轻松检查这一点。

var naturalZoom = 20;

L.Projection.Direct = {
project: function (latlng) {
return new L.Point(latlng.lat, -latlng.lng);
},

unproject: function (point) {
return new L.LatLng(point.x, -point.y);
}
};

L.CRS.Wall = L.extend({}, L.CRS, {
projection: L.Projection.Direct,
transformation: new L.Transformation(1, 0, -1, 0),

scale: function (zoom) {
return Math.pow(2, zoom-naturalZoom);
}
});

var map = L.map('map', {
crs: L.CRS.Wall,
maxBounds: new L.LatLngBounds([0,0], [4096, 4096])
});
map.setView([0,0], naturalZoom);

我试图限制 map 的边界(取消注释 jsfiddle 示例中代码的第 26 行),但这会破坏整个图层的拖动。有人对自定义 crs 和 maxBounds 有类似的问题吗?这可能是传单库中的错误吗?

感谢您的帮助。

最佳答案

我认为问题是您的 project/unproject 已损坏?无论如何,你不必手动执行任何操作,Leaflet.js 提供了一个 CRS 在 px 和 latlng 之间进行转换,像这样设置你的 map :

var map = L.map('map', {
maxZoom: 20,
minZoom: 20,
crs: L.CRS.Simple
}).setView([0, 0], 20);

然后设置 map 边界(我的图像为 1024x6145):

var southWest = map.unproject([0, 6145], map.getMaxZoom());
var northEast = map.unproject([1024, 0], map.getMaxZoom());
map.setMaxBounds(new L.LatLngBounds(southWest, northEast));

然后您可以通过以下方式添加标记:

var m = {
x: 102, // px coordinates on full sized image
y: 404
}
var marker = L.marker(map.unproject([m.x, m.y], map.getMaxZoom())).addTo(map);

请注意,我们使用 map.unproject 从 px 转换为 latlng。

我写了how to do this in more detail, including how to split up your image但以上内容为您提供了基本要点。

关于javascript - 带有自定义投影的传单 maxBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14718223/

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