python 筛选目标区域内的站点
想处理一下黄河流域内的国家站点数据,那么我需要筛选黄河流域内有哪些站点
这里涉及到:青海、四川、甘肃、宁夏、陕西、内蒙、山西、河南、山东
有这些省的所有国家站列表,但是需要筛出黄河流域内的站点
我用文心一言查了查代码,py使用的是3.9,代码和文心一言给出的有点出入,尤其是使用:sjoin函数
所得结果不是很理想,但是能凑合用,输出的excel是把黄河流域的站点给标出来了,我把没用的手动删除了
python代码如下:
#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: stationhuang.py @time: 2024/12/13 @desc: """ import pandas as pd import geopandas as gpd from shapely.geometry import Point # 读取Excel文件到Pandas数据框 sites_df = pd.read_excel('F:/各省国家站.xlsx',sheet_name='Sheet1') # 假设Excel文件中有'latitude'和'longitude'列 # 确保这些列的数据类型是正确的(通常是float) # 读取Shapefile到GeoPandas地理数据框 admin_gdf = gpd.read_file('G:/标准地图/黄河流域/矢量数据/shp格式/黄河流域界.shp') # 将站点数据框转换为GeoPandas地理数据框 # 创建点几何对象 geometry = [Point(xy) for xy in zip(sites_df['longitude'], sites_df['latitude'])] sites_gdf = gpd.GeoDataFrame(sites_df, geometry=geometry) # 设置坐标参考系统(CRS),这取决于你的数据和需求 # 如果没有特定的CRS,可以省略这一步或设置为适当的CRS # 例如,WGS84(EPSG:4326)是常用的地理坐标系统 sites_gdf.set_crs(epsg=4326, inplace=True) admin_gdf.set_crs(epsg=4326, inplace=True) # 如果行政区数据不是WGS84,并且站点数据是,你可能需要将它们转换到相同的CRS # 这通常涉及到投影转换,可以使用to_crs()方法 # 例如:admin_gdf = admin_gdf.to_crs(epsg=你的目标CRS) # 使用空间连接(spatial join)将站点匹配到行政区 # 这里我们使用sjoin函数,它默认进行左连接(left join) # how='inner' 会进行内连接,只保留匹配到的站点 matched_sites_gdf = gpd.sjoin(sites_gdf, admin_gdf, how="left") # 如果只需要匹配到的站点,可以过滤掉NaN值 # matched_sites_gdf = matched_sites_gdf.dropna(subset=['黄河流域']) # 将结果保存回Excel文件 matched_sites_df = matched_sites_gdf.drop(columns=['geometry']) # 如果不需要几何列 matched_sites_df.to_excel('F:/黄河流域_sites.xlsx', index=False)
得到结果:
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程