Leaflet 重复数据消除多边形州/国家/地区共享边界

Leaflet 重复数据消除多边形州/国家/地区共享边界,leaflet,geojson,Leaflet,Geojson,我正在使用GEOJSON绘制一张带有传单的世界地图,并用虚线绘制边界,如下图所示 我遇到的问题是,如果两个州共享边界,那么这条线不是两个州共享的,而是为不同的州分别绘制两条线。因此,当放大足够多的线时,它们彼此重叠,看起来很奇怪。如下所示。 为了使它成为虚线,我在下面使用CSS .geojsonlayerpolygon{ stroke-dasharray: 6 4; } 我使用的GEOJson是 我如何确保共享边界时,只有一行?听起来像是一项工作。从其自述文件: TopoJSON

我正在使用GEOJSON绘制一张带有传单的世界地图,并用虚线绘制边界,如下图所示

我遇到的问题是,如果两个州共享边界,那么这条线不是两个州共享的,而是为不同的州分别绘制两条线。因此,当放大足够多的线时,它们彼此重叠,看起来很奇怪。如下所示。

为了使它成为虚线,我在下面使用CSS

.geojsonlayerpolygon{
   stroke-dasharray: 6 4;
 }
我使用的GEOJson是

我如何确保共享边界时,只有一行?

听起来像是一项工作。从其自述文件:

TopoJSON是编码拓扑的GeoJSON的扩展。TopoJSON文件中的几何图形不是离散地表示几何图形,而是从称为圆弧的共享线段缝合在一起。此技术类似于Matt Bloch的MapShaper和Arc/Info导出格式.e00

TopoJSON消除了冗余,允许在同一文件中高效地存储相关几何图形。例如,加利福尼亚州和内华达州之间的共享边界仅表示一次,而不是对两个州重复。一个TopoJSON文件可以包含多个要素集合,而无需重复,例如州和县。或者,TopoJSON文件可以有效地将多边形(用于填充)和边界(用于笔划)表示为共享相同圆弧网格的两个要素集合

因此,从加载topojson库开始

<script src="https://unpkg.com/topojson@3"></script>
…然后添加一个仅包含多边形填充的
L.GeoJSON
层,设置选项以避免在多边形轮廓上绘制任何线(请记住)

…计算拓扑的长度,这将是GeoJSON多重限制

topojson.mesh(topo);
…并创建另一个
L.GeoJSON
实例来绘制所述多行线。根据您的喜好(包括)设计线条样式,例如

var layerLines = L.geoJson(topojson.mesh(topo), { 
  fill: false, dashArray:[3, 6], weight: 2 
}).addTo(map);
最终结果不包含重叠虚线,如预期:



使用TopoJSON是一种可能的方法。还有其他可能的方法(例如,使用不同的工具,仅使用边界预生成多行GeoJSON文件等);但是在数据集上使用拓扑规则的想法是相同的。

谢谢您的解决方案。让我试试这个方法。
var layerFill = L.geoJson(json, { stroke: false }).addTo(map);
topojson.mesh(topo);
var layerLines = L.geoJson(topojson.mesh(topo), { 
  fill: false, dashArray:[3, 6], weight: 2 
}).addTo(map);