基于ArcPy的安全射界区自动生成技术研究
2024-01-17李成鹏周明刚钟亚含
李成鹏,周明刚,钟亚含
(1.云南省人工影响天气中心,云南 昆明 650034;2.云南省气象台,云南 昆明 650034;3.云南省气象科学研究所,云南 昆明 650034)
0 引言
目前人工影响天气作为服务气象防灾减灾的重要手段,多年来在云南省的防雹减灾、库塘蓄水和生态环境保护等方面发挥了重要作用,张振秀等[1]对洱海地区的人工增雨作业研究中指出,开展人工增雨作业后的影响区降水量比非作业区高,作业效果明显;王菲等[2]发现,及时申请防雹作业、连续加密作业,可有效地抑制回波增长。高炮和火箭是目前人工防雹的主要地面作业装备,目前云南省16州(市)人影部门装备有900多门火箭发射系统,由于火箭发射架属于武器范畴,火箭弹是军转民用品,火箭作业点、发射方位及仰角的选择是火箭安全作业的重要因素。按相关规定[3-4],作业点应有符合要求的安全射界图。在增雨、防雹作业中根据相关标准[5]自动绘制火箭安全射界图,既能够有效防止发生火箭发射事故,又可切实减少空中未爆弹丸落地时造成对地面人员或重要设施的损害,减少安全隐患。
目前相关研究多集中于人工影响天气作业安全射界图的绘制,常采用ArcGIS[6-8],也有AutoCAD[9]、Photoshop[10]、CorelDRAW[11]等软件。使用后列的这些软件绘制安全射界图时都存在缺少地理坐标参考、绘图比例难以掌握、绘图操作不易掌握和制作过程相对繁琐等不足;而使用AutoCAD和CorelDRAW虽然在在控制比例、精确定位方面有优势,但未给出安全射界区这一关键问题的绘制方法,仍不满足基层业务人员操作简单、绘制精准和容易校对的业务需要。已有研究表明利用GIS技术和Python脚本语言可直观的分析人工影响天气作业安全射界结果,操作方便快捷,为地面火箭作业安全提供了科学依据[12]。其中ArcGIS地理制图模块绘图符合人工影响天气作业安全射界图制作行业标准,一是ArcGIS提供了专业地理数据分析、空间参考、地图制图表达等功能,二是调用地理处理工具接口、函数、类,能精准自动化制作安全射界区,实时动态显示安全射界区,可为人工增雨和防雹工作提供安全作业建议,也可为作业预警产品等决策信息预留接口,增强地面人影作业指挥管理的安全性、科学性和精准性[13]。同时Python语言语法简洁易懂,相较于其他编程语言上手门槛低,很适合初学者快速入门。
基于以上概述,本文研究以Python为脚本语言,充分利用ArcPy库的空间参考模块、空间分析模块、制图表达模块等接口,通过作业点坐标,火箭弹不同发射仰角的理论最大射程参数,实现符合专业地理制图要求和射界图制作行业标准的安全射界区的自动化绘制。
1 基础数据分析
GNSS定位人影作业点,主要勘测作业点经度、纬度、海拔;云南省地理信息公共服务平台提供最新的遥感影像地图、街道地图,能清晰看到村庄、学校、政府部门、仓库、化工用地、主要道路等信息;依据国家标准《人工影响天气火箭作业点安全射界图绘制规范》查询有关火箭弹参数和最大射程增量系数[14],因不同火箭弹的绘制方法基本一致,理论最大射程只影响增量系数和安全射界图的最大范围圈。本文以常见的BL-1A型火箭弹为例,同时考虑到云南省高海拔的作业点较多,选择海拔1 200 m为例,相对海拔0 m的理论最大射程增量系数为1.10,计算海拔1 200 m的BL-1A型火箭弹的理论最大射程,结果见表1[14]。
表1 海拔1 200 m的BL-1A型火箭弹不同发射仰角的理论最大射程
2 ArcPy模块说明
ArcPy入门难度低、可操作性强,同时基于Python语言的便携性,可以很方便地插入各种系统,为后续的应急分析研究带来很大的便利[15]。ArcPy可以高效的调用ArcGIS中存在的各种分析、处理工具及Python模块,人影安全射界区自动化绘制的实现主要使用了ArcPy中的management模块和analysis模块(表2)。
表2 ArcPy 函数说明
3 系统架构设计
结合基础地理信息空间数据和BL-1A型火箭弹参数,利用ArcPy综合分析作业点安全射界,制作安全射界图。整个系统的运行的平台是VScode,编码语言用的是Python 2.7,编码调用的函数包主要是ArcPy。系统整体架构如图1,首先将勘测文件数字化,生成对应经纬度上的人影作业点,根据作业点生成水平距离圈、方位线段,结合BL-1A型火箭弹参数生成射界距离圈、水平距离刻度,然后应用arcpy.SymDiff_analysis模块生成安全射界区,以遥感影像为底图标注安全射界编号,标注刻度,最后应用arcpy.mapping制图模块实现对
图1 作业点安全射界绘制流程
Fig.1 The process of drawing safe shooting range zones of operation sites
作业点、敏感区域、安全射界范围表、作业单位、作业装备及年检等基础信息绘制出图。
4 自动化绘制安全射界
4.1 安全射界底图
以高清地图为底图,选用近2年内空间分辨率不低于15 m的卫星遥感影像图,或1:250 000以上比例尺地图作为底图,能够显示行政区域、道路线、水系、铁路、高速公路、行政村庄等基础地理信息图层。
4.2 定位作业点
本文根据GPS勘测定位的经纬度、高程文件,使用CreateFeatureclass函数可以在GIS中定位创点;人影作业点较多时,可使用MakeXYEventLayer函数批量定位创点。
部分代码如下:
x =24.XXXXXX
y=101.XXXXXX #GPS勘测定位的经纬度坐标
pointGeoList=[]
spatial_reference=arcpy.SpatialReference(4490)#用China Geodetic Coordinate System2000作为空间参考
operating_sites=arcpy.Point(y,x)
point_geo=arcpy.PointGeometry(operating_sites,spatial_reference)#创建点要素
pointGeoList.append(point_geo)
arcpy.CopyFeatures_management(pointGeoList,“operating_sites.shp”)
#arcpy.MakeXYEventLayer_management(operating_sites.table,x,y,operating_sites,spatial_reference,z)
如果作业点多时,可用MakeXYEventLayer_management函数,根据源表中定义的 X 和Y坐标批量创建新的点要素图层。表包含 Z 坐标(高程值),则可以在创建事件图层时指定该字段。
4.3 绘制水平距离圈
以定位创建的作业点为圆心,利用MultipleRingBuffer函数,以1 km为半径绘制实线内圈圆,以火箭最低发射仰角的理论最大射程向上取整后的数值为半径绘制实线外圈圆,在自圆心正东方向的横轴上,以1km间隔用GeneratePointsAlongLines函数标出距离刻度,并标注内、外圈圆对应的距离刻度数值,实线内外圈圆、距离刻度线宽为0.52 mm。
部分代码如下:
Maximum_range=8
radius=1
distances=[j for j in range(radius,Maximum_range+radius,radius)]
arcpy.MultipleRingBuffer_analysis(“operating_sites.shp”,outFeatureClass,distances,bufferUnit,“”,“ALL”)#按1 km间隔,最大外圈8 km绘制圆环
arcpy.GeneratePointsAlongLines_management(horizontal_line,Horizontal_scale,“DISTANCE”,Distance=“1Kilometers”)#按1km间隔,生成水平距离刻度
4.4 射击距离圈
使用MultipleRingBuffer函数和GeneratePointsAlongLines函数,结合BL-1A型火箭弹发射仰角(55°~85°)理论最大射程为半径,按5°间隔生成射击距离圈,线宽为0.26 mm,在自圆心向正北方向的纵轴上,标注对应射击仰角数值。
部分代码如下:
BL1A_distances=[3.202,4.184,5.034,5.818,6.491,7.163,7.796]#BL-1A型火箭弹不同发射仰角的最大射程
bufferUnit=“Kilometers”
arcpy.MultipleRingBuffer_analysis(“operating_sites.shp”,BL1A_ring,BL1A_distances,buffer Unit,“”,“ALL”)
4.5 绘制方位线
使用BearingDistanceToLine函数,以作业点为中心,正北方向为起始角,15°为分割角进行距离圈等角分割(从实际应用情况出发可任意设置角度等分分割),距离圈等分分成若干个扇形区。在最外水平距离圈外侧标注对应方位角数值,方位线线宽为0.26 mm。
等份划分圆部分代码如下:
n=24 #将射界圈按15°等角划分成24等份
degrees=[(j+1)* 360/n for j in range(n)]
if os.path.exists(env+“table.dbf”):
arcpy.Delete_management(“table.dbf”)
tablefc=arcpy.CreateTable_management(env,“table.dbf”)
arcpy.AddField_management(tablefc,“degrees”,“FLOAT”,“”,“”,“”,“”,“”,“”,“”)#在创建好的属性表里增加分割角字段
cursor=arcpy.InsertCursor(tablefc)
i=0
while i row=cursor.newRow() row.degrees=degrees[i] cursor.insertRow(row) i+=1 del cursor arcpy.BearingDistanceToLine_management(“table. dbf”,“lines”,“y”,“x”,“Maximum_range”,bufferUnit,“degrees”,“DEGREES”,“RHUMB_LINE”,“”,spatial_reference)#用原点夹角距离定义方位线。 start_x表示起点纬度坐标字段,start_y表示起点经度坐标字段,distance表示从起点出发的距离,degrees表示北偏方位角,bearing输出线旋转的方位角方位角,以北为基准方向按顺时针进行测量(图2)。 图2 方位线参数 按照人工影响天气火箭作业点安全射界图绘制规范要求,安全射界范围选取要遵循以下原则: (1)以发射架中心为基准,火箭发射正前方1km内应无人口密集区和重要设施。 (2)避开人口密集区,如:城镇、村庄、学校等。 (3)避开重要的设施,如:油库、化工厂、文物古迹、高速铁路、军事设施等。 (4)安全射界边界与人口密集区和重要设施的距离要大于200 m。 通过调用arcpy.SymDiff_analysis: arcpy.SymDiff_analysis(Densely_populated_infrastructure,BL1A_ring,Safe_area,“ALL”,clusterTolerance),使用SymDiff交集取反函数,将选取的重要设施及人口密集区等基础地理信息要素与安全射界扇形范围交集取反,得出需要的安全射界区,其结果如图3(分别通过调用“天地图”提供的街道“矢量地图”和卫星“影像地图”得到,其中“矢量地图”的数据较为丰富,按照行政等级逐步列出省市、村镇、街道办的名称以及街道的路名等,“影像地图”的清晰率较高,地图可以识别出偏远地区的图像)。或者也可以利用arcpy.SelectLayerByLocation_management函数,按照地理位置选择安全射界区域。 图3 BL-1A型火箭弹作业安全射界区 由于火箭防雹具有操作简易、安全性好等优点,不少地区在防雹作业装备更新时都选择了火箭作业装备[16]。为了满足地面火箭作业中绘制安全射界图的业务需要,本文利用ArcPy库探讨了人影地面作业点安全射界图(以BL-1A火箭为例)的自动化绘制方法,保证了绘制的科学性和准确性,有助于开展安全作业,保障人民生命财产安全和社会稳定。 基于ArcPy构建的自动化绘制方法,设计思路清晰,操作简单:通过人影作业点(经纬度、海拔、类型、等级、地址)、火箭型号、地理影像底图、地形图数据、基础地理信息数据等保密数据的入库管理,自动绘制水平距离圈、射击距离圈、方位线段和安全射界区;基于精确的地图底图,可以实现按照相关行业标准要求,输入作业点坐标、火箭器具型号等实时输出人工影响天气作业安全射界图。 本文探讨了安全射界区的自动绘制办法,但面对基层业务人员操作简易、一键出图的需要,还需针对安全射界图中的文字说明、标题、表格等非图形要素完善自动生成方法。4.6 绘制安全射界区
5 结论与讨论