您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python shapefile轉GeoJson的方法有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python shapefile轉GeoJson的方法有哪些”文章能幫助大家解決問題。
GeoJson是用json的語法表達和存儲地理數據,可以說是json的子集。
GeoJson以鍵值對的形式保存原有對象的信息,具有輕量化、易解析等優點。
GeoJson包括的地理要素有Point(點)、 MultiPoint(多點)、 LineString(線)、MultiLineString(多線)、 Polygon(面)、 MultiPolygon(多面)、 GeometryCollection(幾何集合)
這些地理要素包括在geometry的type屬性中,并且不同的type具有不同的coordinates值。
{ "type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } { "type": "MultiPolygon", "coordinates": [ [ [ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0] ] ], [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ], [ [100.2, 0.2], [100.2, 0.8], [100.8, 0.8], [100.8, 0.2], [100.2, 0.2] ] ] ] }
核心代碼:geopandas.GeoSeries 和out_data.to_file
import geopandas as gpd def shp2geojson_gpd(shp_file, geojson_file): """ 將shapefile格式的文件轉化為geojson :param shp_file: 需要轉換的shapefile文件名,投影信息可以缺失,也可以指定 :param geojson_file: 轉換輸出的geojson文件名 """ if os.path.exists(geojson_file): os.remove(geojson_file) out_data = gpd.read_file(shp_file) crs = out_data.crs out_data = gpd.GeoSeries(out_data.geometry, crs=crs) out_data.to_file(geojson_file, driver='GeoJSON', encoding="utf-8") print("successfully convert shapefile to geojson")
使用geopandas轉換的時候兩行核心代碼即可搞定,簡單粗暴。但是在實踐過程中發現,采用geopandas轉換后的GeoJson文件并沒有保留shapefile中的屬性properities信息,如area, name等,如下圖所示:
import gdal import ogr import os def shp2geojson_gdal(shp_file, geojson_file): gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES") gdal.SetConfigOption("SHAPE_ENCODING", "GBK") src_ds = ogr.Open(shp_file) src_layer = src_ds.GetLayer(0) # 創建結果Geojson baseName = os.path.basename(geojson_file) dst_driver = ogr.GetDriverByName('GeoJSON') dst_ds = dst_driver.CreateDataSource(geojson_file) if dst_ds.GetLayer(baseName): dst_ds.DeleteLayer(baseName) dst_layer = dst_ds.CreateLayer(baseName, src_layer.GetSpatialRef()) dst_layer.CreateFields(src_layer.schema) dst_feat = ogr.Feature(dst_layer.GetLayerDefn()) # 生成結果文件 for feature in src_layer: dst_feat.SetGeometry(feature.geometry()) for j in range(feature.GetFieldCount()): dst_feat.SetField(j, feature.GetField(j)) dst_layer.CreateFeature(dst_feat) del dst_ds del src_ds print("successfully convert shapefile to geojson")
結果包含原始shapefile文件中的屬性信息:
關于“Python shapefile轉GeoJson的方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。