最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)csv文件(點(diǎn)表和線表)轉(zhuǎn)換為shapefile文件的方法

 更新時間:2021年10月16日 11:18:08   作者:BRYTLEVSON  
這篇文章主要介紹了Python實(shí)現(xiàn)csv文件(點(diǎn)表和線表)轉(zhuǎn)換為shapefile文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Python實(shí)現(xiàn)csv文件(點(diǎn)表和線表)轉(zhuǎn)換為shapefile文件
說明

  • 點(diǎn)表使用的geometry坐標(biāo)是wkbPoint(幾何點(diǎn)坐標(biāo))
  • 線表使用的geometry坐標(biāo)是wkbLineString(多點(diǎn)坐標(biāo))

區(qū)別詳細(xì)看截圖

在這里插入圖片描述

在這里插入圖片描述

參考別人寫的方法加了注釋,把點(diǎn)和邊的轉(zhuǎn)化寫成了函數(shù),每次轉(zhuǎn)成功后加了讀取shp文件來測試是否轉(zhuǎn)化成功 注意事項(xiàng)

1.解決shp dbf 文件中文編碼
#gdal.SetConfigOption(“SHAPE_ENCODING”, “”)
#gdal.SetConfigOption(“SHAPE_ENCODING”, “gb2312”)
gdal.SetConfigOption(“SHAPE_ENCODING”, “gbk”)
2.layer.CreateField(ogr.FieldDefn(‘local_id', ogr.OFTString))
創(chuàng)建字段的名稱最好為英文,而且不能超過十字字符,一個中文漢字占的字符多。

代碼
(geopandas gdal 導(dǎo)入要考慮順序,不然會報(bào)錯)

import os, re
import geopandas as gpd
import gdal
import pandas as pd
from osgeo import ogr, osr  # osr用于獲取坐標(biāo)系統(tǒng),ogr用于處理矢量文件
from conf.path_config import gis_excel_dir

# 解決shp dbf 文件中文編碼   選自自己想轉(zhuǎn)的編碼   常用的 gbk  gb2312  utf8
# gdal.SetConfigOption("SHAPE_ENCODING", "")
# gdal.SetConfigOption("SHAPE_ENCODING", "gb2312")
gdal.SetConfigOption("SHAPE_ENCODING", "gbk")


def point_csv_2_shp(path, shp_fn):
    """
    point  轉(zhuǎn) shp
    """
    os.chdir(os.path.dirname(path))  # 將path所在的目錄設(shè)置為當(dāng)前文件夾
    ds = ogr.Open(path, 1)  # 1代表可讀可寫,默認(rèn)為0
    csv_lyr = ds.GetLayer()  # 獲取csv文件
    sr = osr.SpatialReference()
    sr.ImportFromEPSG(4326)  # 定義坐標(biāo)系統(tǒng)
    shp_driver = ogr.GetDriverByName('ESRI Shapefile')  # 獲取shapefile文件處理句柄
    if os.path.exists(shp_fn):  # 如果文件夾中已存在同名文件則先刪除
        shp_driver.DeleteDataSource(shp_fn)
    shp_ds = shp_driver.CreateDataSource(shp_fn)
    layer = shp_ds.CreateLayer(shp_fn, sr, ogr.wkbPoint)  # 創(chuàng)建一個點(diǎn)圖層

    layer.CreateField(ogr.FieldDefn('id', ogr.OFTString))
    layer.CreateField(ogr.FieldDefn('ground_h', ogr.OFTString))
    layer.CreateField(ogr.FieldDefn('type', ogr.OFTString))

    for csv_row in csv_lyr:  # 對于csv文件中每一行
        point_feature = ogr.Feature(layer.GetLayerDefn())  # 創(chuàng)建一個點(diǎn)
        x = csv_row.GetFieldAsDouble('橫坐標(biāo)')  # csv中的坐標(biāo)字段
        y = csv_row.GetFieldAsDouble('縱坐標(biāo)')  # csv中的坐標(biāo)字段
        shp_pt = ogr.Geometry(ogr.wkbPoint)  # 創(chuàng)建幾何點(diǎn)
        shp_pt.AddPoint(x, y)
        # 獲取csv字段
        # 為創(chuàng)建的shp文件字段賦值
        point_feature.SetField('id', csv_row.GetFieldAsString('local_id'))  # GetFieldAsString  獲取csv中的列名
        point_feature.SetField('ground_h', csv_row.GetFieldAsString('ground_h'))
        point_feature.SetField('type', csv_row.GetFieldAsString('dev_type'))

        point_feature.SetGeometry(shp_pt)  # 將點(diǎn)的幾何數(shù)據(jù)添加到點(diǎn)中
        layer.CreateFeature(point_feature)  # 將點(diǎn)寫入到圖層中

    del ds
    del shp_ds  # 釋放句柄,文件緩沖到磁盤
    print("This process has succeeded!")


def line_csv_2_dbf(path, shp_fn):
    """
    geometry坐標(biāo)為 LineString坐標(biāo)
    """
    os.chdir(os.path.dirname(path))  # 將path所在的目錄設(shè)置為當(dāng)前文件夾
    ds = ogr.Open(path, 1)  # 1代表可讀可寫,默認(rèn)為0
    csv_lyr = ds.GetLayer()  # 獲取csv文件
    sr = osr.SpatialReference()
    sr.ImportFromEPSG(4326)  # 定義坐標(biāo)系統(tǒng)
    shp_driver = ogr.GetDriverByName('ESRI Shapefile')  # 獲取shapefile文件處理句柄
    if os.path.exists(shp_fn):  # 如果文件夾中已存在同名文件則先刪除
        shp_driver.DeleteDataSource(shp_fn)
    shp_ds = shp_driver.CreateDataSource(shp_fn)
    layer = shp_ds.CreateLayer(shp_fn, sr, ogr.wkbLineString)  # 創(chuàng)建多個點(diǎn)圖層

    layer.CreateField(ogr.FieldDefn('id', ogr.OFTString))
    layer.CreateField(ogr.FieldDefn('l_id', ogr.OFTString))
    layer.CreateField(ogr.FieldDefn('u_id', ogr.OFTString))

    for csv_row in csv_lyr:  # 對于csv文件中每一行
        point_feature = ogr.Feature(layer.GetLayerDefn())
        x1 = csv_row.GetFieldAsDouble('x1')  # csv中的 x1坐標(biāo)
        y1 = csv_row.GetFieldAsDouble('y1')  # y1坐標(biāo)
        x2 = csv_row.GetFieldAsDouble('x2')  # x1坐標(biāo)
        y2 = csv_row.GetFieldAsDouble('y2')  # y2坐標(biāo)

        mult_coord = '(' + str(x1) + ' ' + str(y1) + ',' + str(x2) + ' ' + str(y2) + ')'
        # geom = ogr.CreateGeometryFromWkt('LINESTRING ' + '(2 1,0 1)')
        geom = ogr.CreateGeometryFromWkt('LINESTRING' + mult_coord)

        # 獲取csv字段
        # 為創(chuàng)建的shp文件字段賦值
        point_feature.SetField('id', csv_row.GetFieldAsString('gid'))  # GetFieldAsString  獲取csv中的列名
        point_feature.SetField('l_id', csv_row.GetFieldAsString('l_id'))
        point_feature.SetField('u_id', csv_row.GetFieldAsString('u_id'))

        point_feature.SetGeometryDirectly(geom)
        layer.CreateFeature(point_feature)

    del ds
    del shp_ds  # 釋放句柄,文件緩沖到磁盤
    print("This process has succeeded!")


def read_shapefile(path):
    """
    測試轉(zhuǎn)成的shp文件
    """
    df = gpd.read_file(path, encoding='gbk', rows=20)  # 轉(zhuǎn)shp前的編碼格式
    print(df)


if __name__ == '__main__':
    '''線表轉(zhuǎn)shp  以及讀取測試'''
    shp_fn = "gd.shp"  # 最終要得到的shp文件的文件名
    path = os.path.join(gis_excel_dir, 'line.csv')  # csv文件名稱
    line_csv_2_dbf(path=path, shp_fn=shp_fn)
    # 讀取測試轉(zhuǎn)之后的結(jié)果
    read_shapefile(path=os.path.join(gis_excel_dir, 'gd.shp'))

    '''點(diǎn)表轉(zhuǎn)shp  以及讀取測試'''
    # shp_fn = "xnd.shp"
    # path = os.path.join(gis_excel_dir, 'point.csv')  # csv文件名稱
    # point_csv_2_shp(path=path, shp_fn=shp_fn)
    # 讀取測試轉(zhuǎn)之后的結(jié)果
    # read_shapefile(path=os.path.join(gis_excel_dir, 'point.shp'))

到此這篇關(guān)于Python實(shí)現(xiàn)csv文件(點(diǎn)表和線表)轉(zhuǎn)換為shapefile文件的文章就介紹到這了,更多相關(guān)Python csv文件轉(zhuǎn)換為shapefile文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Python的OpenCV庫處理圖像和視頻

    如何使用Python的OpenCV庫處理圖像和視頻

    基于opencv可以顯示圖片,并進(jìn)行相應(yīng)的處理,下面這篇文章主要給大家介紹了關(guān)于如何使用Python的OpenCV庫處理圖像和視頻的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • python生成指定尺寸縮略圖的示例

    python生成指定尺寸縮略圖的示例

    這篇文章主要介紹了python生成指定尺寸縮略圖的示例,需要的朋友可以參考下
    2014-05-05
  • Python中堆、棧、隊(duì)列之間的區(qū)別小結(jié)

    Python中堆、棧、隊(duì)列之間的區(qū)別小結(jié)

    本文主要介紹了Python中堆、棧、隊(duì)列之間的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 解決Python數(shù)據(jù)可視化中文部分顯示方塊問題

    解決Python數(shù)據(jù)可視化中文部分顯示方塊問題

    這篇文章主要介紹了解決Python數(shù)據(jù)可視化中文部分顯示方塊問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • pymysql的安裝以及操作實(shí)戰(zhàn)指南

    pymysql的安裝以及操作實(shí)戰(zhàn)指南

    這篇文章主要給大家介紹了關(guān)于pymysql的安裝以及操作的相關(guān)資料,pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Python列表推導(dǎo)式的基本操作詳解

    Python列表推導(dǎo)式的基本操作詳解

    Python?的列表推導(dǎo)式,這個看似簡單的語法糖,實(shí)則內(nèi)含無限威力,本文將從基礎(chǔ)的概念認(rèn)識,到各類進(jìn)階的用法和操作,更深入地探討列表推導(dǎo)式,希望對大家有所幫助
    2023-06-06
  • Pandas 模糊查詢與替換的操作

    Pandas 模糊查詢與替換的操作

    這篇文章主要介紹了Pandas 模糊查詢與替換的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python搭建微信公眾平臺

    python搭建微信公眾平臺

    這篇文章主要介紹了python搭建微信公眾平臺的相關(guān)資料和技巧,感興趣的朋友可以參考一下
    2016-02-02
  • Python中的迭代器詳解

    Python中的迭代器詳解

    這篇文章主要介紹迭代器,看完文章你可以了解到什么是可迭代對象、啥是迭代器、如何自定義迭代器、使用迭代器的優(yōu)勢,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • 詳解Python的單元測試

    詳解Python的單元測試

    這篇文章主要介紹了Python的單元測試,代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04

最新評論

莱芜市| 岳阳市| 澳门| 普陀区| 偃师市| 中方县| 田东县| 洞口县| 桐庐县| 手游| 曲沃县| 兰州市| 甘肃省| 浠水县| 梁平县| 海门市| 通州市| 大竹县| 永定县| 福贡县| 富锦市| 赤水市| 宣化县| 德保县| 崇礼县| 浦北县| 同德县| 河曲县| 青州市| 尼木县| 新乐市| 丰顺县| 滨海县| 英山县| 贵州省| 河西区| 北票市| 启东市| 石台县| 石门县| 平果县|