中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python?shapefile轉GeoJson的方法有哪些

發布時間:2023-03-08 11:33:34 來源:億速云 閱讀:112 作者:iii 欄目:開發技術

這篇文章主要介紹“Python shapefile轉GeoJson的方法有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python shapefile轉GeoJson的方法有哪些”文章能幫助大家解決問題。

    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]
                     ]
                 ]
             ]
         }

    兩種將shapefile文件轉換為GeoJson的方式

    1. 使用geopandas

    核心代碼: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等,如下圖所示:

    Python?shapefile轉GeoJson的方法有哪些

    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)
     
        # 創建結果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的方法有哪些

    關于“Python shapefile轉GeoJson的方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    布尔津县| 宕昌县| 峨边| 永胜县| 江华| 泽库县| 北安市| 六安市| 长岭县| 岳西县| 德惠市| 佛学| 玉林市| 昆山市| 焉耆| 栖霞市| 积石山| 新田县| 江达县| 天长市| 册亨县| 隆尧县| 安福县| 丽江市| 大厂| 平定县| 乐清市| 灵山县| 白玉县| 曲松县| 阳江市| 松潘县| 小金县| 米易县| 尤溪县| 砀山县| 墨江| 舞钢市| 广宁县| 肇州县| 隆德县|