在应用不透明度之前合并小叶重叠多边形
Leaflet overlapping polygons merge before applying opacity
我有一张传单地图,我在其中添加了数百个多边形。有时会发生许多多边形重叠在同一点,增加它们的不透明度,最终无法看到底图。
我将多边形添加到地图的方式如下:
map = L.map('map');
var coveragePane = map.createPane('coverage');
coveragePane.style.opacity = 0.2;
let geojsonBlue = L.geoJson(data,
{
stroke: false,
// fillOpacity: 0.25,
fillColor: "#0000FF",
zIndex: 25,
}
);
geojsonBlue.addTo(map, {pane: 'coverage'});
从上面的代码可以看出,我已经尝试透明。然而,这似乎递归地设置了图层的不透明度,而不是将整个窗格设置为一个实心图层。
以前我也尝试过使用 Turf.js 并集合并多边形,结果很好。然而,对于数百个多边形而言,这在计算上是昂贵且不切实际的。这也使得逐层动态添加和删除层变得困难。
在应用 transparency/opacity.
之前,是否有另一种方法可以合并渲染的多边形(在光栅化世界中,而不是矢量世界中)
One question mentions D3.js,但我不确定这是否与多边形相关。
我也在考虑在服务器上将多边形渲染为 PNG 地图图块,并提供栅格化图块并对它们应用不透明度。但是我可以在服务器上使用什么工具来执行此操作?
Is there another way one can merge the rendered polygons (in the rasterized world, not the vector world) before applying the transparency/opacity?
使用 L.Canvas
作为多边形的目标 L.Renderer
,然后将不透明度应用于相应的 HTMLCanvasElement
或其父项之一 - 例如包含 HTMLCanvasElement
.
的传单窗格
例如:
map.createPane('semitransparent');
map.getPane('semitransparent').style.opacity = '0.5';
var canvasRenderer = L.canvas({pane: 'semitransparent'});
L.polygon(..., {renderer: canvasRenderer}).addTo(map);
L.polygon(..., {renderer: canvasRenderer}).addTo(map);
这有点骇人听闻,但应该适用于您的用例。
我有一张传单地图,我在其中添加了数百个多边形。有时会发生许多多边形重叠在同一点,增加它们的不透明度,最终无法看到底图。
我将多边形添加到地图的方式如下:
map = L.map('map');
var coveragePane = map.createPane('coverage');
coveragePane.style.opacity = 0.2;
let geojsonBlue = L.geoJson(data,
{
stroke: false,
// fillOpacity: 0.25,
fillColor: "#0000FF",
zIndex: 25,
}
);
geojsonBlue.addTo(map, {pane: 'coverage'});
从上面的代码可以看出,我已经尝试
以前我也尝试过使用 Turf.js 并集合并多边形,结果很好。然而,对于数百个多边形而言,这在计算上是昂贵且不切实际的。这也使得逐层动态添加和删除层变得困难。
在应用 transparency/opacity.
之前,是否有另一种方法可以合并渲染的多边形(在光栅化世界中,而不是矢量世界中)One question mentions D3.js,但我不确定这是否与多边形相关。
我也在考虑在服务器上将多边形渲染为 PNG 地图图块,并提供栅格化图块并对它们应用不透明度。但是我可以在服务器上使用什么工具来执行此操作?
Is there another way one can merge the rendered polygons (in the rasterized world, not the vector world) before applying the transparency/opacity?
使用 L.Canvas
作为多边形的目标 L.Renderer
,然后将不透明度应用于相应的 HTMLCanvasElement
或其父项之一 - 例如包含 HTMLCanvasElement
.
例如:
map.createPane('semitransparent');
map.getPane('semitransparent').style.opacity = '0.5';
var canvasRenderer = L.canvas({pane: 'semitransparent'});
L.polygon(..., {renderer: canvasRenderer}).addTo(map);
L.polygon(..., {renderer: canvasRenderer}).addTo(map);
这有点骇人听闻,但应该适用于您的用例。