我正在尝试使用传单来使用x,y坐标渲染大图像,如下所示:
var map = L.map('map', {
crs: L.CRS.Simple,
attributionControl: false,
reuseTiles:true,
}).setView([0, 0], 1);
问题是,当我缩放时,我似乎得到一个偏移。因此,随着我不断放大地图似乎转移。
我正在使用C#和GDI +在后端绘制图像,所以我很可能得到的代码错了:
private void DrawLine(int x, int y, int z, int squareSize, Graphics g, Shape shape, Pen drawPen)
{
Line line = (Line)shape;
var scalingFactor = 0.1;
var zoom = (z * (scalingFactor));
double startScaledX = (line.StartPoint.X * zoom) + ((squareSize * -1) * x);
double startScaledY = (line.StartPoint.Y * -1 * zoom) + ((squareSize * -1) * y);
double endScaledX = (line.EndPoint.X * zoom) + ((squareSize * -1) * x);
double endScaledY = (line.EndPoint.Y * -1 * zoom) + ((squareSize * -1) * y);
var width = Math.Abs(endScaledX - startScaledX);
var height = Math.Abs(endScaledY - startScaledY);
var startPoint = new System.Drawing.PointF((float)startScaledX, (float)startScaledY);
var endPoint = new System.Drawing.PointF((float)endScaledX, (float)endScaledY);
var rectDrawBounds = (new RectangleF((float)startScaledX, (float)startScaledY, (float)width, (float)height));
var rectTileBounds = new RectangleF(0, 0, 256, 256);
g.DrawLine(drawPen, startPoint, endPoint);
}
我注意到如果我在[0,0]放大和缩小,那么缩放效果非常好。其他一切似乎都在改变地图。
感谢您提供的任何帮助。
答案 0 :(得分:0)
在Leaflet的L.CRS.Simple
中,地图比例每个缩放级别增长2倍。换句话说:
scale = 2**z;
或
scale = Math.pow(2,z);
或
scale = 1<<z;
或
在缩放级别0时,256像素的图块覆盖256个地图单位。一个地图单位跨越1个像素。
在缩放级别1时,256像素的图块覆盖128个地图单位。一个地图单位超过2个像素。
在缩放级别2处,256像素的图块覆盖64个地图单位。一个地图单位超过4个像素。
在缩放级别 n 时,256像素的图块覆盖256/2 n 地图单位。一个地图单位跨越2个 n 像素。
供参考,请参阅https://github.com/Leaflet/Leaflet/blob/master/src/geo/crs/CRS.Simple.js
相应地修正您的z
,scalingFactor
和zoom
计算和关系。