带自定义图块的单张贴图缩放偏移x y

时间:2016-10-25 10:21:26

标签: c# leaflet

我正在尝试使用传单来使用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]放大和缩小,那么缩放效果非常好。其他一切似乎都在改变地图。

感谢您提供的任何帮助。

1 个答案:

答案 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

相应地修正您的zscalingFactorzoom计算和关系。

相关问题