使用ArcGIS的arcpy获取要素图层的别名

本文围绕ArcGIS展开,探索了shp文件和gdb里要素类的属性。发现shp属性的别名即名称,不可修改;gdb里的要素类可修改别名。还尝试通过arcpy读取别名,经多次尝试,最终发现可从表属性里获取。此外,验证了未设置别名时可能为空字符串的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/90695027

 

搜不到相关内容,踏破铁鞋,一度心灰意冷,打算手工一个个处理,在丞相的鼓励下,幸得柳暗花明,此注。

答案的关键先直接告诉你:

arcpy.Describe(item).aliasName

详情请看下文: 

如下图所示是一个shp文件的属性,这个窗口是在Catalog里右键点击属性所得:

这里虽然显示有别名,但这里的名称和别名不能修改。我怀疑:shp没有别名,所谓的别名就是这个shp的名称。

若不知道如何打开,请参阅下图:

下面我们开始探索。

把这个shp拖到ArcMAP窗口中,右键打开属性,这个属性是内容列表中这个图层的属性,这个图层引用shp的数据,所以这个图层的属性和shp文件的属性只是相关。

经查询,没发现有别名。

换个对象,找gdb里的要素类试试看。

这个名称还是不能改动,但别名可以修改。刚创建的要素类的别名和名称一样,本例所示的别名原来和名称一样都是aa,我把别名改成了bb,关机后再开机,打开再看还是bb,说明这个要素类的别名被成功修改了。

这里我们发现:在属性里,我们不能修改要素类或shp的名称,如果需要修改,可以如下图所示直接修改,并不能在要素类属性中修改,即名称是只读的。要素类属性中可以修改别名,shp属性的别名其实就是名称,不可修改。

我们再看看gdb的要素数据集中的要素类怎么样。

经查验,只要是在gdb里的要素类,无论是否在要素数据集中,都是一样的——可以修改别名。

既然可以修改别名,肯定也可以通过arcpy读取别名,那么怎么读取呢?

本文先在此做个声明:由于ArcGIS版本不同,可能导致有些语法操作,在这个版本可以正常运行但在那个版本就会报错。

都有哪些属性呢?看官方文档:http://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-functions/describe.htm。其他版本也多参阅相应版本的文档。对于10.1/10.2/10.3等,大部分是相同的,但个别地方有差异,请各位注意即可。

好吧,参阅这个官方文档和代码,没找到。

再看要素类属性http://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-functions/featureclass-properties.htm

属性说明数据类型
featureType

(只读)

要素类的要素类型。

  • 简单克里金 —面、折线和点,表示具有面积的对象或地点(如水体);线状对象(如河流)以及局部位置(如房屋或采样位点)。
  • SimpleJunction —几何网络中表示点对象的简单交汇点要素,例如,保险丝、供水点或者电话线杆。
  • SimpleEdge —几何网络中表示折线对象的简单边要素,例如,主要高架装置或次要高架装置。
  • ComplexEdge —几何网络中表示具有中跨连通性的折线对象的复杂边要素,如主要高架装置。网络资源可通过中跨连通性连续流过复杂边。
  • 注记 —地点或对象名称/标识符,例如,街道名称、消火栓 ID 号、土地价值或高程。
  • CoverageAnnotation —地点或对象名称/标识符,例如,街道名称、消火栓 ID 号、土地价值或高程。地理数据库不支持;仅受 coverage 数据集支持。
  • 维度 —测量值,例如,距离、长度、宽度和深度。
  • RasterCatalogItem —栅格目录中含有轮廓线、名称、元数据和其他用户定义属性等信息的栅格数据集。
String
hasM

(只读)

指示几何是否启用 m 值。

Boolean
hasZ

(只读)

指示几何是否启用 z 值。

Boolean
hasSpatialIndex

(只读)

指示要素类是否具有空间索引。

Boolean
shapeFieldName

(只读)

Shape 字段的名称。

String
shapeType

(只读)

几何形状类型。

  • 折线
  • 多点
  • 多面体
String

一个个都试了试,也没。

猜:alternateName、alias、aName等,都是——未果。

再看文档:GDB要素类http://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-functions/gdb-featureclass-properties.htm

属性说明数据类型
areaFieldName

(只读)

The name of the geometry area field.

String
lengthFieldName

(只读)

The name of the geometry length field.

String
representations

(只读)

A list of Describe objects for the representations associated with the feature class.

Describe

一个个试了试,也不行,真要崩溃了。

这就像找茬,找线索,不能放过任何一个细节……

注意这个:

奇怪吧?我也奇怪,为什么是表属性里的。但经过验证,通过这个,我们可以得到别名。

10.1的也是一样的:

 

我们把gdb里的aa和dd要素类拖到map中,可以看到:

由此可得,图层默认使用要素类的别名。

真是不容易啊……路漫漫其修远兮……吾将上下而求索……

还有一个问题:如果没有设置别名,别名是不是就是名称?经验证,输出一个新建的要素类的别名,是空的,执行下面这句:

print arcpy.Describe(item).aliasName==''

结果是True,所以如果需要小心这个坑——要素类属性中看到有别名,如果别名和名称一样,很可能别名就是空字符串。

 

独孤尚良dugushangliang——著

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值