在用Leaflet给地图添加标记时,明明坐标是对的,但标记总偏移到海里去了。我检查了好几遍经纬度数值没问题,初始化地图和标记的代码是这样的:
const map = L.map('map').setView([40.7128, -74.0060], 13);
L.marker([40.7128, -74.0060]).addTo(map);
地图中心和标记用的同一个坐标,可地图显示的是纽约附近的位置,而标记却出现在非洲西海岸?试过反转经纬度参数反而更离谱。有没有可能是地图投影的问题?或者我漏掉了什么关键配置?
你代码里写的[40.7128, -74.0060]其实是[纬度, 经度]的顺序没错,标记跑到海里去可能是地图底图的坐标系和标记不一致导致的。当时我也被这个坑折磨了好久,后来发现是因为用了某些第三方瓦片服务,它们可能用的是Web墨卡托投影,跟默认的WGS84有偏差。
解决办法有几个方向可以试:
第一种情况,如果你用的是第三方瓦片服务,比如高德地图或者天地图,需要在初始化地图的时候设置正确的坐标系。比如高德地图要用GCJ-02坐标系,代码可以这么写:
第二种情况,如果确实是坐标系不匹配的问题,可以用proj4leaflet这个库来做坐标转换。不过这个方法稍微麻烦点,建议先试试第一种。
最后提醒一下,国内的地图服务很多都要求对坐标做偏移处理,特别是用到高德、百度这些服务商的底图时。如果涉及到国内地图,记得检查下是不是GCJ-02或者BD-09坐标系的问题。
我当时就是没注意底图和标记的坐标系不一致,折腾了一整天,希望你能少走点弯路。
确保加上这行样式:
没有这个CSS,地图瓦片会错位,标记看着就像漂移去了大西洋。