繁体   English   中英

如何使用Leaflet API从纬度和经度坐标中检索LayerPoint(X,Y)

[英]How to retrieve LayerPoint (X, Y) from Latitude and Longitude coordinates using Leaflet API

如果我使用以下代码从指定的Lat / Lng获取LayerPoint

var latLng = new L.latLng(-37.81303878836989, 144.97421264648438);
var point = map.latLngToLayerPoint(latLng);

输出如下:

o.Point
  x: 86042
  y: 77065

然后,当我尝试使用以下URL访问图层磁贴时:

http://a.tile.osm.org/10/86042/77065.png

我得到404因为它是无效的X,Y。

现在,如果我使用以下代码:

map.on("click", function (e) {
    console.log(e);
});

我可以在纬度和经度旁边的控制台中检索LayerPoint

latlng: o.LatLng
  lat: -37.81303878836989
  lng: 144.97421264648438
layerPoint: o.Point
  x: 950
  y: 303

然后访问以下URL返回此图层磁贴:

http://a.tile.osm.org/10/950/303.png

在此输入图像描述

问题是它甚至看起来不是那个纬度经度的正确LayerPoint贴,我的原始代码将lat lng转换为LayerPoint实际上首先返回一个有效的X,Y.

我很困惑为什么我得到这些结果。 任何帮助将不胜感激。 也许我做错了什么。

我不确定是否还有另一种基于纬度和经度列表检索切片图层的方法?

我之后的原因是因为我希望能够为离线应用程序使用缓存的磁贴数据,而我所拥有的唯一数据是通过为客户端应用程序生成的GeoJSON有效负载的几何/坐标。

更新:

结束这个功能(感谢@scai )。

根据这个链接

var getSlippyTileLayerPoints = function (lat_deg, lng_deg, zoom) {
    var x = (Math.floor((lng_deg + 180) / 360 * Math.pow(2, zoom)));
    var y = (Math.floor((1 - Math.log(Math.tan(lat_deg * Math.PI / 180) + 1 / Math.cos(lat_deg * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));

    var layerPoint = {
        x: x,
        y: y
    };

    return layerPoint;
};

OUTPUT:

Object {x: 924, y: 628}

http://a.tile.osm.org/10/924/628.png

在此输入图像描述

更新2:

经过进一步的研究,结果证明我所追求的是以下功能:

var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);

经过进一步的研究,结果证明我所追求的是以下功能:

var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);

OSM的磁贴URL基于不同的方案。 您应该在OSM wiki中阅读有关slippy地图图块名称的信息。 它包含lon / lat到tile数字的实现,反之亦然,适用于各种编程/脚本语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM