五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

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

發(fā)布日期:2021-12-24 22:08 | 文章來源:腳本之家

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)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部