在網(wǎng)上做翻譯的網(wǎng)站市場(chǎng)營銷策劃方案3000字
在地理信息系統(tǒng)(GIS)領(lǐng)域,數(shù)據(jù)格式之間的轉(zhuǎn)換是一項(xiàng)常見的需求。例如,將 Shapefile 格式轉(zhuǎn)換為 GeoJSON 格式,對(duì)于上傳數(shù)據(jù)到 Google Earth Engine (GEE) 尤其有用。本文將通過一個(gè) Python 腳本的示例,實(shí)現(xiàn)批量將 Shapefile 文件轉(zhuǎn)換為 GeoJSON 文件。
準(zhǔn)備工作
在開始之前,請(qǐng)確保已安裝了 Python 和 arcpy
庫。arcpy
是 Esri ArcGIS 提供的 Python 庫,它允許開發(fā)者自動(dòng)化 ArcGIS 的地理數(shù)據(jù)處理功能。
腳本解析
導(dǎo)入必要的庫
import os
import arcpy
這里導(dǎo)入了 os
庫來處理文件路徑和文件列表,以及 arcpy
庫來執(zhí)行地理數(shù)據(jù)的轉(zhuǎn)換。
定義轉(zhuǎn)換函數(shù)
def convert_to_geojson(shp_path, geojson_path):"""將 Shapefile 轉(zhuǎn)換為 GeoJSON 格式。:param shp_path: Shapefile 文件路徑:param geojson_path: GeoJSON 文件保存路徑"""arcpy.env.overwriteOutput = True # 允許覆蓋已有輸出文件arcpy.conversion.FeaturesToJSON(in_features=shp_path,out_json_file=geojson_path,format_json="NOT_FORMATTED",geoJSON="GEOJSON",outputToWGS84="WGS84",use_field_alias="USE_FIELD_NAME")print(f'{geojson_path} 轉(zhuǎn)換完成!')
此函數(shù)接受兩個(gè)參數(shù):shp_path
表示 Shapefile 的路徑,geojson_path
表示輸出的 GeoJSON 文件路徑。函數(shù)內(nèi)部使用 arcpy.conversion.FeaturesToJSON
方法來執(zhí)行轉(zhuǎn)換,并設(shè)置了幾個(gè)參數(shù)來控制輸出的格式和坐標(biāo)系統(tǒng)。
獲取特定擴(kuò)展名的文件列表
def get_files_with_extension(directory, extension):"""獲取指定目錄下所有具有特定擴(kuò)展名的文件。:param directory: 目錄路徑:param extension: 文件擴(kuò)展名:return: 包含指定擴(kuò)展名文件名的列表"""directory = os.path.normpath(directory)all_files = os.listdir(directory)files_with_extension = [file for file in all_files if file.endswith(extension)]return files_with_extension
該函數(shù)用于獲取指定目錄下所有具有特定擴(kuò)展名的文件,并返回一個(gè)包含這些文件名的列表。
主程序
if __name__ == '__main__':shp_folder_path = "xxx"json_folder_path = "xxx"shp_files = get_files_with_extension(directory=shp_folder_path, extension='.shp')print(f"找到 '.shp' 文件: {shp_files}")for shp_name in shp_files:geo_name = f"{shp_name.split('.')[0]}.geojson"feature_shp = os.path.join(shp_folder_path, shp_name)feature_geojson = os.path.join(json_folder_path, geo_name)convert_to_geojson(shp=feature_shp, geojson=feature_geojson)
在主程序部分,我們首先設(shè)置了 Shapefile 和 GeoJSON 文件的存儲(chǔ)路徑。接著,我們調(diào)用 get_files_with_extension
函數(shù)來獲取所有 Shapefile 文件,并遍歷這些文件,為每個(gè)文件調(diào)用 convert_to_geojson
函數(shù)進(jìn)行轉(zhuǎn)換。
案例代碼
# -*- coding: utf-8 -*-
"""
此腳本用于批量將指定文件夾下的 Shapefile (.shp) 文件轉(zhuǎn)換為 GeoJSON 文件。
生成的 GeoJSON 文件將保存在指定的目標(biāo)文件夾中。"""import os
import arcpydef Model(shp, json): # a_Feature to json"""將 Shapefile 轉(zhuǎn)換為 GeoJSON 文件。參數(shù):shp (str): 輸入的 Shapefile 文件路徑。json (str): 輸出的 GeoJSON 文件路徑。"""# 允許覆蓋輸出文件arcpy.env.overwriteOutput = True# 轉(zhuǎn)換 Shapefile 為 GeoJSONarcpy.conversion.FeaturesToJSON(in_features=shp,out_json_file=json,format_json="NOT_FORMATTED",geoJSON="GEOJSON",outputToWGS84="WGS84",use_field_alias="USE_FIELD_NAME")print(f'{json} conversion completed!')def get_files_with_extension(directory, extension):"""獲取指定文件夾中具有特定擴(kuò)展名的所有文件名。參數(shù):directory (str): 文件夾路徑。extension (str): 文件擴(kuò)展名(包括點(diǎn),例如 '.shp')。返回:list: 包含指定擴(kuò)展名文件名的列表。"""# 規(guī)范化目錄路徑directory = os.path.normpath(directory)# 獲取文件夾中的所有文件all_files = os.listdir(directory)# 篩選出指定擴(kuò)展名的文件files_with_extension = [file for file in all_files if file.endswith(extension)]# 返回結(jié)果return files_with_extensionif __name__ == '__main__':# 設(shè)置全局環(huán)境變量shp_folder_path = fr"E:\temp"json_folder_path = fr"E:\Geojson"# 獲取指定文件夾下所有后綴為 .shp 的文件名列表shp_files = get_files_with_extension(directory=shp_folder_path, extension='.shp')print(f"find '.shp' file: {shp_files}")# 遍歷所有 .shp 文件for shp_name in shp_files:# 生成對(duì)應(yīng)的 GeoJSON 文件名geo_name = shp_name.split('.')[0] + '.geojson'# 構(gòu)建完整的文件路徑feature_shp = os.path.join(shp_folder_path, shp_name)feature_geojson = os.path.join(json_folder_path, geo_name)# 調(diào)用 Model 函數(shù)批量轉(zhuǎn)換 Shapefile 為 GeoJSONModel(shp=feature_shp, json=feature_geojson)
小結(jié)
通過上述腳本,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單而有效的批量轉(zhuǎn)換工具,可以將 Shapefile 文件轉(zhuǎn)換為 GeoJSON 格式。這對(duì)于需要將地理數(shù)據(jù)上傳至 GEE 的用戶而言,是一個(gè)非常有用的工具。自動(dòng)化此過程能夠顯著節(jié)省時(shí)間和精力,尤其是在處理大量數(shù)據(jù)時(shí)。
術(shù)語 | 解釋 |
---|---|
Shapefile | 一種地理矢量數(shù)據(jù)存儲(chǔ)格式,由 ESRI 開發(fā),用于存儲(chǔ)矢量地理信息。 |
GeoJSON | 一種開放標(biāo)準(zhǔn)的格式,用來表示地理空間對(duì)象。 |
Google Earth Engine (GEE) | 由 Google 提供的一個(gè)基于云端的平臺(tái),用于大規(guī)模地理空間數(shù)據(jù)分析。 |
arcpy | Esri ArcGIS 的 Python API,提供了與 ArcGIS 進(jìn)行交互的能力。 |
arcpy.conversion.FeaturesToJSON | 一個(gè)函數(shù),用于將矢量特征轉(zhuǎn)換成 JSON 或 GeoJSON 格式。 |
如果這對(duì)您有所幫助,希望點(diǎn)贊支持一下作者! 😊



詳細(xì)全文-點(diǎn)擊查看