news 2026/1/29 4:29:51

Python轻松绘制多边形与星形地理图层飞镖、闪光、五角星、六角形…n星、三角形、正方形、五边形、六边形、n边形支持旋转

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python轻松绘制多边形与星形地理图层飞镖、闪光、五角星、六角形…n星、三角形、正方形、五边形、六边形、n边形支持旋转

经纬度数据创建多边形内角(星形)或者外角(多边形)生成图层python

三角到n角(飞镖、闪光、五角星、六角形…n星)
3边到n边形(三角形、正方形、五边形、六边形)

什么是add_polygon方法?

add_polygon是tablegis库中的一个方法,用于在给定的经纬度点创建规则多边形。
这个方法可以帮助用户生成具有指定半径或边长的正多边形,适用于多种GIS应用场景,如影响范围分析、区域划分等。

如何导入和使用

pip install tablegis
importtablegisastg

方法参数详解

基本参数

  • df: pandas.DataFrame - 包含经纬度列的输入数据表
  • lon, lat: str - 经度和纬度列名,默认为’lon’和’lat’
  • num_sides: int - 多边形边数,必须≥3

核心参数

  • radius: float, str, or None - 多边形的半径(以米为单位),可以是标量值或列名
  • side_length: float, str, or None - 多边形的边长(以米为单位)
    注意side_length和radius选一个输入就行
  • interior_angle: float, str, or None - 内角,用于创建星形多边形
    注意interior_angle填写值后尽量使用radius外接圆半径,因为它没有边长了。

其他参数

  • rotation: float or str - 旋转角度(以度为单位),默认为0.0
  • geometry: str - 输出GeoDataFrame中几何列的名称,默认为’geometry’

实际应用案例

案例1:创建服务区域分析

假设你是一家连锁餐厅的运营分析师,需要为每个门店创建服务区域。使用[add_polygon](file:///d:/codetools/tablegis/tablegis/core.py#L532-L740)可以轻松生成半径为1公里的六边形服务区域:

importpandasaspdimporttablegisastg# 餐厅位置数据restaurants=pd.DataFrame({'name':['餐厅A','餐厅B','餐厅C'],'lon':[116.404,116.505,116.303],'lat':[39.915,39.816,39.714],'capacity':[100,150,120]# 作为半径参考})# 创建六边形服务区域(半径1公里)hexagons=tg.add_polygon(restaurants,lon='lon',lat='lat',num_sides=6,radius=1000)# 1000米

案例2:创建安全缓冲区

在城市规划中,需要为危险设施创建安全缓冲区。使用[add_polygon](file:///d:/codetools/tablegis/tablegis/core.py#L532-L740)可以创建三角形、四边形或圆形(多边形近似)的缓冲区:

# 危险设施数据hazardous_facilities=pd.DataFrame({'type':['化工厂','加油站','油库'],'lon':[121.4737,121.4837,121.4937],'lat':[31.2304,31.2404,31.2504],'safety_radius':[500,200,800]# 不同设施的安全半径})# 创建八边形安全缓冲区safety_zones=tg.add_polygon(hazardous_facilities,lon='lon',lat='lat',num_sides=8,radius='safety_radius')# 使用列中的半径值

案例3:创建蜂窝网络覆盖区域

电信公司需要模拟蜂窝网络的覆盖范围,六边形是理想的选择:

# 基站数据cell_towers=pd.DataFrame({'tower_id':['T001','T002','T003','T004'],'lon':[113.947,113.957,113.937,113.947],'lat':[22.545,22.555,22.535,22.525],'coverage_radius':[500,600,550,700]})# 创建六边形覆盖区域hex_coverage=tg.add_polygon(cell_towers,lon='lon',lat='lat',num_sides=6,radius='coverage_radius',rotation=30)# 旋转30度以优化覆盖

案例4:创建星形影响区域

在某些特殊情况下,需要创建星形区域来表示特殊的影响范围:

# 创建星形区域special_zones=tg.add_polygon(restaurants,lon='lon',lat='lat',num_sides=5,# 五角星radius=800,interior_angle=36)# 创建五角星形状

使用注意事项

1. 数据准备

  • 确保输入的DataFrame包含有效的经纬度列
  • 经纬度值必须在有效范围内(经度-180到180,纬度-90到90)
  • 检查数据中是否存在缺失值

2. 性能考虑

  • 多边形边数越多,计算越复杂,但视觉效果越接近圆形
  • 对于大量数据,建议分批处理以避免内存问题

3. 坐标系处理

  • 输出的GeoDataFrame使用EPSG:4326坐标系(WGS84)
  • 内部使用投影坐标系进行计算,以确保距离的准确性

实用技巧

动态半径设置

可以根据数据中的列动态设置半径:

polygons=add_polygon(df,radius='radius_column')

旋转多边形

通过设置不同的旋转角度,可以创建视觉上更吸引人的多边形:

# 随机旋转df['rotation']=np.random.uniform(0,360,len(df))polygons=tg.add_polygon(df,rotation='rotation')

组合使用

与其他tablegis功能组合使用:

fromtablegisimportadd_polygon,add_buffer# 先创建多边形polygons=add_polygon(df,num_sides=6,radius=500)# 然后在此基础上添加缓冲区buffered=add_buffer(polygons,distance=100)

总结

add_polygon是tablegis库中一个实用的方法,可以用于多种GIS分析场景。通过合理设置参数,可以创建各种形状的多边形,满足不同的业务需求。掌握这个方法将大大提高地理空间数据处理的效率和准确性。

进行城市规划、商业分析、安全区域设置还是网络覆盖模拟,或者单纯的画图/画画都可以

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/22 14:11:12

从零实现:基于ARM Compiler 5.06的LED闪烁程序

从零开始:用ARM Compiler 5.06点亮第一颗LED你有没有过这样的经历?手握一块STM32开发板,装好了Keil,建了工程,写完代码一点编译——程序下载进去,LED却纹丝不动。查了一遍又一遍,代码逻辑没问题…

作者头像 李华
网站建设 2026/1/25 11:26:57

设备树下PWM外设配置的系统学习

从零开始掌握设备树下的PWM配置:嵌入式开发者必修课你有没有遇到过这样的场景?换了一块新开发板,明明代码没变,PWM控制的风扇就是不转;或者背光调不了亮度,日志里只留下一行冰冷的pwmchip not found。这时候…

作者头像 李华
网站建设 2026/1/28 6:25:58

SeedVR2视频超清修复终极指南:3步让AI视频秒变4K画质

SeedVR2视频超清修复终极指南:3步让AI视频秒变4K画质 【免费下载链接】SeedVR2-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR2-7B 你是否遇到过这样的困扰?用AI工具生成的视频在手机上看效果尚可,但一旦投…

作者头像 李华
网站建设 2026/1/28 7:54:35

别再熬夜凑论文?8款免费AI工具带真实参考文献轻松搞定!

还在用百度知网Word,从零开始“肝”论文?还在为选题迷茫、结构混乱、查重爆炸而彻夜难眠?还在被导师的一句“逻辑不通,重写”打回原形,陷入无限修改的循环? 如果你疯狂点头,那么恭喜你&#xf…

作者头像 李华
网站建设 2026/1/29 1:49:46

Whisper JAX:70倍语音识别加速的实战指南

Whisper JAX:70倍语音识别加速的实战指南 【免费下载链接】whisper-jax JAX implementation of OpenAIs Whisper model for up to 70x speed-up on TPU. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-jax 传统语音转文字技术面临着速度慢、资源消耗…

作者头像 李华
网站建设 2026/1/25 7:00:17

一文说清STM32如何高效驱动多个LED

如何用STM32轻松驱动几十个LED?别再一个IO点一个灯了!你有没有遇到过这样的场景:项目要做一个状态指示面板,需要控制十几个LED;或者想做个88的LED矩阵显示动画,结果发现MCU的GPIO根本不够用?更糟…

作者头像 李华