python读取shp的属性表_命令行记录-python 读shp文件记录

1、读shapefile文件主要读以下内容,包括spatialRef投影信息,layerDefn图层定义信息,geomType几何对象类型,fieldDefn字段定义信息。geomlist是得到了每一个feature的geometryRef后转为Wkt形式表示的坐标点位,reclist通过name属性一次获取每个feature的所有field信息。

2、

#读ArcGIS Shape文件示例

from osgeo import ogr

filename="cntry98.shp"

#以只读的方式打开shp文件(False-read only, True-read/write)

ds=ogr.Open(filename,False)

#获取图层

layer=ds.GetLayer(0)

#投影信息

spatialref = layer.GetSpatialRef()

#图层定义信息

lydefn = layer.GetLayerDefn()

#几何对象类型(wkbPoint,wkbLineString,wkbPolygon)

geomtype=lydefn.GetGeomType()

#获取字段列表(字段类型,OFTInteger,OFTReal,OFTString,OFTDateTime)

fieldlist=[]

for i in range(lydefn.GetFieldCount()):

fddefn=lydefn.GetFieldDefn(i)

fddict={'name':fddefn.GetName(),'type':fddefn.GetType(),'width':fddefn.GetWidth(),'decimal':fddefn.GetPrecision()}

fieldlist+=[fddict]

#SF数据记录-获取几何对象及其对应属性

geomlist,reclist=[],[]

#获得第一个SF

feature=layer.GetNextFeature()

while feature is not None:

geom=feature.GetGeometryRef()

geomlist+=[geom.ExportToWkt()]

rec={}

for fd in fieldlist:

rec[fd['name']]=feature.GetField(fd['name'])

reclist+=[rec]

feature=layer.GetNextFeature()

#关闭数据源

ds.Destroy()

#显示字段列表,几何对象及属性值

>>>len(fieldlist)

13

>>>len(geomlist)

254

>>>print(spatialref)

GEOGCS["WGS 84",

DATUM["WGS_1984",

SPHEROID["WGS 84",6378137,298.257223563,

AUTHORITY["EPSG","7030"]],

AUTHORITY["EPSG","6326"]],

PRIMEM["Greenwich",0,

AUTHORITY["EPSG","8901"]],

UNIT["degree",0.0174532925199433,

AUTHORITY["EPSG","9122"]],

AUTHORITY["EPSG","4326"]]

>>>print(geomtype)

3

>>>print(fieldlist[0])

{'name': 'FIPS_CNTRY', 'type': 4, 'width': 2, 'decimal': 0}

>>> print(geomlist[0])

POLYGON ((-69.8822326660156 12.4111099243164,-69.94694519042

97 12.4366655349731,-70.0561218261719 12.5344429016113,-70.0

594482421875 12.5380554199219,-70.0602874755859 12.544166564

9414,-70.0633392333984 12.6216659545898,-70.0630645751953 12

.6286106109619,-70.0588989257813 12.6311092376709,-70.053344

7265625 12.6297206878662,-70.0352783203125 12.6197204589844,

-70.0311126708984 12.616943359375,-69.9322357177734 12.52805

519104,-69.8969573974609 12.4808330535889,-69.8914031982422

12.4722213745117,-69.8855590820313 12.4577770233154,-69.8739

013671875 12.4219436645508,-69.8733367919922 12.415833473205

6,-69.8761138916016 12.4116649627686,-69.8822326660156 12.41

11099243164))

>>> print(reclist[0][fieldlist[0]['name']])

AA

>>> print(reclist[0])

{'FIPS_CNTRY': 'AA', 'GMI_CNTRY': 'ABW', 'ISO_2DIGIT': 'AW', 'ISO_3DIGIT': 'ABW', 'CNTRY_NAME': 'Aruba', 'S

OVEREIGN': 'Netherlands', 'POP_CNTRY': 67074, 'SQKM_CNTRY': 182.926, 'SQMI_CNTRY': 70.628, 'CURR_TYPE': 'Fl

orin', 'CURR_CODE': 'AWG', 'LANDLOCKED': 'N', 'COLOR_MAP': '1'}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值