gpt4 book ai didi

python - ArcPy ListLayers 用作 FME 参数

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:32 25 4
gpt4 key购买 nike

我不确定这是否更多是一个 Python、FME 还是 Esri 问题...

情况如下 - 用户打开了一个 MXD 文档,该文档连接到具有某个版本的 ArcSDE 数据库。我创建了一个 FME 工作台来写入该数据库,但用户不想手动输入 ArcSDE 版本名称作为用户参数(当前的设置方式)。相反,他们希望在工作台中使用当前在 MXD 中连接的任何版本。

我整理了一些Python代码,为打开的MXD创建当前版本名称的文本文件,但我想使用这个值(或者可能是返回的值)作为新的脚本(Python) 在 FME 工作台中使用的私有(private)参数。

现在有两个问题:

  1. 它列出了所有层的版本名称(我只想要一条记录,这样我就可以将一个值传递给 FME)
  2. 它写入文本文件。它是否应该只返回版本名称,以便 FME 可以将其用作参数?如果是这样,我该怎么做?

这是我到目前为止的代码(我是 Python 新手,所以请耐心等待!)

import arcpy, os
mxd = arcpy.mapping.MapDocument(r'CURRENT')
text_file = open("C:\\temp\\VersionName.txt","w")
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr.supports("SERVICEPROPERTIES"):
servProp = lyr.serviceProperties
if lyr.serviceProperties["ServiceType"] != "SDE":
print "Service Type: " + servProp.get('ServiceType', 'N/A')
else:
text_file.write (servProp.get('Version'))
text_file.close()
del mxd

最佳答案

假设所有层都使用相同的版本,您可以这样做:

import arcpy
mxd = arcpy.mapping.MapDocument(r'CURRENT')
layer_list = arcpy.mapping.ListLayers(mxd)
first_layer = layer_list[0] #The first item in layer_list
servProp = first_layer.serviceProperties #Get properties for the first layer
version = servProp.get('Version') #Get the version

要在 FME 中使用版本名称作为参数,您可以使用 PythonCaller 转换器并将“version”设置为要公开的属性。请参阅https://knowledge.safe.com/articles/How_To/Python-and-FME-Basics用于文档。

祝你好运!

汤姆

关于python - ArcPy ListLayers 用作 FME 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com