宣传单:俄罗斯芬兰边境的geoJson叠加层错误

时间:2014-02-04 19:47:50

标签: leaflet geojson topojson

我正在使用1:50m Cultural Vectors shape file from naturalearthdata.com

我使用ogr2​​ogr使用以下命令创建geoJson文件:

ogr2ogr -f GeoJSON geo_world_50m.json ne_50m_admin_0_countries.shp

然后我用这个命令创建一个topoJson文件:

topojson --id-property iso_n3 -p name=admin -p name -p iso_a3=iso_a3 -p iso_a3 -o topo_world_50m.json geo_world_50m.json

获得topoJson文件后,我将其加载到Leaflet:

$.getJSON('topo_world_50m.json', function (data) {
    var country_geojson = topojson.feature(data, data.objects.geo_world_50m);
    country_layer.addData(country_geojson);
});

我尝试过1:50m的文件以及来自Natural Earth的1:10m文件。两者都给了我这个在芬兰边境逆转的俄罗斯部分。

section of Russia that is reversed at the Finland border

任何想法如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:2)

所以......这是传单上的一个已知问题,我这样解决了:

function onEachShapeFeature(feature, layer){
    var bounds = layer.getBounds && layer.getBounds();
    // The precision might need to be adjusted depending on your data
    if (bounds && (Math.abs(bounds.getEast() + bounds.getWest())) < 0.1) {
        var latlongs = layer.getLatLngs();
        latlongs.forEach(function (shape) {
            shape.forEach(function (cord) {
                if (cord.lng < 0) {
                    cord.lng += 360;
                }   
            }); 
        }); 
        layer.setLatLngs(latlongs);
    }
}
var countries = L.geoJson(data, {
        onEachFeature: onEachShapeFeature,
});

您将需要underscore.js或lodash 我知道这很糟糕......但这是我发现的最佳方式。

答案 1 :(得分:1)

如果您使用geoJson会发生什么?对于像这样(国家级别)的管理员0级地理位置,geoJson可能足够详细。当你从geo出发时,听起来有些东西正在丢失 - &gt; TOPO?