我正在尝试使leaflet使用EPSG:3857作为输入坐标系。我使用porj4leaflet来实现这一点。我像这样定义了我的地图实例:
var map = L.map('map', {
center: [8378860.13, 1481133.311008498],
zoom: 7,
crs: new L.Proj.CRS(
'EPSG:3857',
'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',
{
resolutions: [
8192, 4096, 2048, 1024, 512, 256, 128
],
origin: [0, 0]
}
)
});
当我尝试运行它时,我得到了TypeError: coordinates must be finite numbers
。你可以在这里看到整个小提琴:https://jsfiddle.net/asdpinspdai/fckbpq0a/
根据我对文档的理解,像这样设置crs应该允许我以EPSG:3857格式将坐标传递给leaflet。我是不是遗漏了什么?
这里的任何帮助都是非常非常有价值的。谢谢
发布于 2018-01-28 01:49:16
“有限数字”错误是因为L.Map
希望center
坐标在-90到90度和-180到180度的范围内。
在你的jsfiddle中,你也有一个问题,你选择了zoom:11
,但在你的CRS定义中只有7个缩放级别可用。
Leaflet API始终使用以度为单位的WGS84纬度/经度坐标,因此以这种方式使用Proj4leaflet不会达到您的目的。请参阅此explanation from the Proj4Leaflet project。
但是,EPSG:3857已经是Leaflet中的默认CRS,您可以使用它的内置方法在米和WGS84度之间进行转换,而不需要Proj4Leaflet或Proj4js。请参阅Leaflet CRS documentation。
const proj = L.CRS.EPSG3857;
// Degrees to metres
proj.project(new L.LatLng(51,-2)); // {x: -222638.98158654, y: 6621293.722740}
// Metres to degrees
proj.unproject(new L.Point(-222600, 6621000)); // {lat: 50.998339473, lng: -1.99964982245}
这可能是最简单的unproject
你的米坐标到WGS的时候,你需要传递给Leaflet,但也可以选择编写覆盖版本的一些Leaflet的函数。这些函数将获取米坐标,将它们转换为度,然后将它们传递给原始函数。
https://stackoverflow.com/questions/48462280
复制