Arcpy入门学习笔记(三):数据属性的读取

Arcpy入门学习笔记(三):数据属性的获取

文章目录

  • Arcpy入门学习笔记(三):数据属性的获取
    • 常用的属性
      • Describe对象属性(部分)
      • 数据集属性(部分)
      • 表属性(部分)
      • 要素类属性(部分)
      • 图层属性(部分)
      • 栅格数据集属性(部分)
      • 空间参考属性(部分)
    • 一些注意点
      • 路径的区别
      • 字符串
      • 属性的说明
    • 总结
    • 参考

官方说明:

Describe 函数返回的 Describe 对象包含多个属性,如数据类型、字段、索引以及许多其他属性。该对象的属性是动态的,这意味着根据所描述的数据类型,会有不同的描述属性可供使用。

Describe 属性被组织成一系列属性组。任何特定数据集都将获取其中至少一个组的属性。例如,如果要描述一个地理数据库要素类,您可访问 GDB 要素类、要素类、表和数据集属性组中的属性。所有数据,不管是哪种数据类型,总会获取通用 Describe 对象属性。

常用的属性

Describe对象属性(部分)

属性说明数据类型
baseName(只读)文件基本名称String
catalogPath(只读)数据路径String
children(只读)子元素列表Describe
childrenExpanded(只读)指示子元素是否已扩展Boolean
dataElementType(只读)元素的元素类型String
dataType(只读)元素类型String
extension(只读)文件扩展名String
file(只读)文件名称String
name(只读)元素的用户分配名称String
path(只读)文件路径String

测试

通过hasattr获取对应属性名是否存在,通过getattr获取对应属性名的属性值

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 2:47
# @Author : zbhimport arcpyfile_path2 = r"G:\MyTestProject\arcpy2_test\Note3\data\Start.shp"
if arcpy.Exists(file_path2):print("file_path2 Found!")desc = arcpy.Describe(file_path2)prop_to_print = ['name', 'extension', 'path', 'catalogPath', 'bandCount']for prop_name in prop_to_print:if hasattr(desc, prop_name):print("{}: {}".format(prop_name, getattr(desc, prop_name)))else:print(u"Property '{}' not found".format(prop_name))
else:print("file_path2 Not Found!")

输出

由于是矢量数据,所以没有bandCount属性

file_path2 Found!
name: Start.shp
extension: shp
path: G:\MyTestProject\arcpy2_test\Note3\data
catalogPath: G:\MyTestProject\arcpy2_test\Note3\data\Start.shp
Property 'bandCount' not found

数据集属性(部分)

属性说明数据类型
datasetType(只读)返回所描述的数据集类型任何容器GeoFeatureDatasetFeatureClassPlanarGraphGeometricNetworkTopologyTextTableRelationshipClassRasterDatasetRasterBandTINCadDrawingRasterCatalogToolboxToolNetworkDatasetTerrainRepresentationClassCadastralFabricSchematicDatasetLocatorString
DSID(只读)数据集的 ID。Integer
extent(只读)Extent 对象。注:extent 仅适用于空间数据集。Extent
MExtent(只读)以空格分隔的字符串 (MMin, MMax)。注:MExtent 仅适用于空间数据集。String
spatialReference(只读)返回数据集的 SpatialReference 对象。注:spatialReference 仅适用于空间数据集。SpatialReference
ZExtent(只读)以空格分隔的字符串 (ZMin, ZMax)。注:ZExtent 仅适用于空间数据集。String

测试

逻辑同上

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 12:10
# @Author : zbhimport arcpyfile_path = r"..\Note3\data\GeoData.gdb\MyShpfiles"
if arcpy.Exists(file_path):print("file_path Found!")desc = arcpy.Describe(file_path)prop_to_print = ['name', 'datasetType', 'extent', 'catalogPath', 'bandCount']for prop_name in prop_to_print:if hasattr(desc, prop_name):print("{}: {}".format(prop_name, getattr(desc, prop_name)))else:print(u"Property '{}' not found".format(prop_name))
else:print("file_path Not Found!")

输出

也是没有bandCount属性

file_path Found!
name: MyShpfiles
datasetType: FeatureDataset
extent: 756856.1147 2969639.1121 764981.2868 2978678.4795 NaN NaN NaN NaN
catalogPath: ..\Note3\data\GeoData.gdb\MyShpfiles
Property 'bandCount' not found

表属性(部分)

属性说明数据类型
hasOID(只读)指示表是否包含 ObjectID 字段。Boolean
OIDFieldName(只读)OID 字段(如果存在)名称。String
fields(只读)此表的字段对象的 Python 列表。这与使用 ListFields 函数时相同。Field
indexes(只读)此表的索引对象的 Python 列表。这与使用 ListIndexes 函数时相同。Index

测试

因为fields本身是ArcGIS指定的一种对象类型,需要使用对象或列表的方式处理,这里直接使用了官网的代码样例读取字段

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 12:22
# @Author : zbhimport arcpyfile_path = r"..\Note3\data\GeoData.gdb\MyShpfiles\Area"
if arcpy.Exists(file_path):print("file_path Found!")desc = arcpy.Describe(file_path)prop_to_print = ['name', 'OIDFieldName', 'bandCount']for prop_name in prop_to_print:if hasattr(desc, prop_name):print("{}: {}".format(prop_name, getattr(desc, prop_name)))else:print(u"Property '{}' not found".format(prop_name))print("--------------------")for field in desc.fields:print "%-22s %s %s" % (field.name, ":", field.type)
else:print("file_path Not Found!")

输出

file_path Found!
name: Area
OIDFieldName: OBJECTID
Property 'bandCount' not found
OBJECTID               : OID
Shape                  : Geometry
Id                     : Integer
Shape_Length           : Double
Shape_Area             : Double

要素类属性(部分)

属性说明数据类型
featureType(只读)要素类的要素类型。String
hasM(只读)指示几何是否启用 m 值。Boolean
hasZ(只读)指示几何是否启用 z 值。Boolean
hasSpatialIndex(只读)指示要素类是否具有空间索引。Boolean
shapeFieldName(只读)Shape 字段的名称。String
shapeType(只读)几何形状类型。面折线点多点多面体String

测试

逻辑同上

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 13:13
# @Author : zbhimport arcpyfile_path = r"..\Note3\data\GeoData.gdb\MyShpfiles\Area"
if arcpy.Exists(file_path):print("file_path Found!")desc = arcpy.Describe(file_path)prop_to_print = ['name', 'featureType', 'shapeType', 'catalogPath', 'hasSpatialIndex']for prop_name in prop_to_print:if hasattr(desc, prop_name):print("{}: {}".format(prop_name, getattr(desc, prop_name)))else:print(u"Property '{}' not found".format(prop_name))
else:print("file_path Not Found!")

输出

file_path Found!
name: Area
featureType: Simple
shapeType: Polygon
catalogPath: ..\Note3\data\GeoData.gdb\MyShpfiles\Area
hasSpatialIndex: True

图层属性(部分)

属性说明数据类型
dataElement(只读)图层所指的数据源的 Describe 对象。Describe
featureClass(只读)与要素图层相关的要素类的 Describe 对象。Describe
FIDSet(只读)用分号分隔的所选要素 ID 字符串(记录编号)。String
fieldInfo(只读)图层的 FieldInfo 对象(属性集)。FieldInfo
layer(只读).lyr 文件内图层的 Describe 对象。Describe
nameString(只读)图层的名称。String
table(只读)FeatureLayer 内表的 Describe 对象。Describe
whereClause(只读)图层的定义查询 WHERE 子句。String

测试

这个的whereClause属性是指自己在属性窗口定义的查询语句,这里也是直接使用官网的代码样例

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 13:13
# @Author : zbhimport arcpyfile_path = r"..\Note3\data\Area.lyr"
if arcpy.Exists(file_path):print("file_path Found!")desc = arcpy.Describe(file_path)print "Name String:        " + desc.nameStringprint "Where Clause:       " + desc.whereClauseif desc.dataElement.dataType == "FeatureClass":print "Feature class:      " + desc.dataElement.catalogPathprint "Feature class Type: " + desc.featureClass.featureType
else:print("file_path Not Found!")

输出

file_path Found!
Name String:        Area
Where Clause:       
Feature class:      G:\MyTestProject\arcpy2_test\Note3\data\GeoData.gdb\MyShpfiles\Area
Feature class Type: Simple

栅格数据集属性(部分)

属性说明数据类型
bandCount(只读)栅格数据集内的波段数。Integer
compressionType(只读)压缩类型String
format(只读)栅格格式String
permanent(只读)指示栅格的永久状态:False 表示临时栅格;True 表示永久栅格。Boolean
sensorType(只读)用于捕获图像的传感器类型。String

测试

直接使用的官网的代码样例修改

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 14:01
# @Author : zbhimport arcpyfile_path = r"..\Note3\data\Raster1.tif"
if arcpy.Exists(file_path):print("file_path Found!")desc = arcpy.Describe(file_path)print "Band Count:       %d" % desc.bandCountprint "Compression Type: %s" % desc.compressionTypeprint "Raster Format:    %s" % desc.format
else:print("file_path Not Found!")

输出

file_path Found!
Band Count:       1
Compression Type: LZW
Raster Format:    TIFF

空间参考属性(部分)

属性说明数据类型
factoryCode (只读)The factory code of the spatial reference.Integer
type (只读))The type of the spatial reference.String
projectionName (只读)投影名称String
GCSName (只读))The geographic coordinate system name.String

测试

空间参考属性需要写成sr = arcpy.Describe(file_path).spatialReference更方便后面的读取

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 14:16
# @Author : zbhimport arcpyfile_path = r"..\Note3\data\Raster1.tif"
if arcpy.Exists(file_path):print("file_path Found!")sr = arcpy.Describe(file_path).spatialReferenceprop_to_print = ['factoryCode', 'projectionName', 'GCSName', 'type']for prop_name in prop_to_print:if hasattr(sr, prop_name):print("{}: {}".format(prop_name, getattr(sr, prop_name)))else:print(u"Property '{}' not found".format(prop_name))
else:print("file_path Not Found!")

结果

file_path Found!
factoryCode: 4326
projectionName: 
GCSName: GCS_WGS_1984
type: Geographic

一些注意点

路径的区别

python本身只能处理系统路径,涉及到ArcGIS本身的数据库组织需要使用Arcpy读取

比如

G:\test\data.shp
G:\test\test.gdb\data\data1

前者可以通过OS模块读取,后者只能通过Arcpy读取

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-26 1:20
# @Author : zbhimport arcpy
import osfile_path1 = r"G:\MyTestProject\arcpy2_test\Note3\data\GeoData.gdb\Raster1"
if(arcpy.Exists(file_path1)):print("arcpy.Exists Found!")
else:print("arcpy.Exists Not Found")
if(os.path.exists(file_path1)):print("os.path.exists Found!")
else:print("os.path.exists Not Found")

输出结果

arcpy.Exists Found!
os.path.exists Not Found

字符串

Python2中输出有汉字尽量加上u,格式化输出用format

print(u"name: '{}' ".format(name))

属性的说明

Describe属性是基本属性,大多数的数据都有。

Shapefile 支持要素类属性、表属性和数据集属性。

栅格数据集还支持数据集属性。单波段栅格数据集也支持栅格波段属性。

有些属性本身是对象,比如空间参考属性

总结

主要是学会通过Python读取属性,由于不同数据之间有不同的属性,不用单独记,遇到的时候查一下或者hasattr函数查询该属性是否存在即可

参考

ArcGIS的官方文档,还有很多种,用到的时候再查

Describe—帮助 | ArcGIS Desktop

image-20240426170939176

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锂电池SOH预测 | 基于LSTM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

[docker] 多容器项目 - PHP+MySQL+Nginx+utility containers

[docker] 多容器项目 - PHPMySQLNginxutility containers 这个项目总共会配置 6 个容器,主要还是学习一下 docker 的使用和配置,目标是: 本机不安装 PHP、Nginx 安装部分全都交给 docker 容器实现 可以运行一个 Laravel 网页项目 修改本机…

基于遗传算法的TSP算法(matlab实现)

一、理论基础 TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长,到目前为止还未找到一个多项式时间的有效算法。TSP问题可描述为:已知n个城市相互之间的距离&…

万兆以太网MAC设计(12)万兆UDP协议栈上板与主机网卡通信

文章目录 一、设置IP以及MAC二、上板效果2.1、板卡与主机数据回环测试2.2、板卡满带宽发送数据 一、设置IP以及MAC 顶层模块设置源MAC地址 module XC7Z100_Top#(parameter P_SRC_MAC 48h01_02_03_04_05_06,parameter P_DST_MAC 48hff_ff_ff_ff_ff_ff )(input …

开源代码分享(26)-考虑预测不确定性的综合能源调度优化

参考文献: [1]崔杨,周慧娟,仲悟之,等.考虑源荷两侧不确定性的含风电电力系统低碳调度[J].电力自动化设备,2020,40(11):85-93.DOI:10.16081/j.epae.202009019. 1.基本原理 考虑碳交易机制能够有效提高风电消纳量,但是随着风电并网容量的增大&#xff0c…

【安卓13】谷歌桌面Launcher3屏蔽全部应用里面的部分app

1、需求 我们在做谷歌桌面时,移植了一些我们自己的应用,但是有些应用是服务型的app,不需要显示在主页,要隐藏掉 2、解决方案 方法1: 解决办法很简单,阅读源码发现,谷歌桌面添加全部应用的源…

使用yolo识别模型对比两张图片并标记不同(2)

上篇文章有漏洞,在这里补充下,比如要识别第二张图相对于第一张图的违建是否拆除了 第一步旋转对其后,图片会有黑色的掩码,如果旋转角度大的话,没识别出来的框可能不是已经拆除了,而是因为黑色掩码遮挡&…

数字旅游:通过科技赋能,创新旅游服务模式,提供智能化、个性化的旅游服务,满足游客多元化、个性化的旅游需求

目录 一、数字旅游的概念与内涵 二、科技赋能数字旅游的创新实践 1、大数据技术的应用 2、人工智能技术的应用 3、物联网技术的应用 4、云计算技术的应用 三、智能化、个性化旅游服务的实现路径 1、提升旅游服务的智能化水平 2、实现旅游服务的个性化定制 四、数字旅…

Linux编辑器调试器 gcc/g++ gdb 编译过程及使用讲解

这恋爱呀 我有两不谈 第一异性不谈 因为我们性别不一样 我知道的她不知道相处起来太累 第二同性不谈 因为我们性别一样 我知道的他也知道相处起来太无聊了 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–…

【介绍下Android开发环境的搭建】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

什么是域名解析?域名解析的完整流程是什么?如何清理DNS缓存?(附源码)

目录 1、什么是域名? 2、为什么使用域名? 3、域名解析的完整流程 4、调用gethostbyname系统接口将域名解析成IP地址 5、为什么需要清理系统DNS缓存? 6、使用cmd命令清理DNS缓存 7、通过代码去清除系统DNS缓存 C软件异常排查从入门到精…

使用量排名前50的GPTs趋势和特征

Chatgpt的gpt商店已经有几千gpts了。目前哪些gpts比较受欢迎呢?有哪些趋势和投资呢? 根据whatplugin.ai(截止日期为2024年3月),使用量最多的50个gpts数据分析结果如下: GPTs类型的分布情况如下: 图像生成…

21.Nacos集群搭建

模拟Nacos三个节点,同一个ip,启动三个不同的端口: 节点 nacos1, 端口:8845 节点 nacos2, 端口:8846 节点 nacos3, 端口:8847 1.搭建数据库,初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…

【C#】基础知识

0.参考 C#语言入门详解 1.几种打印hello_world的方式 1.1 console控制台 新建一个console,直接打印: Console.WriteLine("Hello_world");启动一闪而过,在vs调试中选择开始执行不调试(without debug)。 …

通话记录生成器怎么使用

通话记录生成器是一种可以模拟生成通话记录的软件工具,使用起来相对简单。以下是使用步骤: 导入目标号码:您需要将想要生成通话记录的目标号码输入到软件中。这可以通过直接复制粘贴电话号码,或者如果是图片或纸质文件中的号码&am…

分布式与一致性协议之CAP和Paxos算法(一)

CAP 理论 如何使用BASE理论 以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写,所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说,将同一业务的数据先分片,再以多份副本的形…

四种网络IO模型

📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 IO的定义 IO是计算机内存与外部设备之间拷贝数据的过程。CPU访问内存的速度远高于外部设备。因此CPU是先把外部设备的数据读取到内存,在…

有趣的大模型之我见 | Llama AI Model

Llama 开源吗? 我在写《有趣的大模型之我见 | Mistral 7B 和 Mixtral 8x7B》时曾犹豫,在开源这个事儿上,到底哪个大模型算鼻祖?2023 年 7 月 18 日,Meta 推出了最受欢迎的大型语言模型(LLM)的第…

20 | 幻读是什么,幻读有什么问题?

幻读是什么? 假设的场景,不是真实的结果 幻读”做一个说明: 在可重复读隔离级别下,普通的查询是快照读,是不会看到别的事务插入的数据的。因此,幻读在“当前读”下才会出现。上面 session B 的修改结果,被 session A 之后的 select语句用“当前读”看到,不能称为幻读…

iview 自定义项求和的方法和错误点

这是iview自定义某几项参数合计的方法,其实是蛮简单的,很多人自定义合计的时候,老是会不知道怎么处理除了需要合计的几项的其他项,其实不需要管,不需要合计的项直接返回空就好了,需要的就在计算的里面做key…