合肥网站建设网站,做钓鱼网站教程,做植物提取物好的推广网站,客户管理系统内容代码适用于需要处理和分析地理空间数据的场景#xff0c;如城市规划、环境监测或自然资源管理#xff0c;其中它可以帮助用户读取特定区域的Shapefile文件#xff0c;确定其地理边界#xff0c;并基于这些边界计算出按照经纬度5度间隔的图幅编号#xff0c;进而用于地图制… 代码适用于需要处理和分析地理空间数据的场景如城市规划、环境监测或自然资源管理其中它可以帮助用户读取特定区域的Shapefile文件确定其地理边界并基于这些边界计算出按照经纬度5度间隔的图幅编号进而用于地图制作、空间数据管理和快速数据检索。 实现思路
代码主要用于处理地理空间数据具体功能如下
读取一个Shapefile.shp文件获取其地理边界范围。根据获取的边界范围计算出按照经纬度 5° 间隔的图幅编号。将每个国家的地图边界范围和对应的图幅编号存储起来并打印出来。 完整代码
import csv
import geopandas as gpddef get_map_extent(shp_file_path):读取.shp文件并获取其边界范围。:param shp_file_path: .shp文件路径:return: 地图边界的范围 (minx, miny, maxx, maxy)# 读取.shp文件gdf gpd.read_file(shp_file_path)# 获取地图边界boundary gdf.geometry.total_bounds# 返回地图范围return boundarydef calculate_sheet_ranges(map_extent):根据地图边界计算图幅范围并按照南北纬和东西经的5度分隔规则返回图幅范围的格式。:param map_extent: 地图边界的范围 (minx, miny, maxx, maxy):return: 图幅范围列表每个元素包含(lon_start, lat_start, lon_end, lat_end, sheet_range)minx, miny, maxx, maxy map_extent# 初始化图幅范围列表sheet_ranges []# 计算图幅编号# for lon_start in range(int(minx // 5) * 5, int(maxx // 5 1) * 5, 5):# for lat_start in range(int(miny // 5) * 5, int(maxy // 5 1) * 5, 5):for lon_start in range(int(minx // 5) * 5, int(maxx // 5 1) * 5, 5):for lat_start in range(int(miny // 5 1) * 5, int(maxy // 5 2) * 5, 5): # GLC_FCS30D 纬度需要上调一格5度lon_end lon_start 5lat_end lat_start 5sheet_range f{W if lon_start 0 else E}{abs(lon_start)} \f{S if lat_start 0 else N}{abs(lat_start)}sheet_ranges.append(sheet_range)return sheet_rangesdef main():iso_data []with open(../../ISO.csv, newline) as csvfile:# 创建 CSV 读取器csv_reader csv.reader(csvfile)data list(csv_reader) # 将文件内容读取到内存中# 初始化行数计数器iso_count 0for country in data:iso_count 1sids_country country[0]iso_map_extent [iso_count, sids_country] # [1, BMU]# 示例文件路径shp_file_path frpath_to_admin_division\{sids_country}.shp# 获取地图范围map_extent get_map_extent(shp_file_pathshp_file_path)# 计算图幅范围sheet_ranges calculate_sheet_ranges(map_extentmap_extent)# 打印结果print(iso_count, sids_country, map_extent)iso_map_extent.extend(sheet_ranges)iso_data.append(iso_map_extent)print(- Map Extent Num: , len(sheet_ranges), iso_map_extent[2:], \n)if __name__ __main__:main() 实现流程
导入库导入csv库用于读取CSV文件导入geopandas库用于处理地理空间数据。定义get_map_extent函数该函数接收一个.shp文件路径作为参数读取该文件并返回其地理边界范围。定义calculate_sheet_ranges函数该函数接收一个边界范围作为参数计算并返回一个图幅编号列表。图幅编号的计算规则是按照经纬度5度的间隔。定义main函数这是程序的主要执行函数。它首先读取一个CSV文件然后对于CSV文件中的每一个条目执行以下步骤 构造.shp文件路径。调用get_map_extent函数获取地图边界范围。调用calculate_sheet_ranges函数计算图幅编号。打印出当前处理的国家和其地图边界范围。将地图边界范围和图幅编号添加到结果列表中。 执行入口如果该脚本作为主程序运行将调用main函数。 代码运行示例
预备Shapefile文件 程序输出 应用范围
地理信息系统GIS用于处理和分析地理空间数据。地图制作确定地图的边界范围和图幅编号有助于地图的制作和布局。空间数据分析在进行空间数据分析时可以利用此脚本快速获取地图边界和图幅编号进而进行更深入的分析。科研和教育在地理学、城市规划、环境科学等领域的研究和教学中用于数据处理和分析。
注意事项
代码中的shp_file_path是一个格式化字符串需要根据实际的文件路径进行调整。calculate_sheet_ranges函数中的注释掉的代码块可能是用于不同的计算规则或示例。代码中的打印语句用于调试和验证展示了每个国家的边界范围和图幅编号。
相关函数及调用库的解释说明
函数及调用库描述csvPython标准库中的模块用于读写CSV逗号分隔值文件。在此代码中它被用来读取包含国家信息的CSV文件。geopandas一个开源项目扩展了pandas库的功能使其能够处理地理空间数据。它允许用户读取、处理和分析地理空间数据。get_map_extent(shp_file_path)此函数接收一个Shapefile的文件路径作为参数使用geopandas的read_file方法读取Shapefile并获取其几何边界。返回值是一个包含最小经度、最小纬度、最大经度、最大纬度的元组。calculate_sheet_ranges(map_extent)此函数接收一个地图边界范围作为参数并基于这个范围计算图幅编号。按照南北纬和东西经的5度间隔规则来划分图幅并返回一个包含这些图幅编号的列表。
如果这对您有所帮助希望点赞支持一下作者 点击查看原文