马格南摄影网站,网站建设投标方案,外国做家具的网站,免费空间清理软件第一步#xff1a;.shp批量转.geojson
# author: JMY
# 创建时间: 2024/2/26 17:12
# 批量将.shp文件生成geojson文件并转换坐标为3857import os
import geopandas as gpd# 定义输入和输出文件夹路径
input_folder shp文件
output_folder geojson文件# 定义输入和输出坐标系…第一步.shp批量转.geojson
# author: JMY
# 创建时间: 2024/2/26 17:12
# 批量将.shp文件生成geojson文件并转换坐标为3857import os
import geopandas as gpd# 定义输入和输出文件夹路径
input_folder shp文件
output_folder geojson文件# 定义输入和输出坐标系
out_proj EPSG:3857# 获取输入文件夹下所有的 Shapefile 文件
shapefiles [f for f in os.listdir(input_folder) if f.endswith(.shp)]# 循环处理每个 Shapefile 文件
for index, shapefile in enumerate(shapefiles):print(转换第%d条数据... % (index1))# 读取 Shapefile 文件gdf gpd.read_file(os.path.join(input_folder, shapefile))# 对几何数据进行坐标系转换gdf.to_crs(out_proj, inplaceTrue)# 构造输出文件名将 .shp 替换为 .geojsonoutput_file os.path.splitext(shapefile)[0] .geojson# 保存为 GeoJSON 文件gdf.to_file(os.path.join(output_folder, output_file), driverGeoJSON)print(Shapefile 转换为包含 EPSG:3857 坐标系的 GeoJSON 完成)
第二步.geojson批量转.csv
# author: JMY
# 创建时间: 2024/2/23 15:16
# 批量将geojson文件生成csv文件import os
import geopandas as gpd
import json# 定义一个函数用于从几何信息中提取坐标
def extract_coordinates(geom):if geom:return json.dumps(geom.__geo_interface__[coordinates])else:return None# 输入目录和输出目录路径
input_dir geojson文件 # GeoJSON 文件所在目录路径
output_dir csv文件 # CSV 文件保存目录路径# 获取输入目录下的所有 GeoJSON 文件名
file_names [f for f in os.listdir(input_dir) if f.endswith(.geojson)]# 初始化ID计数器
id_counter 0for index,file_name in enumerate(file_names):print(插入第%d条数据... % (index1))input_file os.path.join(input_dir, file_name)# 读取 GeoJSON 数据并创建 GeoDataFrame 对象data gpd.read_file(input_file)# 在DataFrame中插入一个自增的id列作为第一列并累加ID计数器data.insert(0, id, range(1 id_counter, len(data) id_counter 1))data.insert(1, cun_id, -1)# 提取 coordinates 和 type 信息data[type] data[geometry].apply(lambda geom: geom.geom_type if geom else None)data[coordinates] data[geometry].apply(extract_coordinates)# 删除原始的 geometry 列data data.drop(geometry, axis1)# 更新ID计数器id_counter len(data)# 将所有字段中的空值设置为 nulldata data.fillna(valuenull)# 指定输出文件名与原始文件同名只改变后缀名output_file os.path.splitext(os.path.basename(input_file))[0] .csvoutput_full_path os.path.join(output_dir, output_file)# 导出为 CSV 文件data.to_csv(output_full_path, indexFalse)print(输出完成......)第三步.csv批量插入数据库表
# author: JMY
# 创建时间: 2024/2/23 16:35
# 多个csv文件导入数据库同一张表中import os
import glob
import pandas as pd
import mysql.connector# 建立与MySQL数据库的连接
conn mysql.connector.connect(host, # 主机ipuser, # 账号password, # 密码database # 数据库
)# CSV目录路径
csv_directory csv文件# 获取目录中的所有CSV文件
csv_files glob.glob(os.path.join(csv_directory, *.csv))# 创建游标对象
cursor conn.cursor()# 循环处理每个CSV文件
for index,csv_file in enumerate(csv_files):print(插入第%d条数据...%(index1))# 读取CSV文件data pd.read_csv(csv_file, encodingutf-8) # 根据实际情况指定编码# 将除了id和cun_id外的其他字段转换为字符串类型for column in data.columns:if column not in [id,cun_id]:data[column] data[column].astype(str)# 构建SQL插入语句table_name village_yjjbnt # 表名columns , .join(data.columns)values , .join([%s] * len(data.columns))insert_query fINSERT INTO {table_name} ({columns}) VALUES ({values})# 批量插入数据records data.values.tolist()cursor.executemany(insert_query, records)# 提交事务
conn.commit()# 关闭游标和连接
cursor.close()
conn.close()print(数据导入mysql成功...)