使用Python在plotly scattermapbox中为POI绘制指定半径覆盖多边形
核心问题:当前绘制失败的核心原因是生成的圆形多边形使用的是平面投影坐标系(坐标值为米级数值),而Mapbox图层仅支持WGS84坐标系的经纬度坐标(EPSG:4326),按以下步骤修改即可:
- 第一步:完成坐标系转换
生成圆形多边形后,先转为WGS84经纬度坐标系:
gdf = circles(Lat, Long, radius=1609.34) # 新增投影转换代码,确保输出是经纬度坐标 gdf = gdf.to_crs(epsg=4326)
- 第二步:按需调整图层配置
如果需要半透明填充的范围面,可修改图层参数,纯边框效果可保留原有type: "line"配置:
"layers": [ { "source": json.loads(gdf.geometry.to_json()), "below": "traces", "type": "fill", "color": "rgba(128, 0, 128, 0.2)", # 半透明紫色填充 "line": {"width": 1.5, "color": "purple"} # 可选,保留边框 } ]
- 第三步:确认回调返回结构正确
回调函数最后需将点位数据和布局组合返回:
return { "data": data, "layout": layout }
补充:绘制覆盖所有点位的最小外接多边形
如果你需要的不是POI的圆形范围,而是覆盖df中所有点位的最小凸包,可直接通过点位坐标生成,不需要调用圆形生成函数:
from shapely.geometry import MultiPoint # 生成所有点位的凸包 points = MultiPoint(list(zip(df['Long'], df['Lat']))) convex_hull = points.convex_hull # 将convex_hull转成geojson格式放到图层的source参数中即可
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

