我遇到了一个任务,需要使用带有geojson的leaflet js库作为数据存储。几乎立即遇到问题:从geojson对象创建的多边形不会显示在地图上。虽然多边形由原生传单方法创建 - 但效果很好。
这是我的代码:
var map = new L.Map('map');
var bingLayer = new L.BingLayer('AhVaalRWmmprMAMHj6lw18ALO-iVnIGzvkq7gYAX3U_bisCT8Q_lgGV25YOa0kiV', 'Aerial');
map.setView(new L.LatLng(51.505, -0.09), 13).addLayer(bingLayer);
var polygon = {
"type": "Feature",
"properties": {
"style": {
"color": "#004070",
"weight": 4,
"opacity": 1
}
},
"geometry": {
"type": "Polygon",
"coordinates": [[
[51.509, -0.08],
[51.503, -0.06],
[51.51, -0.047],
[51.509, -0.08]
]]
}
};
var geojsonLayer = new L.GeoJSON(polygon);
map.addLayer(geojsonLayer);
正如您所看到的,它几乎复制了一个由传单提供的示例。并不起作用。我完全被这个麻烦所困扰,并且非常感谢任何帮助。
答案 0 :(得分:15)
问题是在GeoJSON
规范中,坐标应以[lon, lat]
形式传递,而Leaflet使用[lat, lon]
作为其对象。只需将其更改为[-008, 51.509]
等,您应该没问题。 :)
答案 1 :(得分:3)
我只想添加一些我的观点 -
只是一个令人困惑和矛盾的标准。
在谈论地理位置时,我们通常使用Lat-long。
map.setView
将l.LatLong
作为输入,其中第一个坐标为Latitude
,第二个坐标为Longitude
。
示例: - 因此,当您需要52.23N, 4.97E
时,您会传入[52.23943, 4.97599]
GeoJSON标准表示,对于任何一点,第一个参数是X Coordinate (i.e. Longitude)
,第二个参数是Y coordinate (i.e. Latitude)
;
因此,如果您需要51.505N, 0.09E
中的GeoJSON
,则需要传递[-0.09, 51.505]
var map = new L.Map('map');
var bingLayer = new L.BingLayer('AhVaalRWmmprMAMHj6lw18ALO-iVnIGzvkq7gYAX3U_bisCT8Q_lgGV25YOa0kiV', 'Aerial');
map.setView(new L.LatLng(-0.09, 51.505), 13).addLayer(bingLayer);
var polygon = {
"type": "Feature",
"properties": {
"style": {
"color": "#004070",
"weight": 4,
"opacity": 1
}
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[51.509, -0.08],
[51.503, -0.06],
[51.51, -0.047],
[51.509, -0.08]
]
]
}
};
var geojsonLayer = new L.GeoJSON(polygon);
map.addLayer(geojsonLayer);
您可以通过修改此视图来调整视图..
map.setView(new L.LatLng(-0.09, 51.505), 13).addLayer(bingLayer);
到
map.setView(new L.LatLng(-008, 51.509), 13).addLayer(bingLayer);
我认为这个解释会有所帮助!!更多Click Here