激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python實現csv文件(點表和線表)轉換為shapefile文件的方法

Python實現csv文件(點表和線表)轉換為shapefile文件的方法

2022-01-25 00:25BRYTLEVSON Python

這篇文章主要介紹了Python實現csv文件(點表和線表)轉換為shapefile文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Python實現csv文件(點表和線表)轉換為shapefile文件
說明

  • 點表使用的geometry坐標是wkbPoint(幾何點坐標)
  • 線表使用的geometry坐標是wkbLineString(多點坐標)

區別詳細看截圖

Python實現csv文件(點表和線表)轉換為shapefile文件的方法

Python實現csv文件(點表和線表)轉換為shapefile文件的方法

參考別人寫的方法加了注釋,把點和邊的轉化寫成了函數,每次轉成功后加了讀取shp文件來測試是否轉化成功 注意事項

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))
創建字段的名稱最好為英文,而且不能超過十字字符,一個中文漢字占的字符多。

代碼
(geopandas gdal 導入要考慮順序,不然會報錯)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import os, re
import geopandas as gpd
import gdal
import pandas as pd
from osgeo import ogr, osr  # osr用于獲取坐標系統,ogr用于處理矢量文件
from conf.path_config import gis_excel_dir
 
# 解決shp dbf 文件中文編碼   選自自己想轉的編碼   常用的 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  轉 shp
    """
    os.chdir(os.path.dirname(path))  # 將path所在的目錄設置為當前文件夾
    ds = ogr.Open(path, 1# 1代表可讀可寫,默認為0
    csv_lyr = ds.GetLayer()  # 獲取csv文件
    sr = osr.SpatialReference()
    sr.ImportFromEPSG(4326# 定義坐標系統
    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)  # 創建一個點圖層
 
    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())  # 創建一個點
        x = csv_row.GetFieldAsDouble('橫坐標'# csv中的坐標字段
        y = csv_row.GetFieldAsDouble('縱坐標'# csv中的坐標字段
        shp_pt = ogr.Geometry(ogr.wkbPoint)  # 創建幾何點
        shp_pt.AddPoint(x, y)
        # 獲取csv字段
        # 為創建的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)  # 將點的幾何數據添加到點中
        layer.CreateFeature(point_feature)  # 將點寫入到圖層中
 
    del ds
    del shp_ds  # 釋放句柄,文件緩沖到磁盤
    print("This process has succeeded!")
 
 
def line_csv_2_dbf(path, shp_fn):
    """
    geometry坐標為 LineString坐標
    """
    os.chdir(os.path.dirname(path))  # 將path所在的目錄設置為當前文件夾
    ds = ogr.Open(path, 1# 1代表可讀可寫,默認為0
    csv_lyr = ds.GetLayer()  # 獲取csv文件
    sr = osr.SpatialReference()
    sr.ImportFromEPSG(4326# 定義坐標系統
    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)  # 創建多個點圖層
 
    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坐標
        y1 = csv_row.GetFieldAsDouble('y1'# y1坐標
        x2 = csv_row.GetFieldAsDouble('x2'# x1坐標
        y2 = csv_row.GetFieldAsDouble('y2'# y2坐標
 
        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字段
        # 為創建的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):
    """
    測試轉成的shp文件
    """
    df = gpd.read_file(path, encoding='gbk', rows=20# 轉shp前的編碼格式
    print(df)
 
 
if __name__ == '__main__':
    '''線表轉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)
    # 讀取測試轉之后的結果
    read_shapefile(path=os.path.join(gis_excel_dir, 'gd.shp'))
 
    '''點表轉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)
    # 讀取測試轉之后的結果
    # read_shapefile(path=os.path.join(gis_excel_dir, 'point.shp'))

到此這篇關于Python實現csv文件(點表和線表)轉換為shapefile文件的文章就介紹到這了,更多相關Python csv文件轉換為shapefile文件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/brytlevson/article/details/120772341

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99影视电影电视剧在线播放 | 久草热久草视频 | 国产一级毛片视频在线! | 精品乱码久久久久 | 欧美精品一区二区久久 | 91成人一区 | 免费看一级片 | 一本在线高清码电影 | 国产一级免费在线视频 | 成人小视频免费在线观看 | 国产精品久久久久久久久久大牛 | 亚洲午夜久久久精品一区二区三区 | 色视频在线播放 | 欧美中文字幕一区二区三区亚洲 | 日本视频网 | 欧美激情999| 激情久久一区二区 | 成人免费看片a | 国产精品麻豆一区二区三区 | 欧美日韩大片在线观看 | 999久久国精品免费观看网站 | 91成人久久 | 国产91小视频在线观看 | 亚洲成人免费电影 | 美女视频免费一区二区 | 蜜桃网在线 | 黄色网址进入 | 成人精品久久 | 91网视频在线观看 | 成人在线视频在线观看 | 国产九色在线播放九色 | 一级黄色在线免费观看 | 操操插插| 日韩黄色免费在线观看 | 久久免费观看一级毛片 | 欧美国产成人在线 | 日韩av毛片免费观看 | 色就色 综合偷拍区91网 | 成人午夜一区二区 | 最新中文字幕在线视频 | 91香蕉影视 |