arcpy操作sde中的要素类

博客介绍了在ArcGIS10.6.1和Oracle12c R1环境下,对sde中要素类的操作。包含示例一,对sde中要素类执行缓冲区分析,说明了sde路径获取及输出文件路径;示例二,遍历sde中要素类并获取指定要素类某字段下要素记录内容。

环境:

ArcGIS10.6.1、Oracle12c R1

示例一:对sde中的要素类执行缓冲区分析

import arcpy 
from arcpy import env 


env.workspace = r"C:\Users\admin\AppData\Roaming\ESRI\Desktop10.6\ArcCatalog\Connection to orcl.sde" 

arcpy.Buffer_analysis("SDE.area_1" , "E:/output/majorrdsBuffered", "200 Meters", "FULL", "ROUND", "NONE")

其中env.workspace获取的是sde的名称路径,通过在catalog中选中sde,右键属性,在Database Properties下的“Name”选项能够看到sde的路径。

而“SDE.area_1”是sde中存放的要素类的名称,也就是对这个要素类执行缓存区分析。 

“E:/output/majorrdsBuffered”是执行缓存区后输出文件的路径,也就是存放在output文件夹,生成的文件名为“majorrdsBuffered” 。

示例二:遍历sde中的要素类,以及获取指定要素类的某个字段下要素记录内容

import arcpy  
import os  
from arcpy import env  
env.overwriteOutput = True  

env.workspace = r"C:\Users\admin\AppData\Roaming\ESRI\Desktop10.6\ArcCatalog\Connection to orcl.sde"


# check name
fc_list = arcpy.ListFeatureClasses()    

for fcname in fc_list:  
    print fcname, arcpy.Exists(fcname), arcpy.Exists(os.path.join(env.workspace,fcname))

fcname = "SDE.area_1"
with arcpy.da.SearchCursor(os.path.join(env.workspace,fcname), "NAME") as cursor:
    for row in cursor:
        print row[0]

 

### ArcMap 打开要素时出错的原因及解决方案 #### 错误原因分析 当尝试在ArcMap中打开由ArcGIS Pro创建或升级的注记要素时,可能会遇到兼容性问题。这些注记要素可能包含了新的属性或者结构,在旧版软件中不受支持[^1]。 对于更广泛的要素加载失败情况,如果ArcMap频繁崩溃,则应考虑通过启动日志和dmp文件来收集详细的错误信息。具体来说,位于`C:\Users\[当前登录账户]\AppData\Local\ESRI\ErrorReports`目录下的dmp文件能够提供关于程序异常终止的关键线索;上传该文件可以获得官方的支持解析报告,有助于精确定位故障源[^2]。 另外一种可能性在于环境配置方面的问题,比如Java开发环境中常见的依赖库路径不正确也会引发似的症状,尽管这是针对特定编程场景而言,但在处理GIS数据操作时同样需要注意是否有必要的第三方库缺失或是版本冲突等问题[^4]。 #### 解决策略 为了克服上述提到的第一个即与ArcGIS Pro相关的兼容性障碍,建议采取如下措施: - **转换数据格式**:将来自ArcGIS Pro的数据导出成较低版本可识别的形式后再行导入到ArcMap里。 - **更新客户端应用**:确保使用的ArcMap为最新稳定发行版,因为开发者通常会在后续迭代修复已知缺陷增强跨平台协作能力。 面对因未知因素引起的随机性崩溃现象,除了利用调试工具外还可以尝试重置用户界面设置、清理缓存以及禁用不必要的插件扩展等功能模块以排除干扰项。同时保持操作系统及其补丁处于最新状态也十分必要。 至于潜在的外部资源链接失效状况,则需仔细核对项目工程内的所有引用声明,按照实际需求调整相应的构建参数直至消除警告提示为止。 ```python # Python脚本示例用于批量修改.mxd文件中的连接字符串适应不同SDE服务端口变更的情况 import arcpy from pathlib import Path def update_sde_connection(mxd_path, old_port, new_port): mxd = arcpy.mapping.MapDocument(str(mxd_path)) for lyr in arcpy.mapping.ListLayers(mxd): if hasattr(lyr, 'connectionProperties'): props = lyr.connectionProperties if isinstance(props.get('instance'), str) and f":{old_port};" in props['instance']: props['instance'] = props['instance'].replace(f":{old_port};", f":{new_port};") lyr.updateConnectionProperties(old_conn_info=props, new_conn_info=props) mxd.save() for file in Path('.').glob('*.mxd'): try: update_sde_connection(file, 5152, 5153) print(f"{file.name}: Updated successfully.") except Exception as e: print(f"{file.name}: Failed to update - {str(e)}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值