python空间数据处理-------矢量点文件读取

1.流程如下:
python空间数据处理-------矢量点文件读取
2.用到的主要的函数:
(1)datasource=ogr.Open(fn,False)
打开矢量文件,其中False是用于只读,该函数返回一个 DataSource类的对象。
(2)layer_num=datasource.GetLayerCount()
该函数是DataSource类的一个成员函数,用于获取所打开的矢量文件中的图层的数目。
(3)layer=datasource.GetLayerByIndex(i)
该函数是DataSource类的一个成员函数,用于获取第i个图层,返回的是一个Layer类对象。
(4)spatial_ref=layer.GetSpatialRef()
该函数是Layer类的一个成员函数,用于获取图层的空间参考信息,返回的是一个SpatialReference类对象。
(5)spatial_data=feature_element.geometry()
该函数是Feature类的成员函数,获取当前要素的空间信息。
(6)x=spatial_data.GetX()、y=spatial_data.GetY()
获取点要素的x坐标以及y坐标。
(7)year=feature_element.GetField(“截止年”)
该函数是Feature类的成员函数,用以根据字段名获取字段值。
3.代码如下:

#coding=utf-8
from osgeo import gdal,osr,ogr
#打开文件
fn=r"F:\win8\23\aaa\chn_stations.shp"
datasource=ogr.Open(fn,False)
#查看矢量图层的数目,shp文件只有一个图层
layer_num=datasource.GetLayerCount()
#获取矢量图层
layer=datasource.GetLayerByIndex(0)  #矢量的索引从0开始,栅格的索引从1开始
#获取空间参考
spatial_ref=layer.GetSpatialRef()
#获取每个要素的属性信息
print "SpatialReference: ",spatial_ref
print "LayerCount: ",layer_num
#输出前50个点的属性
i=0
for feature_element in layer:
    #获取空间数据(获取x、y坐标)
    spatial_data=feature_element.geometry()
    x=spatial_data.GetX()
    y=spatial_data.GetY()
    #获取属性值
    year=feature_element.GetField("截止年")
    print i,"----","x: ",x," y ",y," year: ",year
    i+=1
    if i==50:
        break





4.运行结果:
python空间数据处理-------矢量点文件读取

5.图层是空间要素的集合python空间数据处理-------矢量点文件读取
如上图,Layer1中包含了要素1、要素2…要素n,“图层是空间要素的集合”,因此下边的for循环代码,可以直接将feature_element放入layer中进行循环。

for feature_element in layer

这个时候,第一次循环时,feature_element 成为Layer图层中的第一个要素,第二次循环时,Feature_element成为Layer图层中的第二个要素。以此类推,直到最后一个要素。