ArcGIS Desktop

  • 文档
  • 支持

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS for Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

帮助

  • 主页
  • 入门
  • 制图
  • 分析
  • 管理数据
  • 工具
  • 更多...

从 ArcSDE 管理命令中迁移

  • 地理数据库管理
  • 数据管理

在 ArcGIS for Desktop 中使用地理处理工具、Python 脚本或地理数据库管理工具执行您之前使用 ArcSDE 管理命令执行的地理数据库管理和数据管理。

以下部分列出如何完成企业级地理数据库的公共地理数据库管理和数据管理任务。

地理数据库管理

一些管理任务要求您以地理数据库管理员身份连接;一些要求您以数据库管理员的身份连接。在大多数情况下,如果要进行脚本管理任务,您将需要创建以规定用户身份连接的数据库连接文件 (.sde)。使用创建数据库连接地理处理工具或 ArcGIS for Desktop 中的数据库连接对话框创建该文件。

创建地理数据库工具

在 Microsoft SQL Server、Oracle 或 PostgreSQL 中创建地理数据库

创建企业级地理数据库地理处理工具或启用企业级地理数据库地理处理工具

在 IBM DB2 或 IBM Informix 中创建地理数据库

启用企业级地理数据库地理处理工具

控制地理数据库配置工具

在 DBTUNE 中添加配置关键字并编辑参数

导出地理数据库配置关键字和导入地理数据库配置关键字地理处理工具

更改日志文件表配置

配置地理数据库日志文件表地理处理工具

从 Oracle 删除方案地理数据库

删除方案地理数据库地理处理工具

升级地理数据库

升级地理数据库地理处理工具

管理版本化地理数据库工具

创建地理数据库版本

创建版本地理处理工具或在 ArcGIS for Desktop 中的版本管理器对话框

协调版本

协调版本地理处理工具或使用 ArcMap 中的协调函数

提交父版本的更改内容

提交版本地理处理工具或使用 ArcMap 中的提交函数

压缩版本化的地理数据库

压缩地理处理工具或 ArcGIS for Desktop 中的压缩数据库函数

删除地理数据库版本

删除版本地理处理工具或在 ArcGIS for Desktop 中的版本管理器对话框

诊断并修复版本元数据和系统表

诊断版本元数据、修复版本元数据、诊断版本表和修复版本表地理处理工具

更新版本系统表的索引

重建索引地理处理工具

更新版本系统表的统计数据

分析数据集地理处理工具

管理连接工具

获取当前地理数据库连接的列表

ArcGIS for Desktop 中地理数据库管理对话框的连接选项卡或 ListUser Python 函数

您也可以在地理数据库管理对话框中的锁定选项卡中查看连接具有的锁。

从地理数据库中删除连接

ArcGIS for Desktop 中地理数据库管理对话框的连接选项卡或 DisconnectUser Python 函数

临时阻止地理数据库连接和重新启用连接

ArcGIS for Desktop 中数据库属性对话框的连接选项卡或 AcceptConnections Python 函数

数据管理

将数据加载到企业级地理数据库中时,您连接的用户将拥有地理数据库中的数据。一些地理数据库管理任务只能由数据所有者执行,例如授予权限或重新构建索引。请确保创建数据库连接文件 (.sde),并在执行这些任务前连接正确的用户。

大多数情况下,ArcSDE 管理命令用于脚本数据加载或管理。所以,在以下部分列出的数据管理任务包括示例脚本。

如果想要作为每个脚本的一部分创建数据库连接文件,请使用 CreateDatabaseConnection_management。

将地理数据库内容导出到可移植文件

说明:将地理数据库方案、关系、行为和数据导出到 XML 工作空间文档以与其他人共享。您也可以将地理数据库内容的子集导出到某 XML 工作空间文档。

可用工具:导出 XML 工作空间文档

示例脚本:

""" Export geodatabase contents to a portable file """

import arcpy
import sys


def ExportXMLWorkspaceDocument(in_data, out_file, export_type=None, storage_type=None, export_metadata=None):
    """ Export geodatabase contents to a portable file """
    try:
        arcpy.ExportXMLWorkspaceDocument_management(in_data,
                                                    out_file,
                                                    export_type,
                                                    storage_type,
                                                    export_metadata)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ExportXMLWorkspaceDocument(*arguments)

导入新地理数据库内容

说明:XML 工作空间文档包括地理数据库方案、关系和行为,同时也可以包括数据。您可导入只包含地理数据库方案的 XML 工作空间文档,然后在该方案中加载您自己的数据。或者您也可以创建模板地理数据库,将该地理数据库中定义的方案和关系导出到 XML 工作空间文档,并将该文档导入到新地理数据库。

可用工具:导入 XML 工作空间文档

示例脚本:

""" Import new gdb contents """

import arcpy
import sys


def ImportXMLWorkspaceDocument(target_geodatabase, in_file, import_type=None, config_keywords=None):
    """ Import new gdb contents """
    try:
        arcpy.ImportXMLWorkspaceDocument_management(target_geodatabase,
                                                    in_file,
                                                    import_type,
                                                    config_keywords)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ImportXMLWorkspaceDocument(*arguments)

导入内容以覆盖旧内容

说明:XML 工作空间文档包括地理数据库方案、关系和行为,同时也可以包括数据。您可以导入包含方案、关系、行为和数据的 XML 工作空间文档并覆盖现有地理数据库的内容。如果从另一个机构或承包商接收项目更新,您可能会执行此操作,并且您会需要所有的最新数据和定义。

可用工具:删除加上导入 XML 工作空间文档

示例脚本:

""" Imports contents to overwrite old contents """

import arcpy
import sys
from xml.etree import ElementTree
import re


def FindDatasets(xml_file):
    """ Open xml file and identify datasets """
    xmldoc = ElementTree.ElementTree()
    xmldoc.parse(xml_file)
    root = xmldoc.getroot()

    contents = []
    for i in root.findall('WorkspaceDefinition/DatasetDefinitions/DataElement'):
        contents.append(i.findtext('Name'))

        for j in i.findall('./Children/DataElement/CatalogPath'):
            contents.append('/'.join(re.split(r'/[a-z|A-Z]*=', j.text)[1:]))

    contents.reverse()
    return contents


def DeleteDatasets(database, datasets):
    """ Delete dataset in database """
    for ds in datasets:
        try:
            arcpy.Delete_management(os.path.join(database, datasets))
        except:
            print('Unable to delete {}'.format(ds))


def ImportXML(database, xml_file):
    """ Import XML workspace document """
    arcpy.ImportXMLWorkspaceDocument_management(database, xml_file)


if __name__ == "__main__":
    xml_file = sys.argv[1]
    database = sys.argv[2]

    datasets = FindDatasets(xml_file)
    DeleteDatasets(database, datasets)
    ImportXML(database, xml_file)
    arcpy.ImportXMLWorkspaceDocument_management(database, xml_file)

导入一个 shapefile 或 coverage 和地图字段

说明:指定从 shapefile 或 coverage 的哪些字段将地图导入到地理数据库生成要素类中的哪些字段。

可用工具:ListFields 加上 FeatureClassToFeatureClass_conversion 加上 FieldMappings

示例脚本:

import arcpy
import os

arcpy.env.overwriteOutput = True

input_features = r'C:\Users\davi4075\Documents\ArcGIS\lakes.shp'
out_fc = r'C:\Users\davi4075\Documents\ArcGIS\mexico.gdb\out_lakes'

fms = arcpy.FieldMappings()
fms.fieldValidationWorkspace = os.path.dirname(out_fc)

# Cycle through input field to transfer
for field in arcpy.ListFields(input_features):

    # Exclude geometry and objectid fields
    if field.type not in ['Geometry', 'OID']:
        fm = arcpy.FieldMap()
        fm.addInputField(input_features, field.name)

        # if altering field properties, need to push updated field back
        # to FieldMap
        field.name = field.name.upper()
        fm.outputField = field

        # Insert FieldMap into FieldMappings
        fms.addFieldMap(fm)

arcpy.FeatureClassToFeatureClass_conversion(
    input_features, os.path.dirname(out_fc), os.path.basename(out_fc),
    field_mapping=fms)

一次导入多个 shapefile 或 coverage

说明:一次导入多个 shapefile 或 coverage

可用工具:要素类至地理数据库

示例脚本:

""" Import multiple shapefiles or coverages at one time """

import arcpy
import sys


def ImportMultiple(input_features, output_database):
    """
    Import multiple shapefiles or coverages at one time

    input_features -- semi-colon delimited string of shapefiles and/or coverages
    """
    try:
        arcpy.FeatureClassToGeodatabase_conversion(input_features, output_database)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ImportMultiple(*arguments)

导入多个 shapefile 或 coverage,并授予现有数据库组对新要素类的权限

说明:一次导入多个 shapefile 或 coverage 并授予现有数据库组对生成要素类的权限,以便组成员访问新要素类。

可用工具:要素类至地理数据库加上更改权限

示例脚本:

"""
Import multiple shapefiles or coverages and grant privileges on new feature
classes to existing groups or users
"""

import arcpy
import sys


def ImportMultipleAndGrantPrivileges(input_features, output_database, user, view=None, edit=None):
    """
    Import multiple shapefiles or coverages and grant privileges on new feature
    classes to existing groups or users
    """
    try:
        feature_classes = input_features.split(';')
        for fc in feature_classes:
            out_fc = arcpy.CreateUniqueName(fc, output_database)
            arcpy.FeatureClassToFeatureClass_conversion(fc, out_fc)
            arcpy.ChangePrivileges_management(out_fc, user, view, edit)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ImportMultipleAndGrantPrivileges(*arguments)

将多个 shapefile 合并到一个要素类

说明:如果您有包含相同类型数据的 shapefile,您可以在地理数据库中将它们合并到一个要素类。例如,如果您拥有表示多个学区中学校的点 shapefile,您可以将这些 shapefile 导入到地理数据库中的某一个学校要素类中。

可用工具:追加加上合并

示例脚本:

""" Combine multiple shapefiles into one feature class """

import arcpy
import sys


def CombineMultipleFeatureClasses(input_features, output_or_target):
    """ Combine multiple shapefiles into one feature class """
    try:
        feature_classes = input_features.split(';')
        if arcpy.Exists(output_or_target):
            arcpy.Append_management(feature_classes, output_or_target)
        else:
            arcpy.Merge_management(feature_classes, output_or_target)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    CombineMultipleFeatureClasses(*arguments)

导入多个表

说明:您可一次将多个 dBASE、INFO、VPF、OLE DB 或地理数据库表导入到您的企业级地理数据库。

可用工具:表转地理数据库(Geodatabase)

示例脚本:

""" Import multiple nonspatial tables """

import arcpy
import sys


def ImportTables(in_tables, target_database):
    """
    Export data to a shapefile

    in_tables -- semi-colon delimited string of tables
    target_database -- the database were tables will be added
    """
    try:
        tables = in_tables.split(";")
        arcpy.TableToGeodatabase_conversion(tables, target_database)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ImportTables(*arguments)

截断表或要素类并追加记录

说明:如果从其他机构或外部组织接收数据更新,您可以保留现有的表和通过截断表与追加数据更新来定义表的权限。

可用工具:截断表加上追加

示例脚本:

""" Truncate table or feature class and append records """

import arcpy
import sys


def TruncateTableOrFeatureClass(in_table, target_table):
    """ Truncate table or feature class and append records """
    try:
        arcpy.TruncateTable_management(target_table)
        arcpy.Append_management(in_table, target_table, schema_type="NO_TEST")
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    TruncateTableOrFeatureClass(*arguments)

截断表或要素类、追加记录和更新数据库统计数据

说明:如果从其他机构或外部组织接收数据更新,您可以保留现有的表和通过截断表与追加数据更新来定义表的权限。如果表包含大量记录,您将可能需要在新更新的表中更新数据库统计数据。

可用工具:截断表加上追加加上分析数据集

示例脚本:

"""
Truncate table or feature class, append records, and update
database statistics
"""

import arcpy
import sys
import os


def TruncateTableOrFeatureClass(in_table, target_table):
    """
    Truncate table or feature class, append records, and update
    database statistics
    """
    try:
        arcpy.TruncateTable_management(target_table)
        arcpy.Append_management(in_table, target_table)

        descr = arcpy.Describe(os.path.dirname(target_table))
        if getattr(descr, 'connectionProperties', None):
            conn = os.path.dirname(target_table)
        else:
            conn = os.path.dirname(os.path.dirname(target_table))

        arcpy.AnalyzeDatasets_management(conn)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    TruncateTableOrFeatureClass(*arguments)

创建非空间数据库视图

说明:数据库视图可合并多个表中的数据并限制从源表中返回的属性。

可用工具:创建数据库视图

示例脚本:

""" Create nonspatial view """

import arcpy
import sys


def CreateNonspatialView(input_database, view_name, view_definition):
    """ Create nonspatial view """
    try:
        arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    CreateNonspatialView(*arguments)

创建包含 SQL 几何类型列的数据库视图

说明:数据库视图可合并多个表或要素类中的数据,并限制从源表或要素类中返回的属性。您可以在视图中包括单个 SQL 几何类型列,这样可在 ArcGIS 中显示空间数据。

可用工具:创建数据库视图

示例脚本:

""" Create view containing SQL geometry type column """

import arcpy
import sys


def CreateSpatialView(input_database, view_name, view_definition):
    """ Create view containing SQL geometry type column """
    try:
        arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    CreateSpatialView(*arguments)

删除表

说明:您可以一次从地理数据库中删除多个表。如果工作流中的数据为临时数据,例如项目特定的数据或在工作流中接收的替代数据来自外方,这可能非常有用。

可用工具:删除

示例脚本:

""" Delete nonspatial tables """

import arcpy
import sys


def DeleteNonspatialTables(in_data):
    """
    Delete nonspatial tables

    in_data -- semi-colon delimited string of tables
    """
    try:
        tables = in_data.split(';')
        for table in tables:
            arcpy.Delete_management(table)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    DeleteNonspatialTables(sys.argv[1])

删除要素类

说明:您可以一次从地理数据库中删除多个要素类。如果工作流中的数据为临时数据,例如项目特定的数据或在工作流中接收的替代数据来自外方,这可能非常有用。

可用工具:删除

示例脚本:

""" Delete feature classes """

import arcpy
import sys


def DeleteFeatureClasses(in_data):
    """
    Delete feature classes

    in_data -- semi-colon delimited string of feature classes
    """
    try:
        feature_classes = in_data.split(';')
        for fc in feature_classes:
            arcpy.Delete_management(fc)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    DeleteFeatureClasses(sys.argv[1])

将数据导出到 shapefile

说明:将要素类导出到 shapefile。

可用工具:要素类转 Shapefile

示例脚本:

""" Export data to a shapefile """

import arcpy
import sys


def ExportToAShapefile(in_table, target_shp):
    """ Export data to a shapefile """
    try:
        if arcpy.Exists(target_shp):
            arcpy.Append_management(in_table, target_shp, schema_type="NO_TEST")
        else:
            arcpy.CopyRows_management(in_table, target_shp)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ExportToAShapefile(*arguments)

协调、提交和压缩版本化地理数据库

说明:使数据和您的地理数据库版本化,以便编辑需要长时间由多人同时编辑数据的工作流。要实现这一步,要求对地理数据库做出一些维护。这包括根据祖先版本协调版本化数据以整合在祖先版本中的更改、从子版本向祖先版本提交编辑内容以及压缩地理数据库以移除不需要的版本状态。

可用工具:协调版本加上压缩

示例脚本:

""" Reconcile, post, and compress versioned geodatabase """

import arcpy
import sys


def ReconcilePostAndCompress(input_database, reconcile_mode):
    """
    Reconcile, post, and compress versioned geodatabase
    """
    try:
        arcpy.ReconcileVersions_management(input_database, reconcile_mode)
        arcpy.Compress_management(input_database)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    ReconcilePostAndCompress(*arguments)

同时,请参阅使用 Python 脚本批量协调和提交版本。

版本化表或要素类,向其添加全局 ID,然后创建复本

说明:表或要素类必须注册为版本化并包含全局 ID 列才能进行复制。

可用工具:注册版本加上添加全局 ID加上创建复本

示例脚本:

""" Version tables, add global IDs to tables, and create a replica """

import arcpy
import sys


def VersionTablesEtc(in_tables, in_type=None, out_geodatabase=None, out_name=None):
    """ Version tables, add global IDs to tables, and create a replica """
    try:
        tables = in_tables.split(';')
        for table in tables:
            arcpy.RegisterAsVersioned_management(table)
        arcpy.AddGlobalIDs_management(tables)

        if 'CreateReplica' in dir(arcpy.management):
            arcpy.CreateReplica_management(tables, in_type, out_geodatabase, out_name)

    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    arguments = sys.argv[1:]
    VersionTablesEtc(*arguments)

将第三方表注册到地理数据库

说明:如果使用第三方应用程序或 SQL 在存储地理数据库的数据库中创建表(空间以及非空间),那么您可以将表注册到地理数据库。这会将表的相关信息添加到地理数据库系统表,然后这些表便可以作为地理数据库的一项功能。

可用工具:注册到地理数据库(Geodatabase)

示例脚本:

""" Register third-party tables with the geodatabase """

import arcpy
import sys


def RegisterThirdPartyTables(in_tables):
    """
    Register third-party tables with the geodatabase

    in_tables -- semi-colon delimited string of tables
    """
    try:
        tables = in_tables.split(';')
        for table in tables:
            arcpy.RegisterWithGeodatabase_management(table)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    RegisterThirdPartyTables(sys.argv[1])

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS 平台

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • 内部人员博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
Copyright © 2017 Esri. | 隐私政策 | 法律声明