需求目的:将以CSV格式存储的经纬度点坐标文件,转换为shapefile的point类型和line类型的矢量数据,主要依赖geopandas和shapely包。
核心思想:采用shapely里面的Point空间数据模型来构建Point对象,并将其作为参数传入构建GeoPandas的主要类型之一GeoDataFrame的geometry属性中。在线要素的创建中,需要采用shapely的LineString空间数据模型,构建LineString对象传入geodataframe中。完整代码如下。
转换为点要素
# 转换为点要素,经纬度坐标格式为wgslng, wgslat
import os
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
# CSV转换为shapefile数据
def csv_to_points():
input_path = "E:\\Data\\csv\\"
output_path = "E:\\Data\\shp\\"
for file in os.listdir(input_path):
df = pd.read_csv(input_path+file, header=0, encoding='gbk')
geometry = [Point(xy) for xy in zip(df.wgslng, df.wgslat)] # 需要修改为对应的经纬度字段
gdf = gpd.GeoDataFrame(df, crs="EPSG:4326", geometry