Leaflet: Error in geoJson overlay at Russia Finland border

橙三吉。 提交于 2019-12-02 05:59:20

问题


I'm using the 1:50m Cultural Vectors shape file from naturalearthdata.com.

I use ogr2ogr to create a geoJson file with the following command:

ogr2ogr -f GeoJSON geo_world_50m.json ne_50m_admin_0_countries.shp

I then create a topoJson file with this command:

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

Once I have my topoJson file, I load it in to Leaflet:

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

I've tried the 1:50m file as well as the 1:10m file from Natural Earth. Both give me this section of Russia that is reversed at the Finland border.

Any ideas how to address this? Thanks


回答1:


What happens if you use the geoJson? For admin 0 level geographies like this (country level) a geoJson might suffice in terms of detail. It sounds like something is being lost when you go from geo -> topo?




回答2:


So... this is a known issue on leaflet, I solved this way:

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,
});

You will need underscore.js or lodash I know that is hacky... but was the best way I found.



来源:https://stackoverflow.com/questions/21561960/leaflet-error-in-geojson-overlay-at-russia-finland-border

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!