命令行记录-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‘}

原文地址:https://www.cnblogs.com/vividautumn/p/11553371.html

时间: 2024-11-09 09:41:09

命令行记录-python 读shp文件记录的相关文章

命令行执行python模块时提示包找不到的问题

庄稼人不是专职python开发的道友,虽然与python相识已多年,可惜相识不相知,只是偶尔借助pydev写一些简单的小工具. 多年来,一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可以运行任意一个python脚本,而使用命令行运行却不行?命令行下(或者双击执行)总是提示"ImportError: No module named xxx"?pydev究竟做了什么魔术呢? 长话短说,以上面工程为例,如果是在命令行中直接执行 python c.py , 都会提示"

Beginning Python From Novice to Professional (2) - 命令行运行Python脚本

命令行运行Python脚本 Linux下先创建一个hello.py [python] view plaincopy $ gedit hello.py 输入: [python] view plaincopy #!/usr/bin/env python print 2+2 保存退出,运行: [python] view plaincopy $ python hello.py 4 我们也可以让它变得和普通程序一样执行 执行之前,让脚本文件具备可执行属性: [python] view plaincopy

命令行运行python项目文件,报错:ModuleNotFoundError: No module named 'xxxx' 解决办法

在pycharm中写好了自动化测试脚本,并能在pycharm中正常运行,由于要考虑到无人值守时能自动执行,执行时就需要脱离pycharm,直接能用命令执行.但是直接用命令执行用例文件:python3 D:\pycode\autotest_framework\case\run_case.py 结果报错,找不到模块 自动化项目的结构如下:用例run_case.py 和工具类utils下的工具 不在同一个文件夹下面.在脚本中需要导入包如: from utils.HTMLTestRunner impor

Linux (rz、sz命令行)与本地电脑 命令行上传、下载文件

Linux 与本地电脑直接交互, 命令行上传.下载文件. 一.lrzsz命令行安装: 1.rpm安装:(链接: http://pan.baidu.com/s/1cBuTm2 密码: vijf) rpm -ivh lrzsz-0.12.20-22.1.x86_64.rpm 2.yum 安装: yum install lrzsz 二.命令使用: 1.发送到本地: sz 文件名 2.上传到服务器: rz -be 在弹出的框中选择文件,上传文件的用户和组是当前登录的用户

Linux命令行下svn ignore忽略文件或文件夹用法

Linux命令行下svn ignore忽略文件或文件夹用法 一.忽略单个目录 1.忽略文件夹 假如目录oa.youxi.com是从svn checkout出来的,在服务器本地目录添加了material,但是不希望把material加入版本控制,因此我们需要忽略掉这个目录首先使用svn status命令查看当前状态[[email protected] oa.youxi.com]# svn status? htdocs/admin/adv/material 添加需要忽略的目录,貌似必须得进入该目录之

MAC - 命令行中用sublime打开指定文件,使用ln命令建立软链接

目前sublime是mac下最好的文本编辑软件,经常要使用它打开一些文件,例如html,js,txt,json等文件,但是sublime2默认不支持在命令行下调用,经过研究发现可以用建立软连接的方式调用,同样原因应该可以用到mac下其它不支持命令行的软件 系统版本:10.9.4 可以使用 open -a /Applications/Sublime\ Text\ 2.app composer.json 但是每次这样输太麻烦,可以用建立软连接的方式调用 ln -s /Applications/Sub

1001种玩法 | Python Prompt Toolkit:构建强大交互式命令行的 Python 工具库

Python Prompt Toolkit:构建强大交互式命令行的 Python 工具库 prompt_toolkit 是一个用于构建强大交互式命令行的 Python 工具库. 你是不是在找交互式的 Python shell 工具 ptpython 呢?我们把 ptpython 的源码转移到了一个独立的仓库.如此一来,我们确信  prompt_toolkit 库不会被其他 ptpython 东西"污染",并且 ptpython 也可以独立开发.现在必须用下面这个命令安装 ptpytho

在命令行中加参数的文件复制程序

这篇博文介绍使用命令行参数的编程方法,载体是用于文件复制的程序.这也是我用Markdown编辑器写的第一篇博文.Markdown在写<逆袭大学>时用过,写博文是第一次. 本文正文: 引子 下面的程序,可以完成由a.txt到b.txt的复制. #include <iostream> #include <fstream> using namespace std; int main( ) { char ch; ifstream infile("a.txt"

如何使用命令行编译和运行java文件

相信大家现在一般都在使用IDE环境来开发运行java文件,但我觉得可以在命令行里面简单运行java文件,技多不压身. 接下来我来说一下编译和运行java文件: 第一步,首先下一个入门程序(注意:一定要将程序里面的类名跟保存的文件名称写成一样) 第二步,进入到java文件保存的目录(注意:必须要进入到保存的目录,否则运行会出错) 第四步使用javac HelloWorld.java编译源程序会生成一个.class的中间代码 第五步使用java HelloWorld运行程序(注意java后面的程序结