利用python批量將.shp文件轉換坐標生成.geojson文件,再將.geojson轉換成.csv文件,最后將csv文件插入數據庫表

第一步:.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條數據...' % (index+1))# 讀取 Shapefile 文件gdf = gpd.read_file(os.path.join(input_folder, shapefile))# 對幾何數據進行坐標系轉換gdf.to_crs(out_proj, inplace=True)# 構造輸出文件名,將 '.shp' 替換為 '.geojson'output_file = os.path.splitext(shapefile)[0] + '.geojson'# 保存為 GeoJSON 文件gdf.to_file(os.path.join(output_folder, output_file), driver='GeoJSON')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條數據...' % (index+1))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', axis=1)# 更新ID計數器id_counter += len(data)# 將所有字段中的空值設置為 nulldata = data.fillna(value='null')# 指定輸出文件名(與原始文件同名,只改變后綴名)output_file = os.path.splitext(os.path.basename(input_file))[0] + '.csv'output_full_path = os.path.join(output_dir, output_file)# 導出為 CSV 文件data.to_csv(output_full_path, index=False)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條數據...'%(index+1))# 讀取CSV文件data = pd.read_csv(csv_file, encoding='utf-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 = f"INSERT INTO {table_name} ({columns}) VALUES ({values})"# 批量插入數據records = data.values.tolist()cursor.executemany(insert_query, records)# 提交事務
conn.commit()# 關閉游標和連接
cursor.close()
conn.close()print("數據導入mysql成功...")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714040.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714040.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【王道操作系統】ch1計算機系統概述-04操作系統結構

文章目錄 【王道操作系統】ch1計算機系統概述-04操作系統結構操作系統的內核操作系統的體系結構考綱新增內容(紅色為全新內容,黃色為原有內容):01 分層結構02 模塊化03 宏內核(大內核)和微內核04 外核 【王…

redis03 八種數據類型

思維草圖 String類型 字符串類型,是redis中最簡單的存儲類型,可以包含任何數據,例如jpg圖片或者序列化的對象等,底層都是以字節數組形式存儲,最大能存儲512MB的數據。 常用命令 KEY命名規范 加前綴,分…

802.11局域網的 MAC 幀

目錄 802.11 局域網的 MAC 幀 802.11 數據幀的三大部分 1.關于 802.11 數據幀的地址 最常用的兩種情況 2.序號控制字段、持續期字段和幀控制字段 802.11 局域網的 MAC 幀 802.11 幀共有三種類型:控制幀、數據幀和管理幀。 802.11 數據幀的三大部分 MAC 首部&…

總結springboot啟動jar,指定配置文件

第一:覆蓋 -- 覆蓋系統中的文件中的application-dev.yml文件,兩種指定方法都可以 springboot默認優先讀取application.properties>application.yml>指定文件(application-dev.yml) 公共配置可以在application.yml,其他配置在applicatio…

基于 STM32U5 片內溫度傳感器正確測算溫度

目錄預覽 1、引言 2、問題 3、小結 01 引言 STM32 在內部都集成了一個溫度傳感器,STM32U5 也不例外。這個位于晶圓上的溫度傳感器雖然不太適合用來測量外部環境的溫度,但是用于監控晶圓上的溫度還是挺好的,以防止芯片過溫運行。 02 問題…

C# - 類與類之間的繼承關系判斷

Type.IsSubclassof(Type type) 作用:用來確定 一個類是否派生自另一個類/ValueType/Enum/委托 不能用于確定:接口是派生自另一個接口,還是類實現接口 class A{} class B : A{}A a; B b;var boo b.GetType().IsSubclassOf(typeof(A)) // t…

sqllabs第五關floor報錯注入

實驗環境sqllabs第五關 floor()報錯注入的原因是group by在向臨時表插入數據時,由于rand()多次計算導致插入臨時表時主鍵重復,從而報錯,又因為報錯前concat()中的SQL語句或函數被執行,所以該語句報錯且被拋出的主鍵是SQL語句或函…

go語言中的協程和Java中線程以及進程的區別

理解 Go 語言中的協程(Goroutine)、Java 中的線程和進程之間的區別可以從以下幾個方面來看: 輕量性: Goroutine(協程): 協程是非常輕量級的執行單位,創建和銷毀的成本很低。在 Go 中…

深入理解Lambda表達式:基礎概念與實戰演練【第114篇—python:Lambda表達式】

深入理解Lambda表達式:基礎概念與實戰演練 在現代編程語言中,Lambda表達式作為一種輕量級的匿名函數形式,越來越受到程序員的青睞。特別是在函數式編程興起的今天,Lambda表達式在簡化代碼、提高可讀性方面發揮著重要作用。本文將…

C++筆記(六)--- 靜態成員變量/函數(static)

目錄 C語言中靜態變量 C靜態成員變量 C靜態成員函數 C語言中靜態變量 1.函數內部用static修飾的變量,只能在此函數使用,但所修飾的變量不隨函數釋放而釋放,下次調用時的值仍為上次結束時的值2.static修飾的全局變量只能在其定義的文件使用…

華為OD技術面試案例6-2024年

個人情況:西電本,二戰某985基本寄了。知識儲備方面:無任何408基礎,學校開過數據結構課程60分過,python純靠自學,無任何刷題經驗,無項目經驗,簡歷東拼西湊。 大概是12月底和OD聯系&a…

數據可視化原理-騰訊-熱力圖

在做數據分析類的產品功能設計時,經常用到可視化方式,挖掘數據價值,表達數據的內在規律與特征展示給客戶。 可是作為一個產品經理,(1)如果不能夠掌握各類可視化圖形的含義,就不知道哪類數據該用…

CSP-201712-2-游戲

CSP-201712-2-游戲 解題思路 初始化變量:定義整數變量n和k,分別用來存儲小朋友的總數和淘汰的特定數字。然后定義了num(用來記錄當前報的數)和peopleIndex(用來記錄當前報數的小朋友的索引)。 初始化小朋…

MATLAB環境下基于離散小波變換的體外血管圖像處理

下面簡要介紹小波變換的部分應用。 信號去噪。小波去噪是根據有效信號和噪聲信號在小波變換后表現出的不同特性實現的,一般可用于去除語音、圖像、視頻等中的噪聲信號。小波去噪方法根據對小波系數的非線性處理方式分為三類,分別是小波變換模極大值去噪…

電子電器架構新趨勢 —— 最佳著力點:域控制器

電子電器架構新趨勢 —— 最佳著力點:域控制器 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師(Wechat:gongkenan2013)。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師…

備戰藍橋杯---狀態壓縮DP基礎1之棋盤問題

它只是一種手段,一種直觀而高效地表示復雜狀態的手段。 我們先來看一道比較基礎的: 直接DFS是肯定不行,我們發現對某一行,只要它前面放的位置都一樣,那么后面的結果也一樣。 因此我們考慮用DP,并且只有0/…

Vue3+Element-Plus中ELMessage樣式丟失處理

Vu3Element-Plus項目中,element-plus使用按需引入有時會出現樣式失效和在vscode中使用會報錯[找不到名稱“ElMessage”。ts(2304)]錯誤 ELMessage彈框樣式丟失處理方法 使用按需引入就不能手動再引入 import { ElMessage } from "element-plus";ElMessage.success…

藍橋杯-單片機組基礎6——定時計數器與外部中斷混合使用(附小蜜蜂課程代碼)

藍橋杯單片機組備賽指南請查看這篇文章:戳此跳轉藍橋杯備賽指南文章 本文章針對藍橋杯-單片機組比賽開發板所寫,代碼可直接在比賽開發板上使用。 型號:國信天長4T開發板(綠板),芯片:IAP15F2K6…

常見的瀏覽器跨域解決方法

1. 前端方法&#xff1a;JSONP&#xff08;僅適用于GET請求&#xff09; JSONP&#xff08;JSON with Padding&#xff09;是一種利用<script>標簽的src屬性不受同源策略限制的特性來實現跨域數據請求的方法。JSONP通過在前端動態創建<script>標簽&#xff0c;并將…

4.1.CVAT——目標檢測的標注詳細步驟

文章目錄 1. 進入任務1. 創建任務2. 已創建的task3. 進入標注界面 2. 選擇標注類型2.1 選擇標注類型2.2 進行標注2.3 遮擋 2.快捷鍵3.導出標注結果 1. 進入任務 登錄后會看到如下圖界面&#xff0c;CVAT的標注最小單位是Task&#xff0c;每個Task為一個標注任務。點擊Task按鈕…