在你的情况下,你可能只需要使用rc.unproject
将您的坐标转换为可以传递给的 LatLngflyTo
:
map.flyTo(
rc.unproject(feature.geometry.coordinates),
feature.properties['zoom']
);
话虽这么说,我必须承认我并不完全明白使用 leaflet-rastercoords 插件的意义,因为您可以通过遵循 Leaflet 教程轻松地执行相同的操作“非地理地图” http://leafletjs.com/examples/crs-simple/crs-simple.html.
var yx = L.latLng;
var xy = function(x, y) {
if (L.Util.isArray(x)) { // When doing xy([x, y]);
return yx(x[1], x[0]);
}
return yx(y, x); // When doing xy(x, y);
};
有了这个,每当你想将你的“光栅”坐标转换为Leaflet可用的东西时,你只需使用xy(x, y)
with x
是你的横向价值,并且y
你的垂直的。
额外的好处是许多其他东西将变得容易兼容。
由于您使用图块而不是单个图像(用ImageOverlay
在教程中为了适应坐标),您应该修改 CRS 转换,以便在缩放 0 时,您的图块0/0/0
适合您的整个坐标。也可以看看图像上的传单自定义坐标 https://stackoverflow.com/questions/34638887/leaflet-custom-coordinates-on-image
IE。以传单栅格坐标为例:
- 原始光栅图像尺寸:3831 px 宽 x 3101 px 高
- 瓷砖尺寸:256 x 256 像素
- 垂直“光栅”坐标在下降时增加(而在 Leaflet 教程中,它们在上升时增加,就像纬度一样)。
- Tile
0/0/0
实际上涵盖了more比原始图像大,就好像后者是 4096 x 4096 px(其余部分填充白色)
新CRS的确定:
- 图块 0/0/0 应覆盖从左上角 [0, 0] 到右下角 [4096, 4096] 的坐标(即 256 * 2^4 = 256 * 16 = 4096)=>转型 http://leafletjs.com/reference-1.0.3.html#transformation系数
a
and c
应该1/16
- 不需要偏移 => 偏移
b
and d
are 0
- 没有恢复
y
纵坐标=>c
是积极的
因此,要使用的新 CRS 为:
L.CRS.MySimple = L.extend({}, L.CRS.Simple, {
// coefficients: a b c d
transformation: new L.Transformation(1 / 16, 0, 1 / 16, 0)
});
现在你的flyTo
非常相似,但许多其他东西也兼容:
map.flyTo(
xy(feature.geometry.coordinates),
feature.properties['zoom']
);
演示改编自 leaflet-rastercoords 示例,并使用额外的插件来演示兼容性:https://plnkr.co/edit/Gvei5I0S9yEo6fCYXPuy?p=preview https://plnkr.co/edit/Gvei5I0S9yEo6fCYXPuy?p=preview