import os
import geopandas as gpd
import pandas as pd
file=os.listdir(r\\IP_Address\winshare\Affected_Area_Files)
path=[os.path.join(r\\IP_Address\winshare\Affected_Area_Files,i)
for i in file:
if".shp" in i:
# Below code need to be explained:
gdf=gpd.GeoDataFame(pd.concat([gpd.read_file(i).to_crs(gpd.read_file(path[0]).crs)for i in path],ignore_index=True),crs=gpd.read_file(path[0]).crs)
gdf.to_file(r\\IP_Address\winshare\affected_area\combined-AffectedArea_Test.shp)
我是Python的新手,代码必须进行优化以获得更好的性能。它运行得很好,但现在执行时间相当长
1条答案
按热度按时间8aqjt8rx1#
此代码使用geopandas库读取位于路径列表中文件路径的多个shapefile(扩展名为.shp的文件),并将它们连接到单个GeoDataFrame中。gpd.read_file(i)函数读取每个shapefile,而to_crs函数用于确保它们都具有与路径列表中第一个shapefile相同的坐标参考系(CRS)。
读入并连接所有shapefile后,生成的GeoDataFrame将保存到新shapefile combined-AffectedArea_Test.shp中,该shapefile位于文件路径r\IP_Address\winshare\affected_area。
考虑到性能,您应尽量避免在ignore_index=True的情况下使用pd.concat,因为它的计算开销很大。您可以尝试改用gpd.GeoDataFrame.append()方法。此外,您应尽量避免多次阅读文件。您可以尝试一次性读取所有文件,然后写入最终文件。