小册子在缩放级别计算每像素的米数

时间:2014-12-18 11:06:04

标签: javascript leaflet geo

我正在尝试确定一种方法来计算在给定缩放级别1个像素和由Leaflet中的地理中心点表示的米数。任何人都可以指导我参与数学计算,或者是否有办法在传单中开箱即用?我在那里找不到多少。

4 个答案:

答案 0 :(得分:16)

您可以使用L.Map的{​​{3}}转换函数来获取给定像素坐标的latLngcoordinates。如果您选择第一个像素中的一个像素,而使用下一个像素中的一个像素,则可以使用L.LatLng的{​​{1}}实用程序方法来计算它们之间的距离(以米为单位)。请参阅以下代码(假设map是L.Map的实例):

var centerLatLng = map.getCenter(); // get map center
var pointC = map.latLngToContainerPoint(centerLatLng); // convert to containerpoint (pixels)
var pointX = [pointC.x + 1, pointC.y]; // add one pixel to x
var pointY = [pointC.x, pointC.y + 1]; // add one pixel to y

// convert containerpoints to latlng's
var latLngC = map.containerPointToLatLng(pointC);
var latLngX = map.containerPointToLatLng(pointX);
var latLngY = map.containerPointToLatLng(pointY);

var distanceX = latLngC.distanceTo(latLngX); // calculate distance between c and x (latitude)
var distanceY = latLngC.distanceTo(latLngY); // calculate distance between c and y (longitude)

这应该有效,感谢JarekPiórkowski在编辑前指出我的错误。

答案 1 :(得分:7)

您可以使用它来计算每像素的米数:

metresPerPixel = 40075016.686 * Math.abs(Math.cos(map.getCenter().lat * 180/Math.PI)) / Math.pow(2, map.getZoom()+8);

答案 2 :(得分:2)

看看openstreetmap.org page on zoom levels。它给出了计算每像素米数的公式:

  

由一个像素(S)表示的距离由

给出      

S=C*cos(y)/2^(z+8)其中......

     

C是地球的(赤道)周长

     

z是缩放级别

     

y是您对比例感兴趣的纬度。

答案 3 :(得分:0)

纠正我,如果我错了,恕我直言,每像素的米数=以米为单位的地图高度/以像素为单位的地图高度

function metresPerPixel() {
    const southEastPoint = map.getBounds().getSouthEast();
    const northEastPoint = map.getBounds().getNorthEast();
    const mapHeightInMetres = southEastPoint.distanceTo(northEastPoint);
    const mapHeightInPixels = map.getSize().y;

    return mapHeightInMetres / mapHeightInPixels;
}