Sha*_*nak 7 javascript gis maps leaflet
我有一个显示图块层的标准传单图.现在,传单只允许您使用panToLatLng的方法,例如,
map.panTo(new L.LatLng(40.17, -98.12));
Run Code Online (Sandbox Code Playgroud)
如果我的坐标是EPSG:3857例如,我将如何使用上面的panTo方法(3679364.68,-9096106.74)?
这在Openlayers中非常简单,因为一旦定义了地图投影,一切都在该投影中起作用.但Leaflet总是在外面工作.
使用传单库完成此任务的简单方法?
谢谢!
ARs*_*Rsl 10
Leaflet允许您通过取消投影3857点来使用panTo方法.如果你不想使用proj4js库,它也可以在传单中实现.
var point = new L.Point(3679364.68,-9096106.74); // Lon/Lat
var earthRadius = 6378137;
var latlng = L.Projection.SphericalMercator.unproject(point.divideBy(earthRadius));
map.panTo(new L.LatLng(latlng.lat, latlng.lng));
Run Code Online (Sandbox Code Playgroud)
如果我使用proj4js库来转换坐标,我可以使它工作:
var source = new Proj4js.Proj('EPSG:3857');
var dest = new Proj4js.Proj('EPSG:4326');
var p = new Proj4js.Point(-9096106.74,3679364.68); //this takes x,y
Proj4js.transform(source, dest, p);
this.map.setView(new L.LatLng(p.y, p.x),zoom);
Run Code Online (Sandbox Code Playgroud)
但这仍然不是一个理想的解决方案,因为它包括图书馆给我一个兆字节.我仍然在寻找传单解决方案.知道内部传单已经使用EPSG:3857来获取磁贴,这应该不是那么困难.
Update
Run Code Online (Sandbox Code Playgroud)
要完全使用Leaflet,请查看@ ARsl的答案.唯一的原因我仍然接受这个作为我的答案因为,仍然感到不舒服做这样的投影计算(不是他们错了),只是因为这个原因我不接受这个答案.加上proj4js作为支持更多基准的额外优势.