我正在使用leafletjs使用OSM图块绘制地理地图。我使用以下GeoJSON作为地图图层http://code.highcharts.com/mapdata/1.0.0/custom/world.js,它使用来自naturalearthdata.com的数据
但它不起作用。图块层正确显示。但是没有显示GeoJSON数据。我只能在地图上看到一条白线。
var worldMapData = {}; //the geoJson data from http://code.highcharts.com/mapdata/1.0.0/custom/world.js
var osmUrl = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png',
osm = L.tileLayer(osmUrl, {
noWrap: true,
attribution: "<a href='http://openstreetmap.org'>OpenStreetMap</a>"
});
var map = L.map('map').setView([0, 0], 1).addLayer(osm);
function style( feature ) {
return {
fillColor: '#FFEDA0',
weight: 2,
opacity: 1,
color: 'white',
dashArray: '3',
fillOpacity: 0.7
};
}
map.addLayer(L.geoJson(worldMapData, {style: style}));
我错过了什么吗?上面的GeoJSON不符合规范吗?如果没有,我可以从哪里下载适用于所有与leafletjs兼容的国家的GeoJSON?
[编辑] 以下问题的{jsfiddle http://jsfiddle.net/1x1p55fy/
答案 0 :(得分:2)
正确加载GeoJSON数据,并按预期显示。但是,就坐标参考系统而言,GeoJSON数据不符合GeoJSON规范。让我引用the GeoJSON specs:
所有GeoJSON坐标的坐标参考系统是a 地理坐标参考系统,使用世界大地测量学 系统1984(WGS 84)[WGS84]数据,具有经度和纬度单位 十进制度。这相当于坐标参考 由开放地理空间联盟(OGC)URN确定的系统 金塔:OGC:DEF:CRS:OGC :: CRS84。可选的第三位元素应该是 是WGS 84参考上方或下方的高度 椭球。在没有高程值的情况下,应用程序 对高度或深度敏感应该将位置解释为处于 当地的地面或海平面。
注意:使用替代坐标参考系统 在[GJ2008]中指定,但已从此版本中删除 规范因为使用了不同的坐标参考 系统 - 特别是以[GJ2008]中规定的方式 - 具有 事实证明存在互操作性问题。一般来说,GeoJSON 预计处理软件无法进行协调 参考系统数据库或具有网络访问协调 参考系统转换参数。然而,所有的地方 有关各方有事先安排,另类协调 可以使用参考系统而没有数据风险 曲解。
如果您仔细查看https://code.highcharts.com/mapdata/custom/world-highres.geo.json(或http://code.highcharts.com/mapdata/1.0.0/custom/world.js中的数据),您会发现,事实上,坐标的纬度 - 纬度不是相对于WGS84大地水准面,并且参考EPSG:54003坐标参考系统(圆柱铣刀),具有自定义比例和偏移变换。
正如GeoJSON规范所述,特此建议您不要在GeoJSON数据中使用除EPSG之外的任何其他CRS:4326(经度 - 纬度为WGS84)。
找到一些符合要求的GeoJSON,它在Leaflet中看起来不错。 Leaflet不处理GeoJSON数据的重投影,也不处理highcharts数据所暗示的规模变换。