Python?shapefile轉(zhuǎn)GeoJson的2種方式實(shí)例
GeoJson的簡(jiǎn)要介紹
GeoJson是用json的語(yǔ)法表達(dá)和存儲(chǔ)地理數(shù)據(jù),可以說(shuō)是json的子集。
GeoJson以鍵值對(duì)的形式保存原有對(duì)象的信息,具有輕量化、易解析等優(yōu)點(diǎn)。
GeoJson包括的地理要素有Point(點(diǎn))、 MultiPoint(多點(diǎn))、 LineString(線)、MultiLineString(多線)、 Polygon(面)、 MultiPolygon(多面)、 GeometryCollection(幾何集合)
這些地理要素包括在geometry的type屬性中,并且不同的type具有不同的coordinates值。更多的GeoJson相關(guān)內(nèi)容可參考RFC7946標(biāo)準(zhǔn)。
{
"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]
]
]
]
}兩種將shapefile文件轉(zhuǎn)換為GeoJson的方式
1. 使用geopandas
核心代碼:geopandas.GeoSeries 和out_data.to_file
import geopandas as gpd
def shp2geojson_gpd(shp_file, geojson_file):
"""
將shapefile格式的文件轉(zhuǎn)化為geojson
:param shp_file: 需要轉(zhuǎn)換的shapefile文件名,投影信息可以缺失,也可以指定
:param geojson_file: 轉(zhuǎn)換輸出的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轉(zhuǎn)換的時(shí)候兩行核心代碼即可搞定,簡(jiǎn)單粗暴。但是在實(shí)踐過(guò)程中發(fā)現(xiàn),采用geopandas轉(zhuǎn)換后的GeoJson文件并沒(méi)有保留shapefile中的屬性properities信息,如area, name等,如下圖所示:

2. 使用gdal
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)
# 創(chuàng)建結(jié)果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())
# 生成結(jié)果文件
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")結(jié)果包含原始shapefile文件中的屬性信息:

總結(jié)
到此這篇關(guān)于Python shapefile轉(zhuǎn)GeoJson的2種方式的文章就介紹到這了,更多相關(guān)Python shapefile轉(zhuǎn)GeoJson內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中tkinter+MySQL實(shí)現(xiàn)增刪改查
這篇文章主要介紹了Python中tkinter+MySQL實(shí)現(xiàn)增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
用python的turtle模塊實(shí)現(xiàn)給女票畫個(gè)小心心
今天小編就為大家分享一篇用python的turtle模塊實(shí)現(xiàn)給女票畫個(gè)小心心,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
深入探討Python中的內(nèi)置類屬性`__repr__`
在Python中,__repr__是一個(gè)特殊的內(nèi)置類屬性,用于定義類的字符串表示形式,本文將深入探討__repr__的作用、用法以及一些實(shí)際應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助2023-12-12
如何通過(guò)Python3和ssl實(shí)現(xiàn)加密通信功能
這篇文章主要介紹了如何通過(guò)Python3和ssl實(shí)現(xiàn)加密通信功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
python同義詞替換的實(shí)現(xiàn)(jieba分詞)
這篇文章主要介紹了python同義詞替換的實(shí)現(xiàn)(jieba分詞),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python爬蟲實(shí)例——爬取美團(tuán)美食數(shù)據(jù)
這篇文章主要介紹了Python爬蟲如何爬取美團(tuán)美食數(shù)據(jù),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
python命令行交互引導(dǎo)用戶選擇寵物實(shí)現(xiàn)
這篇文章主要為大家介紹了python命令行交互引導(dǎo)用戶選擇寵物實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

