import arcpyimport os# 设置工作空间desktop = os.path.join(os.path.expanduser("~"), "Desktop", "GIS")os.makedirs(desktop, exist_ok=True)arcpy.env.workspace = desktoparcpy.env.overwriteOutput = True# 输出路径output_path = os.path.join(arcpy.env.workspace, "world_grid_lines_3deg.shp")# 经纬度间隔lon_step = 3lat_step = 3# 删除已存在的文件if arcpy.Exists(output_path): arcpy.Delete_management(output_path) print("已删除旧文件")# 创建线要素类arcpy.CreateFeatureclass_management( out_path=arcpy.env.workspace, out_name="world_grid_lines_3deg.shp", geometry_type="POLYLINE", template=None, has_m="DISABLED", has_z="DISABLED", spatial_reference=arcpy.SpatialReference(4326) # WGS84)# 添加字段arcpy.AddField_management(output_path, "jd", "DOUBLE")arcpy.AddField_management(output_path, "wd", "DOUBLE")arcpy.AddField_management(output_path, "type", "TEXT", field_length=20)print("要素类已创建,开始添加要素...")# 使用插入游标添加要素with arcpy.da.InsertCursor(output_path, ["SHAPE@", "jd", "wd", "type"]) as cursor:# ========== 生成经线(固定经度,纬度变化) ==========print("正在生成经线...")for lon in range(-180, 181, lon_step): array = arcpy.Array([ arcpy.Point(lon, -90), arcpy.Point(lon, 90) ]) polyline = arcpy.Polyline(array, arcpy.SpatialReference(4326)) cursor.insertRow([polyline, lon, -999, "meridian"])# ========== 生成纬线(固定纬度,经度变化) ==========print("正在生成纬线...")for lat in range(-90, 91, lat_step): array = arcpy.Array([ arcpy.Point(-180, lat), arcpy.Point(180, lat) ]) polyline = arcpy.Polyline(array, arcpy.SpatialReference(4326)) cursor.insertRow([polyline, -999, lat, "parallel"])# 统计结果result_count = int(arcpy.GetCount_management(output_path)[0])# 分别统计经线和纬线meridian_layer = arcpy.SelectLayerByAttribute_management(output_path, "NEW_SELECTION", "type = 'meridian'")meridian_count = int(arcpy.GetCount_management(meridian_layer)[0])parallel_layer = arcpy.SelectLayerByAttribute_management(output_path, "NEW_SELECTION", "type = 'parallel'")parallel_count = int(arcpy.GetCount_management(parallel_layer)[0])arcpy.SelectLayerByAttribute_management(output_path, "CLEAR_SELECTION")print(f"\n[OK] 文件已生成:{output_path}")print(f"[OK] 经线数量:{meridian_count} 条")print(f"[OK] 纬线数量:{parallel_count} 条")print(f"[OK] 总线条数:{result_count} 条")print(f"[OK] 经度间隔:{lon_step} 度")print(f"[OK] 纬度间隔:{lat_step} 度")print(f"[OK] 字段:jd (经度), wd (纬度), type (线类型)")print(f"[OK] 坐标系统:EPSG:4326 (WGS84)")

夜雨聆风