路径解释:绝对、相对、UNC 和 URL
您每天都通过路径浏览至数据和工具箱。在共享数据和工具之前,您对此可能没有做太多考虑,其实您也无需考虑。本部分将详细讨论以下方面内容:路径、定义不同类型的路径以及 ArcGIS 对路径的管理方式。
路径和路径名
Path
路径是由斜线分割的目录名的列表,后面连接目录名或文件名。目录与系统文件夹相同。
E:\Data\MyStuff (path terminating in a directory name) E:\Data\MyStuff\roads.shp (path terminating in a file name)
路径名
有时,您可能会看到术语路径名 (pathname) 或路径名 (path name)。路径 (Path)、路径名 (pathname) 和路径名 (path name) 的含义相同。
系统与目录路径
ArcGIS 使用术语目录路径或 ArcCatalog 路径。目录路径是只有 ArcGIS 能够识别的路径。例如:
D:\Data\Final\Infrastructure.gdb\EastValley\powerlines
是指位于文件地理数据库 Infrastructure 的 EastValley 要素数据集中的 powerlines 要素类。对于 Windows 操作系统来说,这不是有效的系统路径,因为 Windows 不能识别文件地理数据库中的要素数据集或要素类。当然,ArcGIS 中的任何操作都可以使用目录路径。
工作空间和基本名称
目录路径包括两部分:工作空间和基本名称,如下所示:
位置
位置是路径的广义术语,例如在“浏览至数据的位置”或“输入数据的位置”中所用的该词。
正斜线与反斜线
Windows 约定使用反斜线 (\) 作为路径中的分隔符。UNIX 系统使用正斜线 (/)。在 ArcGIS 中,无论是在路径中使用正斜线还是反斜线,ArcGIS 始终可以将正斜线和反斜线转换成相应的操作系统约定。
脚本中的反斜线
Python 等基于 UNIX 的和类似 C 语言的编程语言将反斜线 (\) 视为转义字符。例如,\n 表示回车。由于路径可以包含反斜线,因此需防止将反斜线用作转义字符。最简单的方法是使用 r 指令将路径转换成 Python 原始字符串,如下所示。这会指示 Python 忽略反斜线。
thePath = r"E:\data\telluride\newdata.gdb\slopes"
绝对和相对路径
绝对(或完整)路径
绝对(或完整)路径以诸如 D: 之类的盘符开头,后跟一个冒号。
相对路径
相对路径是指相对于当前目录的位置。相对路径使用两种特殊符号,单点 (.) 和双点 (..),通过它们可以转换到当前目录或父目录。双点用于在目录等级中上移。单点表示当前目录本身。
在以下目录结构示例中,假定您使用 Windows 资源管理器导航至 D:\Data\Shapefiles\Soils。导航到此目录之后,相对路径将使用 D:\Data\Shapefiles\Soils 作为当前目录(如果导航到新目录,此新目录将成为当前目录)。当前目录有时被称为根目录。
如果要从当前目录 (Soils) 导航到 Landuse) 目录,可以在 Windows 资源管理器地址框中输入以下内容:
..\Landuse
Windows 资源管理器将导航到 D:\Data\Shapefiles\Landuse。使用 D:\Data\Shapefiles\Landuse 作为当前目录的其他几个示例如下:
.. (D:\Data\Shapefiles) ..\.. (D:\Data) ..\..\Final (D:\Data\Final) . (D:\Data\Shapefiles\Landuse - the current directory) .\..\Soils (D:\Data\Final\Soils) ..\..\.\Final\..\Shapefiles\.\Landuse (D:\Data\Shapefiles\Landuse)
不能在任何 ArcGIS 应用程序中输入相对路径(使用单点和双点标记)。也不能在 Python 脚本中使用相对路径。
相对路径不能跨越磁盘驱动器。例如,如果当前路径位于磁盘驱动器 D 上,则无法使用相对路径导航到磁盘驱动器 E 上的任何目录。
ArcMap 中的绝对和相对路径
创建 ArcMap(ArcScene 或 ArcGlobe)文档时,可以指定将路径存储为相对路径。要设置此选项,请在文件菜单下查看,然后单击地图文档属性。可以在此处指定是存储绝对路径,还是存储相对路径。
采用相对路径保存文档时,应用程序会将路径转换为相对于存储该文档的位置(当前目录)的相对路径(使用单点/双点标记)。例如,如果文档存储在
D:\Maps\Posters\Newmap.mxd
并且某个图层中的数据为
D:\Data\Final\Infrastructure.gdb\Streets
则在 Newmap.mxd 中存储如下内容:
..\..\Data\Final\Infrastructure.gdb\Streets
再次打开 Newmap.mxd 时,ArcMap 会将存储的相对路径从单点/双点注记重新转换为绝对路径表示方式,即以图层数据源的形式显示。此转换始终相对于地图文档的位置(当前目录)进行。
仅转换同一磁盘上的路径
相对路径不能跨越磁盘驱动器。也就是说,如果根目录位于磁盘驱动器 D 上,将无法使用相对路径导航至磁盘驱动器 E 上的目录。使用相对路径存储地图文档时,只会转换和存储同一个磁盘上的路径。
模型工具中的绝对和相对路径
与 ArcMap 中的数据一样,您可以指定将模型工具中的路径存储为相对路径。
用于相对路径的当前目录即是该工具的工具箱所在的目录。相对路径选项可以将路径转换和存储为以下形式:
- 模型中的数据
- 模型中的图形影像
- 模型中使用的工具
- 元数据工具和帮助中引用的文件
- 样式表
- 用于符号系统的图层文件
- 已编译的帮助文件 (.chm)
要存储为相对路径,请右键单击模型工具,单击属性,然后单击常规选项卡。在对话框的底部,选中存储相对路径名(不是绝对路径),如下所示。
仅转换同一磁盘上的路径
相对路径不能跨越磁盘驱动器。也就是说,如果根目录位于磁盘驱动器 D 上,将无法使用相对路径导航至磁盘驱动器 E 上的目录。使用相对路径存储模型时,只会转换和存储同一个磁盘驱动器上的路径。
脚本工具中的绝对和相对路径
使用“添加脚本”向导时,存储相对路径的选项将出现在第一个面板上。您也可以对此选项进行设置,方法是:右键单击脚本工具,单击属性,然后单击常规选项卡。在对话框的底部,选中存储相对路径名(不是绝对路径)。
用于相对路径的当前目录即是该工具的工具箱所在的目录。相对路径选项可以将路径转换和存储为以下形式:
- 脚本
- 用于默认值属性的数据集
- 元数据工具和帮助中引用的文件
- 用于符号系统属性的图层文件
- 已编译的帮助文件 (.chm)
- 样式表
仅转换同一磁盘上的路径
相对路径不能跨越磁盘驱动器。也就是说,如果根目录位于磁盘驱动器 D 上,将无法使用相对路径导航至磁盘驱动器 E 上的目录。使用相对路径存储脚本工具时,只会转换和存储同一个磁盘驱动器上的路径。
不转换脚本中的路径
ArcGIS 尚未找到一种可靠方法来检查脚本代码,查找所有路径并将其转换为相对路径。而且,您不能在脚本中使用单点和双点标记。例如,以下代码无效:
arcpy.AddField_management("..\redlands.mdb\streets", "ref_ID", "long", "9", "#", "#", \ "refcode", "NULLABLE", "REQUIRED", "#")
因为 ..\redlands.mdb\streets 是相对路径。
您需要修改脚本代码,然后才能相对于已知位置来查找数据。您可以轻松找到的一个位置是脚本位置,如共享 Python 脚本的技术中所述。
为何使用相对路径与绝对路径?
绝对路径有以下特点:
- 您可以将文档或工具箱移动到计算机上的任何位置,再次打开该文档或工具时即可查找到数据。
- 在大多数个人计算机上,数据的位置通常是固定的。也就是说,您通常不会在个人计算机上大跨度地移动数据。在此类情况下,应首选使用绝对路径。
- 您可以引用其他磁盘驱动器上的数据。
使用相对路径时,需进行如下调整:
- 移动地图文档或工具箱时,必须同时移动所引用的数据。
- 向其他用户传送文档、工具箱和数据时,应使用相对路径:否则,接收方的计算机与您的计算机必须具有相同的目录结构。
例如,请考虑以下目录结构。在本例中,D:\Tools\Toolboxes\Toolbox1 包含一个使用 D:\Tools\Scripts\MyScript.py 的脚本。
如果将工具箱从
D:\Tools\Toolboxes\Toolbox1
移动到其他磁盘,请使用绝对路径,例如
E:\Final\Toolbox1
ArcGIS 将可以找到 D:\Tools\Scripts\MyScript.py,并且所有程序都能正常运行。但是,如果使用相对路径,ArcGIS 将无法找到脚本,工具也将无法运行。工具对话框会打开,但在执行操作时,您将接收到一条错误消息“不存在与此工具相关联的脚本”。您必须打开工具的属性,然后输入脚本的正确路径。
另一方面,如果使用相对路径,则只需将文件夹 D:\Tools 复制到某人的计算机上,所有功能就都能正常使用。但使用绝对路径时却无法实现上述过程,因为接收方可能会将该文件夹复制到 F:\NewTools,这样该用户的计算机上将不存在路径 D:\Tools\Scripts\MyScript.py。
摘要
- 相对路径不能跨越磁盘驱动器。
- 在数据不发生移动的情况下最好使用绝对路径,绝对路径通常适用于个人计算机上的磁盘。
- 向其他用户传送文档和数据时最好使用相对路径。
- 相对路径使用单点/双点(. 和 ..)标记。可以在 Windows 资源管理器中或 Windows 命令提示符下输入带有此标记的相对路径。
- 但不可以在 ArcGIS 中输入带有单点/双点标记的相对路径。相对路径更适合存储在文档或工具箱中(在选中“存储相对路径名”选项之后)。
- 相对路径是相对于当前目录的位置,而当前目录则是保存的文档或工具箱所在的位置。
UNC 路径
UNC 代表通用(或一致、统一)命名约定,是一种用于访问计算机网络上的文件夹和文件的语法。语法如下:
\\<computer name>\<shared directory>\
后跟任意数量的目录,并以目录或文件名结尾。
例如:
\\pondermatic\public\studyarea.gdb \\omnipotent\shared_stuff\wednesday\tools
计算机名称的前面始终使用双反斜线 (\\)。
在 UNC 中,计算机名称又称为主机名称。
对于 UNC 路径,存在以下几条规则:
- UNC 路径不能包含盘符(如 D)。
- 不能导航到共享目录的上级目录。
- 用于文档和工具的存储相对路径名选项对 UNC 路径不起作用。
在 ArcGIS 中,可以在需要路径的任何位置使用 UNC 路径。这对局域网 (LAN) 上的共享数据非常有用。只要计算机未关闭或未断开网络连接,就可以将数据存储在一台计算机上,然后具有该计算机访问权限的用户便可使用共享数据了。
在 Windows 中,您可以共享某个文件夹,以便局域网上的其他用户能够对其进行访问。在 ArcCatalog 或 Windows 资源管理器中,右键单击文件夹,单击共享和安全,然后按照打开的对话框上的说明进行操作。
URL
URL 代表统一资源定位符,专门用于指定 Internet 上文档的地址。URL 由以下几部分组成:
- 用于访问资源的协议,如 HTTP(超文本传输协议)或 FTP(文本传输协议)
- 要与之通信的主机(服务器)
- 主机上的文档的路径
例如:
http://www.esri.com/products.html
在 Windows Internet Explorer 中,您可以在 Internet Explorer 地址栏中输入 www.esri.com,然后它会自动添加 http://。不过,指定协议(如 http)会更加准确。其他协议包括 HTTPS(安全超文本传输协议)、FTP、mailto(电子邮件地址)和新闻(Usenet 新闻组)。
在 ArcGIS 中,只能在允许使用的位置使用 URL。通常,用户界面会告知您是否允许使用或需要 URL。在 ArcGIS 中使用 URL 时,建议包括具体的协议,如下例所示:
http://www.esri.com
而不仅仅是输入
www.esri.com
ArcSDE 连接文件路径
地理处理工具使用 ArcSDE 连接文件 (.sde) 的路径来确定存储于 ArcSDE 数据库中的数据的位置。
D:\Data\Final\Connection to ArcSDE.sde\EastValley\powerlines
.sde 文件中的连接信息用于创建到 ArcSDE 的连接,而地理数据库查找所请求数据的方式与其查找文件和个人地理数据的方式相同(参阅上文)。
使用其他地理数据库数据格式 (.gdb 和 .mdb) 时,应将 .sde 文件存储在 ToolShare 文件夹下,并且工具应使用相对路径访问 .sde 文件。共享工具时,不建议使用 ArcGIS 存储 ArcSDE 连接文件的默认位置,即数据库连接系统位置来存储和访问 .sde 文件。此位置对于每个用户来说都是不同的(与本地 Windows 用户配置文件相关),并且可能包含与所共享的工具名称相同,但连接信息不同的 .sde 文件,从而导致工具运行失败。
在共享工具中使用 ArcSDE 数据时,不仅所共享的工具必须具有对 .sde 文件的访问权限,而且 .sde 文件还必须包含针对工具所共享给的用户的,安全的授权连接信息。此外,该用户也必须有权访问 ArcSDE 地理数据库所在的网络。在许多组织中,将数据库连接信息共享给未获连接数据库授权的用户的行为视为安全漏洞。将包含连接信息的 ArcSDE 连接文件共享给其他用户这一简单行为就可能破坏了组织的安全策略。为避免出现安全问题,应首先确保与之共享工具的用户有权连接到 ArcSDE 数据库。如果事实如此,那么,您在 ToolShare 文件夹中提供的 .sde 文件就不应包含用户名/密码,而且您应当提供一个文档,说明如何使用用户的连接信息更新 ArcSDE 连接文件。要了解组织的安全策略,请联系 ArcSDE 和数据库管理员。