【问题标题】:arcpy get database path of feature class in feature datasetarcpy 获取要素数据集中要素类的数据库路径
【发布时间】:2015-05-25 08:15:36
【问题描述】:

我正在尝试获取可能在也可能不在要素数据集中的要素类的数据库路径。我正在使用要素类的os.path.dirname。如果要素类不在要素数据集中(很好),这将为我提供数据库路径,但如果要素类在要素数据集中,它将为我提供要素数据集的路径。

这可以是文件、个人或 sde 地理数据库。我正在考虑使用“.sde”的split,但如果它是不同类型的地理数据库,那将不起作用。

路径示例可以是:

  • 对于要素数据集内部:C:\GISData\Data.gdb\Property\Erf
  • 对于 gdb 根目录下:C:\GISData\Data.gdb\Erf

在这两种情况下,我都希望获得 C:\GISData\Data.gdb

谢谢。

【问题讨论】:

    标签: python database path dataset arcpy


    【解决方案1】:

    查看这个简短的blog posting,他们使用以下函数:

    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" 来解决问题,但这绝对是一种更清洁的方法。
    • 另见gis.stackexchange.com/questions/112288/… 处理路径中的特征数据集
    【解决方案2】:

    从文档中不明显的另一种方法是使用 path(只读)属性:

    Describe object properties

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

    【讨论】:

    • (我以为你使用的是 arcpy)
    • 这并不能解决地理数据库中要素数据集的问题,因为它们是由path 报告的。它只是os.path.dirname 函数的替代品。
    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多