我正在尝试在传单中设置带有3857投影的lat / lon的地图中心。 通过使用投影4326的lat / lon,它的工作正常。
var map = L.map('map', {
crs: L.CRS.EPSG3857
}).setView([51.40457186188496, -2.3741738081973844], 13);
但如果我提供3857纬度/经度,它就不起作用了。
var map = L.map('map', {
crs: L.CRS.EPSG3857
}).setView([6693172.2381477, -264291.81938326], 13);
请在我错的地方帮助我。
由于
答案 0 :(得分:3)
Leaflet的API使用lat / lng进行所有操作,因此在调用Leaflet时不应使用投影坐标。
如果您有投影坐标,严格来说不是纬度和经度,您可以通过取消投影将它们转换为lat / lng。由于当前稳定版的Leaflet对EPSG的定义略有不同:3857,您必须将坐标除以EPSG:3857的球半径。此外,您的坐标似乎交换了x和y。无论如何,这是执行转换的代码:
function toLatLng(x, y, map) {
var projected = L.point(y, x).divideBy(6378137);
return map.options.crs.projection.unproject(projected);
}
这样称呼:
var latLng = toLatLng(6693172.2381477, -264291.81938326, myMap);
您也可以使用像Proj4js这样的库来进行投影/取消投影:http://proj4js.org/