一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国男女做性全过程视频 | 男人的天堂久久爱 | 美国一级大黄大色毛片 | 好 舒服 好 粗 好硬免费视频 | 精品人人做人人爽久久久 | 亚洲精品91在线 | 亚洲欧美日韩高清 | 免费看男人狂躁女人 | 欧美疯狂做爰3xxx | 欧美成人中文字幕 | 热99精品 | 欧美日韩国产一区二区三区不卡 | 亚洲人成网站在线观看青青 | 91视频国产自拍 | 日韩一级精品视频在线观看 | 青青网在线视频 | 国产灌醉| 免费精品在线 | 成人精品一区久久久久 | 第一国内永久免费福利视频 | 日韩不卡一区二区三区 | 法国贵妇一级伦理hd | 我年轻漂亮的继坶2中字在线播放 | 国产亚洲精品福利在线 | 青草悠悠视频在线观看 | 暖暖 免费 高清 中文 日本 | 久久亚洲精选 | 国内精品一区二区在线观看 | 精品国产一区二区三区久久久狼 | 日本免费精品视频 | 日韩欧免费一区二区三区 | 免费精品99久久国产综合精品 | 探花国产 | 色综合色狠狠天天久久婷婷基地 | 国产偷窥女洗浴在线观看亚洲 | 小早川怜子亚洲综合中文字幕 | 91在线精品国产丝袜超清 | 护士伦理片 | 国产亚洲精品美女 | 嫩草蜜桃 | 精品一产品大全 |