在传单中的折线外部填充

问题描述 投票:0回答:1

我有一组给出闭合多边形的坐标。 使用 Python 中的

folium.PolyLine()
函数,我可以轻松填充“内部”,但不能填充“外部”。 图中左侧为实际输出,右侧为所需输出。

enter image description here

Python中使用的代码(为了获取左侧的图像)如下,我决定使用

leafmap.folium.Map()
对象。

import folium
import leafmap.foliumap as leafmap
m = leafmap.Map(
    layers_control=True,
    draw_control=False,
    measure_control=False,
    fullscreen_control=False,
    center=(map_center_x,map_center_y),
    zoom=z_start
)
m.add_basemap('OpenTopoMap')
folium.PolyLine(
    locations=coords,
    fill_color="#D3D3D3",
    color="#00B0F0",
    weight=line_weight,
    opacity=fill_opacity
).add_to(m)

我想恢复填充的区域,但找不到方法。 有没有办法,用

folium.PolyLine()
来获得右边的结果?

python python-3.x geopandas folium
1个回答
0
投票

您可以创建覆盖坐标系整个范围的多边形,并在多边形内添加内环(或孔)。当您对多边形应用

fillOpacity
时,内环不受影响,使其完全透明,并且在填充的外多边形的衬托下清晰可见。

import folium
import leafmap.foliumap as leafmap
from shapely.geometry import Polygon, mapping

map_center_x = 51.1657
map_center_y = 10.4515
z_start = 5

m = leafmap.Map(
    layers_control=True,
    draw_control=False,
    measure_control=False,
    fullscreen_control=False,
    center=(map_center_x, map_center_y),
    zoom=z_start
)
m.add_basemap('OpenTopoMap')

# Define the extent of the outer polygon (global coordinates)
x_min, y_min = -180, -90
x_max, y_max = 180, 90

# create the outer polygon
outer_polygon = Polygon([
    [y_min, x_min], [y_min, x_max], [y_max, x_max], [y_max, x_min], [y_min, x_min]
])

# Define the inner polygon
hole = Polygon([
    [8.5, 50.5], [11.5, 50.5], [11.5, 51.5], [8.5, 51.5], [8.5, 50.5]
])

polygon_with_hole = Polygon(outer_polygon.exterior.coords, [hole.exterior.coords])

geojson_data = mapping(polygon_with_hole)

folium.GeoJson(
    geojson_data,
    name="Polygon with hole",
    style_function=lambda feature: {
        'fillColor': 'grey',
        'color': 'black',
        'weight': 1,
        'fillOpacity': 0.8
    }
).add_to(m)

m


结果地图:

Resulting Map

© www.soinside.com 2019 - 2024. All rights reserved.