【发布时间】:2023-03-17 20:50:02
【问题描述】:
为了维护我为游戏社区挑选的社区项目,我试图了解传单的工作原理。特别是,我正在尝试使用自定义图块服务显示非地理地图。
根据传单文档以及一系列教程和 stackoverflow 答案,我能想到的最好的代码是以下代码。标记被添加到 [0,0] 和 [maxLat, maxLong] 以验证它们是否与地图对齐(我试图在我的项目中解决的问题是它们不是):
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
crossorigin=""></script>
<style>
#map { height: 1080px; width: 1920px; }
</style>
</head>
<body>
<div id="map"></div>
<script>
var yx = L.latLng;
var xy = function(x, y) {
if (L.Util.isArray(x)) {
return yx(x[1], x[0]);
}
return yx(y, x);
};
var minZoom = 0;
var maxZoom = 7;
var img = [
18475,
12791
];
L.CRS.MySimple = L.extend({}, L.CRS.Simple, {
transformation: new L.Transformation(1 / 128, 0, 1 / 128, 0)
});
var bounds = [xy(0, 0), xy(img)];
var map = L.map("map", {
attributionControl: false,
crs: L.CRS.MySimple,
maxBounds: bounds,
minZoom: minZoom,
maxZoom: maxZoom
});
L.tileLayer('https://d1w6xpzk1h0aj5.cloudfront.net/kuban/{z}/{x}/{y}.png', {
bounds: bounds,
noWrap: true,
minZoom: minZoom,
maxZoom: maxZoom,
tms: true,
continuousWorld: false,
maxNativeZoom: 7
}).addTo(map);
map.fitBounds(bounds);
L.marker(L.latLng([ 0, 0 ])).addTo(map);
L.marker(L.latLng(xy(img))).addTo(map);
</script>
</body>
</html>
如果我在浏览器上打开它,地图会在所有缩放级别上正确显示(即,图块以正确的顺序提供,并且传单正在按预期缝合它们)。问题是地图垂直偏离中心,并且标记虽然水平完全对齐,但有垂直偏移。
这正是我在主项目中也遇到的问题。
我做错了什么,为什么?
【问题讨论】:
-
Hhhmm,图块似乎与游戏世界的左下角对齐,但您的 [0,0] 位于左上角。你确定你有适合这个游戏世界的坐标系吗?
-
说实话,我什么都不确定。这源于github.com/roccobarbi/il2missionplanner.link,这是我从github.com/gavincabbage/il2missionplanner.com 获得的,因为原始项目被放弃并停止工作。当我尝试将其修补到工作状态时,我正在学习传单。很多设计决策都是从之前的项目中继承下来的。我确定坐标有问题,因为我必须颠倒平铺顺序,否则会显示它们沿 y 轴倒置。
-
事实上,问题中的代码是尝试从头开始构建一个最小的工作地图,这样我就可以理解什么是坏的以及为什么,我可以尝试设计一个修复程序,使感觉。
-
请阅读 stackoverflow.com/questions/47381346/… 、 stackoverflow.com/questions/62622737/… 和 stackoverflow.com/questions/62305306/… - 如果可能,请尝试获取游戏中几个地标的坐标,因为这样可以更好地确保瓷砖和CRS 对齐正常。
-
我反复阅读这些帖子,还有很多其他帖子。它们很有用,但我认为它们不能完全解决我的问题。经过一些更改,我现在发现这个问题实际上只是一个缩放问题。在最大变焦下,我可以非常准确地定位地标。除了它们在任何其他缩放级别上都不能正确映射。
标签: javascript leaflet