欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?shapefile轉(zhuǎn)GeoJson的2種方式實例

 更新時間:2023年03月08日 10:35:06   作者:小李A(yù)I飛刀^_^  
geojson是地圖可視化系統(tǒng)中最常用的地理數(shù)據(jù)格式,幾乎所有主流地圖可視化庫或框架都支持geojson數(shù)據(jù)的加載,下面這篇文章主要給大家介紹了關(guān)于Python?shapefile轉(zhuǎn)GeoJson的2種方式的相關(guān)資料,需要的朋友可以參考下

GeoJson的簡要介紹

GeoJson是用json的語法表達(dá)和存儲地理數(shù)據(jù),可以說是json的子集。

GeoJson以鍵值對的形式保存原有對象的信息,具有輕量化、易解析等優(yōu)點。

GeoJson包括的地理要素有Point(點)、 MultiPoint(多點)、 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)換的時候兩行核心代碼即可搞定,簡單粗暴。但是在實踐過程中發(fā)現(xiàn),采用geopandas轉(zhuǎn)換后的GeoJson文件并沒有保留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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中tkinter+MySQL實現(xiàn)增刪改查

    Python中tkinter+MySQL實現(xiàn)增刪改查

    這篇文章主要介紹了Python中tkinter+MySQL實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 用python的turtle模塊實現(xiàn)給女票畫個小心心

    用python的turtle模塊實現(xiàn)給女票畫個小心心

    今天小編就為大家分享一篇用python的turtle模塊實現(xiàn)給女票畫個小心心,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 十行Python代碼制作一個視頻倒放神器

    十行Python代碼制作一個視頻倒放神器

    這篇文章主要介紹了如何通過十行代碼實現(xiàn)視頻倒放神器,輕松實現(xiàn)視頻倒放功能。文中的示例代碼簡潔易懂,對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-02-02
  • 深入探討Python中的內(nèi)置類屬性`__repr__`

    深入探討Python中的內(nèi)置類屬性`__repr__`

    在Python中,__repr__是一個特殊的內(nèi)置類屬性,用于定義類的字符串表示形式,本文將深入探討__repr__的作用、用法以及一些實際應(yīng)用場景,希望對大家有所幫助
    2023-12-12
  • 學(xué)習(xí)Python需要哪些工具

    學(xué)習(xí)Python需要哪些工具

    這篇文章主要介紹了學(xué)習(xí)Python需要哪些工具,幫助大家開始學(xué)習(xí)python編程,感興趣的朋友可以了解下
    2020-09-09
  • 如何通過Python3和ssl實現(xiàn)加密通信功能

    如何通過Python3和ssl實現(xiàn)加密通信功能

    這篇文章主要介紹了如何通過Python3和ssl實現(xiàn)加密通信功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • python同義詞替換的實現(xiàn)(jieba分詞)

    python同義詞替換的實現(xiàn)(jieba分詞)

    這篇文章主要介紹了python同義詞替換的實現(xiàn)(jieba分詞),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python爬蟲實例——爬取美團美食數(shù)據(jù)

    Python爬蟲實例——爬取美團美食數(shù)據(jù)

    這篇文章主要介紹了Python爬蟲如何爬取美團美食數(shù)據(jù),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python入門教程之if語句的用法

    Python入門教程之if語句的用法

    這篇文章主要介紹了Python入門教程之if語句的用法,是Python入門的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • python命令行交互引導(dǎo)用戶選擇寵物實現(xiàn)

    python命令行交互引導(dǎo)用戶選擇寵物實現(xiàn)

    這篇文章主要為大家介紹了python命令行交互引導(dǎo)用戶選擇寵物實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評論