Leafletjs GeoJSON图层不适用于来自Natural Earth的地图数据

时间:2018-03-26 10:13:16

标签: leaflet openstreetmap geojson

我正在使用leafletjs使用OSM图块绘制地理地图。我使用以下GeoJSON作为地图图层http://code.highcharts.com/mapdata/1.0.0/custom/world.js,它使用来自naturalearthdata.com的数据

但它不起作用。图块层正确显示。但是没有显示GeoJSON数据。我只能在地图上看到一条白线。

enter image description here

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/

1 个答案:

答案 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数据所暗示的规模变换。