【Python】利用ogr包读取空间数据文件(二):读出Coverage文件节点信息
首先讲讲为什么要去做这么一件事情:希望可以用自己用Python写的迪杰斯特拉算法来计算网络图上两个节点的最短路径,于是就需要把coverage文件的信息读进来,生成一个类似于邻接矩阵的矩阵。
一、先加载ogr与numpy的包
import ogr
import numpy as np
二、创建读取coverage文件的驱动,并读取文件
driver = ogr.GetDriverByName('AVCBin')
filename = 'G:\\data\\coverage\\road\\arc.adf'
dataSource = driver.Open(filename,0)
三、读取coverage中要素的数量
layer = dataSource.GetLayer(0)
n = layer.GetFeatureCount()
四、查找coverage中的最大节点数(这里遇到了一个问题,不知道为什么GetField方法不能直接通过字段名称读取数据,在这里卡了好久,最终查了官方文档后,发现还可以直接通过字段的序号来读取)
nmax = n1 = n2 = 0
for r in range(1, n+1):
rr = layer.GetFeature(r)
n1 = rr.GetField(1)
if n1 > nmax:
nmax = n1
n2 = rr.GetField(2)
if n2 > nmax:
nmax = n2
五、利用numpy创建一个nmax*nmax的零二维数组,并给不是对角线上的数值赋值无穷大
road_list = np.zeros((nmax,nmax))
for i in range(0, nmax):
for j in range(0, nmax):
if i != j:
road_list[i][j] = float('inf')
六、遍历coverage文件中的要素,读取节点信息(包括前节点FNODE、后节点TNODE以及长度LENGTH)
for r in range(1, n+1):
rr = layer.GetFeature(r)
n1 = rr.GetField('FNODE') - 1
n2 = rr.GetField('TNODE') - 1
road_list[n1][n2] = road_list[n2][n1] = rr.GetField('LENGTH')
七、读取完成
转载自:https://blog.csdn.net/qq_38237806/article/details/79955232