日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Window10 64位,通过Python读取.mif, shp文件

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Window10 64位,通过Python读取.mif, shp文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 讀取依賴庫及安裝

依賴模塊osgeo ,osgeo依賴于GDAL

.mif 是Mapinfo支持的信息
.shp是 postgis存儲地理空間信息的文件格式;

嘗試了很多安裝方法:包括安裝Anaconda,因為有博客說anaconda中包含GDAL,失敗了。

由于GDAL不是純python模塊,通過pip install GDAL==3.1.2可能沒法安裝成功;

最終通過下邊方式完美安裝成功:

Windos10 64位osgeo安裝

  1. 在此處下載GDAL wheel
  2. 安裝及驗證

2. .MIF文件讀取

.MIF文件是Mapinfo中保存地理坐標等信息的文件格式;由文件頭+幾何信息(.MIF文件)和文件頭一次的屬性值(.MID文件)構成;
倆個文件放在同一個目錄下,文件名相同只是后綴不同;讀取會都讀取進來。

# python讀取.mif 代碼
from osgeo import gdal
from osgeo import ogr# 讀取mif文件
def readmif(file_path):# 為了支持中文路徑gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO")# 為了使屬性表字段支持中文gdal.SetConfigOption("SHAPE_ENCODING", "")# 注冊所有的驅動ogr.RegisterAll()# 創建mif類型文件驅動driver = ogr.GetDriverByName('MapInfo File')print(file_path)ds = driver.Open(file_path)for layer in ds:layer_name = layer.GetName()print('layer_name: ', layer_name)layer_defn = layer.GetLayerDefn()for field_index in range(0, layer_defn.GetFieldCount()):# 獲取每一個layer中的field定義field_defn = layer_defn.GetFieldDefn(field_index)# 獲取屬性定義oField = layer_defn.GetFieldDefn(field_index)# 輸出每一個屬性的名稱,屬性類型,屬性長度,屬性精度print('%s: %s(%d.%d)' % (oField.GetNameRef(), oField.GetFieldTypeName(oField.GetType()), oField.GetWidth(),oField.GetPrecision()))# 遍歷圖層中的要素,遍歷方式1:feature = layer.GetNextFeature()# print("feature: ", feature)while feature is not None:# 獲取要素中的屬性表內容for index in range(layer_defn.GetFieldCount()):oField = layer_defn.GetFieldDefn(index)line = " %s (%s) = " % (oField.GetNameRef(), oField.GetFieldTypeName(oField.GetType()))if feature.IsFieldSet(index):line = line + "%s" % (feature.GetFieldAsString(index))else:line = line + "(null)"print("line: ", line)# 獲取每個field的值,可以用 feature.GetField(oField.GetNameRef()) 或者 feature.GetFieldAsString(index)# print("\t: ", feature.GetField(oField.GetNameRef()))# 獲取要素中的幾何體geometry = feature.GetGeometryRef()print("geom: ", geometry)print()# 為了演示,只輸出一個要素信息break# 遍歷圖層中的要素,遍歷方式2:# for feature in layer:#     if layer_name == 'PlateRes_Manoeuvreanhui':#         data_field = feature.GetField("Group_ID")#         print('data_field: ', data_field)#     print("geom: ", feature.GetGeometryRef())#     print("kind: ", feature.GetField("Kind"))#     print("Direction: ", feature.GetField("Direction"))#     print("Fields: ", feature.GetField("Field3"))#     breakfeature.Destroy()ds.Destroy()def main():file_path = "F://mat//chongqin_hd.MIF"readmif(file_path)if __name__ == "__main__":main()

參考:

  • https://blog.csdn.net/belong0204/article/details/70161344?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.edu_weight)

  • https://blog.csdn.net/u011210523/article/details/95808300

總結

以上是生活随笔為你收集整理的Window10 64位,通过Python读取.mif, shp文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。