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

news2025/1/14 18:43:06

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 : zbh

import arcpy

file_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 : zbh

import arcpy

file_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 : zbh

import arcpy

file_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 : zbh

import arcpy

file_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 : zbh

import arcpy

file_path = r"..\Note3\data\Area.lyr"
if arcpy.Exists(file_path):
    print("file_path Found!")
    desc = arcpy.Describe(file_path)
    print "Name String:        " + desc.nameString
    print "Where Clause:       " + desc.whereClause

    if desc.dataElement.dataType == "FeatureClass":
        print "Feature class:      " + desc.dataElement.catalogPath
        print "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 : zbh

import arcpy

file_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.bandCount
    print "Compression Type: %s" % desc.compressionType
    print "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 : zbh

import arcpy

file_path = r"..\Note3\data\Raster1.tif"
if arcpy.Exists(file_path):
    print("file_path Found!")
    sr = arcpy.Describe(file_path).spatialReference
    prop_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 : zbh

import arcpy
import os

file_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.coloradmin.cn/o/1628792.html

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

相关文章

[c++]菱形继承解析

菱形继承 大概示意图: 菱形继承不一定只是标准的菱形,只要形似菱形的都可以叫菱形继承。 (以下说明都是默认公有继承,public和protected成员情况下) 菱形继承会造成数据的冗余和二义性: 冗余:一个Assitant对象里面有…

可解决传统保险丝缺陷的电子保险丝efuse

近年来,电子保险丝/熔断器获得了越来越多的关注,业界对此类解决方案的需求也在不断增加。传统的玻璃管保险丝、片式保险丝和聚合物保险丝很容易受到环境温度和其他使用条件的影响,而且熔断电流的精确度较低。此外,响应…

万兆以太网MAC设计(6)IP协议报文格式详解以及IP层模块设计

文章目录 前言:IPv4报文协议格式二、IP_RX模块设计2.1、模块接口2.2、模块工作过程 三、IP_TX模块设计3.1、模块接口3.2、模块工作过程 四、仿真4.1、发送端4.2、接受端 前言:IPv4报文协议格式 参考:https://sunyunqiang.com/blog/ipv4_prot…

SpringBoot学习之SpringBoot3集成OpenApi(三十八)

Springboot升级到Springboot3以后,就彻底放弃了对之前swagger的支持,转而重新支持最新的OpenApi,今天我们通过一个实例初步看看OpenApi和Swagger之间的区别. 一、POM依赖 我的POM文件如下,仅作参考: <?xml version="1.0" encoding="UTF-8"?>…

【C++】初识C++(下)

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《C》 &#x1f389;我自会去见我的山 &#x1f4a1;感谢阅读&#xff0c;欢迎关注&#xff0c;点赞&#xff0c;收藏&#xff0c;评论&#x1f4a1; 前言 这篇博客是对C的一个初…

JavaEE——Spring Boot入门

目录 &#x1f4da; JavaEE——Spring Boot入门 &#x1f527; 1. 新建Spring Boot项目 &#x1f6e0; 2. 添加pom依赖 &#x1f4dd; 3. 添加application.yml文件 &#x1f4c2; 4. 创建Dao层 &#x1f527; 5. 创建Service层 &#x1f5a5;️ 6. 创建Controller层及HT…

【刷题篇】动态规划-01背包问题(十)

文章目录 1、01背包2、分割等和子集3、目标和4、最后一块石头的重量 II 1、01背包 #include <iostream> #include<vector> using namespace std;int main() {int n,v;cin>>n>>v;vector<int> Weight(n1);vector<int> Value(n1);vector<i…

注意力机制:SENet详解

SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;是2017年提出的一种经典的通道注意力机制&#xff0c;这种注意力可以让网络更加专注于一些重要的featuremap&#xff0c;它通过对特征通道间的相关性进行建模&#xff0c;把重要的特征图进行强化来提升模型的性能…

Mysql的索引与事务理解

目录 一、Mysql索引 1、索引的概念 2、索引的特点 3、索引使用场景 4、Mysql有关索引的操作 &#xff08;1&#xff09;查询表具有的索引 &#xff08;2&#xff09;增加索引 &#xff08;3&#xff09;删除索引 5、索引实现原理 &#xff08;1&#xff09;B树 &…

详细解析什么是期权交易的获利方法

期权交易的获利方法 在期权交易之前进行充分的准备工作和风险评估是至关重要的。其中行情结构、策略方法、预期收益和风险评估&#xff0c;是期权交易成功的关键要素。它们能帮助我们更好地制定交易计划&#xff0c;控制风险&#xff0c;并追求稳定的利润。以下是对这四点的详…

深入理解冯诺依曼体系结构

文章目录 冯诺依曼体系结构概念冯诺依曼体系结构的优势冯诺依曼体系结构的现实体现 冯诺依曼体系结构概念 冯诺依曼体系结构也称普林斯顿结构&#xff0c;是现代计算机发展的基础。它的主要特点是“程序存储&#xff0c;共享数据&#xff0c;顺序执行”&#xff0c;即程序指令和…

Leetcode297_二叉树的序列化与反序列化

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xf…

Python | Leetcode Python题解之第51题N皇后

题目&#xff1a; 题解&#xff1a; class Solution:def solveNQueens(self, n: int) -> List[List[str]]:def generateBoard():board list()for i in range(n):row[queens[i]] "Q"board.append("".join(row))row[queens[i]] "."return b…

浅谈叉车车载电脑的市场现状

叉车的起源 叉车源于美国&#xff0c;兴于日本&#xff0c;虽然中国起步较晚&#xff0c;但是近些年来发展迅速。叉车又称叉式装载车&#xff0c;是对于成件托盘类货物进行装卸、堆垛和短距离运输&#xff0c;实现重物搬运作业的轮式工业车辆。 叉车的分类 叉车分为以上六大类…

webpack3插件CommonChunkPlugin分离vantUI和echarts,问题的webpackJsonp is not defined解决!!!

webpack3插件CommonChunkPlugin分离vantUI和echarts和报错webpackJsonp is not defined的解决 前景&#xff1a;因为项目使用的webpack3开发的场景&#xff0c;打包后的vendor很大&#xff0c;如图显示 如果不做gzip处理的话&#xff0c;大小在2M多&#xff0c;gzip后的大小是…

深入理解操作系统与计算机体系结构

文章目录 操作系统(Operator System)为什么要有操作系统操作系统是如何进行管理的为什么说操作系统是安全&#xff0c;稳定&#xff0c;高效的理解系统调用和库函数 操作系统(Operator System) 概念&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称OS&…

C++中的数据结构与算法

随处可见的红黑树 一般会用到[key,value]。 例如github中这个例子&#xff0c;第一个是访问网站&#xff0c;第二个是访问次数&#xff0c;但是这个不是静态的&#xff0c;这有个动态排序&#xff0c;并且当我们需要让相应的访问次数加1的时候&#xff0c;我们用红黑树查找的时…

刷题训练之前缀和

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握前缀和算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

Oracle系统参数调整【数据库实例优化系列一】

Oracle实例是:内存组件和相关的后台进程组成。这些内存组件提高了数据库的运行,而后台进程负责管理系统和内存组件。 一、SGA和实例优化 Oracle的SGA是指的系统全局区。sga是数据库运行期间使用的一段公有内存,即数据库用户都可以访问这段内存,包括: 共享池、重做日志缓冲…

分享一些实用的工具

1、amCharts5&#xff1a;模拟航线飞行/业务分布图/k线/数据分析/地图等 网址&#xff1a; JavaScript mapping library: amCharts 5https://www.amcharts.com/javascript-maps/ Demo地址&#xff1a;Chart Demos - amChartshttps://www.amcharts.com/demos/#maps 他分为amC…