Leaflet.js:仅显示特定的国家/地区,或隐藏其他国家/地区

时间:2020-05-19 21:07:14

标签: javascript leaflet geojson

基于:Dim/Hide rest of map around country with leaflet.js

尽管几乎可以接受公认的答案,但是its JSFiddle demo仅适用于旧的单个多边形GeoJSON。现代的多多边形GeoJSON允许使用其他形状来弥补海外领土等问题,因此还引入了JSFiddle演示程序不知道如何处理的其他数组:

// transform geojson coordinates into an array of L.LatLng
var coordinates = france.features[0].geometry.coordinates[0];
var latLngs = [];
for (i=0; i<coordinates.length; i++) {
    latLngs.push(new L.LatLng(coordinates[i][1], coordinates[i][0]));
}

L.mask(latLngs).addTo(map);

我意识到这是所有基本的JavaScript和数组101的东西,但是没有人会碰巧知道如何使上述代码与来自多面体GeoJSON的其他数组一起工作吗?

1 个答案:

答案 0 :(得分:2)

我猜想,“现代GeoJSON”的意思是“ GeoJSON features of type Polygon带有外圈,也带有内圈”。因此,这实际上是关于“如何将GeoJSON多多边形几何转换为数组(叶LatLng s)的数组(环)(数组中的点)?”。

请注意,带内环的多边形的概念绝不是“现代”的:它确实出现在(现已弃用的)2008 GeoJSON specs中,这反过来又从OGC的Simple Features中汲取了很多灵感。可以追溯到2003年。

我会利用Leaflet已经实现的coordsToLatLngs static method of L.GeoJSON。例如:

var latlngs = L.GeoJSON.coordsToLatLngs(feature.geometry.coordinates, 1);

请记住对geometry.type进行必要的健全性检查; levelsDeep的参数对于LineString为0,对于MultiLineStringPolygon为1,对于MultiPolygon为2。