使用arcpy获取要素数据集中要素类的数据库路径。

7
我正在尝试获取要素类的数据库路径,该要素类可能在要素数据集中,也可能不在。我正在使用要素类的 os.path.dirname 。如果要素类不在要素数据集中,则这将给我数据库路径(很好),但是如果要素类在要素数据集中,则会给我要素数据集的路径。
这可以是文件、个人或sde地理数据库。我考虑使用 split 使用“.sde”,但如果它是不同类型的geodatabase,那么就行不通了。
路径的示例可能是:
对于要素数据集内部: C:\GISData\Data.gdb\Property\Erf 对于gdb根下面: C:\GISData\Data.gdb\Erf 在这两种情况下,我都想要获取 C:\GISData\Data.gdb
谢谢。
2个回答

9

查看这篇短博客文章,其中使用了以下函数:

def get_geodatabase_path(input_table):
  '''Return the Geodatabase path from the input table or feature class.
  :param input_table: path to the input table or feature class 
  '''
  workspace = os.path.dirname(input_table)
  if [any(ext) for ext in ('.gdb', '.mdb', '.sde') if ext in os.path.splitext(workspace)]:
    return workspace
  else:
    return os.path.dirname(workspace)

非常感谢。这帮了大忙。我通过一些 tryexcept 来检查 workspaceTypedatasetType == "FeatureDataset",但这绝对是更干净的做法。 - Genspec
另请参见http://gis.stackexchange.com/questions/112288/how-to-set-workspace-from-input-feature-class,以处理路径中的要素数据集。 - matt wilkie

6

在文档中不太明显的另一种方法是使用路径 (只读) 属性:

描述对象属性

import arcpy
desc = arcpy.Describe(r"C:\GISData\Data.gdb\Erf")
print desc.path

# prints: u"C:\\GISData\\Data.gdb"

(我假设你正在使用arcpy) - Adam
6
这并没有解决地理数据库中要素数据集的问题,因为它们是通过“路径”报告的。它仅仅是os.path.dirname函数的替代品。 - Andy Harfoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接