来源:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//005600000013000000

多年来,Esri 为存储地理信息开发了三种主要数据格式 - coverage 格式、shapefile 格式及地理数据库格式。其中,Shapefile 为存储地理及属性信息提供了一种简单的非拓扑格式。正由于 shapefile 的简易性,使其成为一种非常流行的开放式数据转换格式。凭借其简易性,shapefile 似乎已成为人们的必然选择,然而,其在地理数据库地址应用中仍存在局限性。因此,使用 shapefile 时,应注意其局限性。概括如下:

  • 地理数据不仅仅局限于 shapefile 可存储的简单要素和属性。例如:在地理数据库中,可支持注记、属性关系、拓扑关系、属性域和子类型、坐标精度和分辨率以及很多其他功能,但在 shapefile 中则不支持这些内容。
  • 由于 shapefile 是一种广泛用于数据转换的开放式格式,因此,许多非 Esri 软件包都可输出 shapefile。(欲了解 shapefile 格式规范,请参阅http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf。)遗憾的是,这些软件包并不总能创建格式正确的 shapefile。或许,您已遭遇过从其他源接收受损 shapefile 的麻烦。
  • Shapefile 利用 dBASE 文件格式(.dbf 文件)来存储属性。而 dBASE 是一种非 Esri 格式,该格式是于二十世纪八十年代早期开发的,在当时是存储属性方面应用最广泛的格式。然而,它们的时代已悄然而逝,从那时起,数据制图表达方法方面的改进(如,Unicode 标准)不断涌现,以支持世界上大部分的书写系统。这就是 shapefile 无法使用非英语语言有效存储信息的原因之一。

正因为存在这些(或更多)问题,如果选用 shapefile 进行活动数据库管理将显得捉衣见肘 - 它们无法处理现今数据的创建、编辑、版本管理及归档的生命周期。

何时使用 shapefile?

  • 当导出数据供非 Esri 软件应用程序使用时
  • 当导出数据供 ArcView GIS 3 或 ArcInfo Workstation 使用时
  • 当需要迅速写入简单要素和属性时,例如用于地理处理服务(但是,您必须注意下面所述的局限性。)

何时不能使用 shapefile?

除以下列出的一些特例外,可以使用 shapefile 来存储简单的要素几何。不过,shapefile 的属性存在严重问题。例如,它们无法存储空值,无法向上舍入数字,对 Unicode 字符串的支持不足,字段名称最长只能为 10 个字符,且在同一字段中无法同时存储日期和时间。这些只是其中的主要问题。此外,它们不支持在地理数据库中的某些功能,如:域和子类型。因此,除非是简单的属性且不需要使用地理数据库功能,否则请不要使用 shapefile。

Shapefile 组件与文件扩展名

Shapefile 存储在三个或更多个具有相同前缀的文件中,且位于同一系统文件夹(shapefile 工作空间)中。当您使用 Windows 资源管理器而非 ArcCatalog 查看该文件夹时,可看到所包含的全部文件。

扩展模块

描述

必需的文件?

.shp

用于存储要素几何的主文件。此文件中未存储任何属性 - 仅有几何。

.shx

.shp 的配套文件,用于存储 .shp 文件中各个要素 ID 的位置。

.dbf

用于存储要素属性信息的 dBASE 表。

.sbn 和 .sbx

用于存储要素空间索引的文件。

.atx

为各 dBASE 属性索引(建立于 ArcCatalog 中)而创建。

.ixs 和 .mxs

读写 shapefile 的地理编码索引。

.prj

用于存储坐标系信息的文件。

.xml

ArcGIS 的元数据;用于存储 shapefile 的相关信息。

Shapefile 扩展名

几何限制

  • 任何 shapefile 组件文件都有大小为 2 GB 的上限,可理解为可包含的点要素最多约为 7000 万个。shapefile 中可存储的线或面要素的实际数量取决于每个线或面中的折点数(一个折点相当于一个点)。
  • Shapefile 也不包含类似于地理数据库要素类 x、y 容差的信息。两坐标系被视为同一坐标系之前,x、y 容差就是它们之间的最小距离。当评估相同要素类中各要素之间的关系或评估多个不同要素类之间的关系时,会使用此 x、y 容差。编辑要素时,也会经常使用它。若所要执行的任意类型的操作涉及元素之间的比较(例如,使用叠加工具裁剪工具、按位置选择图层工具或任何将两个或多个要素类作为输入的工具),则应使用地理数据库要素类(包含 x、y 容差)而非 shapefile。
  • 由于形状压缩方法的不同,shapefile 所占用的空间可能为文件地理数据库或 SDE 的三到五倍。
  • Shapefiles 支持多面体,但不支持以下多面体的高级功能:
    • 纹理坐标
    • 纹理及部分色带
    • 光线法向量
  • shapefile 的空间索引不足以与地理数据库要素类的空间索引进行对比。这就意味着,同地理数据库要素类相比,空间查询(如,选择面内的要素)耗时更长。当处理大量要素时,其唯一的明显不足之处就是效率低。
  • shapefile 不支持通过参数定义的曲线(也称为圆弧曲线)。如创建曲线中所述,将通过编辑数据库要素类来创建参数曲线。圆弧曲线利用数学公式绘制曲线。若您将含圆弧曲线的地理数据库要素类导出到 shapefile 中,就可将弯曲要素变换为简单线要素,并使空间上靠近的折点捕捉到弯曲的形状。

属性限制

  • 与其他格式不同,shapefile 以字符格式(而非二进制格式)存储数值型属性。对于实数(即,包含小数位的数字),这可能会导致舍入误差。因此,此限制不适用于形状坐标,而仅适用于属性。下表列出了各属性数据类型的字段宽度。

    地理数据库数据类型

    dBASE 字段类型

    dBASE 字段宽度(字符数)

    对象 ID

    数值

    9

    短整型

    数值

    4

    长整型

    数值

    9

    浮点型

    浮点型

    13

    双精度

    浮点型

    13

    文本

    字符

    254

    Date

    Date

    8

    dBASE 中的字段宽度

  • dBASE 文件标准仅支持其字段名称及字段值中存在 ANSI 字符。Esri 已针对 dBASE 文件新增了广泛的 Unicode 支持,以存储 Unicode 字段名称及字段值。但此附加支持仅适用于 ArcGIS,在非 Esri 应用程序中不可能提供这些支持。对于 Esri 来说,对 dBASE 中 Unicode 的支持是一个持续进行的过程,这就意味着,新问题将不断出现,也将被不断地加以解决。
    注:

    若您的字段名称或字段值需要支持 Unicode,则强烈建议您使用地理数据库,而非 shapefile。

  • 数据字段既支持日期也支持时间,但在同一字段中不能同时支持两者。
  • 字段名称的长度不能超过 10 个字符。
  • 属性的最大记录长度为 4000 字节。记录长度是用于定义全部字段的字节数,而非用于存储实际值的字节数。
  • 最大字段数为 255。若超出此上限,当转换为 shapefile 时只会转换前 255 个字段。
  • dBASE 文件必须至少包含一个字段。当您创建新 shapefile 或新 dBASE 表时,默认会创建一个整数 ID 字段。
  • dBASE 文件不支持类型 blob、guid、全局 ID、坐标 ID 或栅格字段类型。
  • dBASE 文件不支持 WHERE 子句,也不支持 SQL。
  • 当您保存所做编辑时属性索引会被删除,因此必须重新创建属性索引。

空值表示

shapefile 不支持空值。如果将含有空值的要素类转换为 shapefile 或将数据库表转换为 dBASE 文件,则将按下表所述更改空值。

警告:

当将 shapefile 或 dBASE (.dbf) 文件用作工具的输入时,ArcGIS 无法确定字段值表示空值还是合法值。

包含空值的数据类型

空值替换

数字 - 当工具需要输出“空”、无穷大或 NaN(数字)时

-1.7976931348623158e+308(最大负值的 IEEE 标准)

数字(所有其他地理处理工具)

0

文本

“ ”(空白 - 无空格)

Date

存储为零,但显示为“<空>”

shapefile 和 dBASE (.dbf) 文件中的空值替换

不支持的功能

Shapefile 在工作空间或要素类级别无扩展数据类型,因此,从地理数据库要素类或其他格式转换为 shapefile 时会导致下列数据丢失:

  • 子类型
  • 属性域
  • 几何网络
  • 拓扑
  • 注记

Shapefile 和地理处理

可通过任何能够输出要素类的地理处理工具来选择 shapefile 或地理数据库要素类作为输出格式。同样,可通过表输出工具来选择 dBASE 文件 (.dbf) 或地理数据库表作为输出。您应始终了解所使用的格式,以及将地理数据库输入转换为 shapefile 输出的后果。

地理处理工具可自动生成输出要素类或表。自动生成的输出基于使用当前及临时工作空间环境中所述的许多因素。若您的临时工作空间环境未设置为某个地理数据库,而是设置为了某个系统文件夹,则自动生成的输出要素类将为 shapefile 或 dBASE 文件,如下图所示。

建议您将临时工作空间设置为某个文件地理数据库,以便自动生成的输出不会被写入 shapefile 或 .dbf 表中,而是被写入文件地理数据库中。

了解有关地理处理环境的详细信息

由于 shapefile 写入速度快,可加快模型执行速度,因此,通常将它作为模型的中间数据使用。不过,写入文件地理数据库与写入 shapefile 的速度几乎相同,所以除非对执行速度的要求较高,否则应始终使用文件地理数据库写入中间数据及输出数据。若您一定要使用 shapefile,请注意上述限制,且仅将 shapefile 用于简单要素和属性。将 shapefile 用于中间数据的替代方法是将要素写入 in_memory 工作空间。

了解有关 in_memory 工作空间的详细信息

空间参考和 shapefile

主题空间参考和地理处理阐述了使用地理处理工具时空间参考属性的重要性。提供了很多地理处理环境,用于控制工具所使用的空间参考。当工具的输出为 shapefile 时,“不”支持以下环境设置:

shapefile 输出的地理处理注意事项(转载)的更多相关文章

  1. shapefile 输出的地理处理注意事项

    多年来,ESRI 为存储地理信息开发了三种主要数据格式 - coverage 格式.shapefile 格式及地理数据库格式.其中,所开发的 Shapefile 为存储地理及属性信息提供了一种简单的非 ...

  2. STM32F103ZET6 用定时器级联方式输出特定数目的PWM(转载)

    STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5.TIM8,共6个.这里需要使用定时器的级联功能,ST的RM0008 REV12的P388和P399页上有说明对于特定的定 ...

  3. RBStoryboardLink库的使用注意事项 -转载至--坤哥MartinLi博客

    RBStoryboardLink库的使用注意事项 demo下载:https://github.com/MartinLi841538513/RBStoryboardLinkDemo 操作步骤: 1,引入 ...

  4. 64位平台C/C++开发注意事项(转载)

    转自http://coolshell.cn/articles/3512.html 在http://www.viva64.com/en/l/上例出了28个在64位平台上使用C/C++开发的注意事项,对于 ...

  5. Content-Disposition的使用和注意事项(转载)

    Content-Disposition的使用和注意事项 最近不少Web技术圈内的朋友在讨论协议方面的事情,有的说web开发者应该熟悉web相 关的协议,有的则说不用很了解.个人认为这要分层次来看待这个 ...

  6. JS 输出对象的属性以及方法[转载]

    <script>var obj  = {attribute:1,method:function() {alert("我是函数");}}for (var i in obj ...

  7. bash 脚本编程七 将命令输出保存到变量中(转载)

    转自:http://blog.csdn.net/csfreebird/article/details/7978699 `符号包含的命令执行完后,可以讲其输出结果保存到变量中 #!/bin/bash v ...

  8. Qt在控制台输出中文的解决办法(转载)

    转载网址:https://blog.csdn.net/qq_22512533/article/details/75408984 按下快捷键Win+R,输入regedit打开注册变编辑器,依次找到 HK ...

  9. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

随机推荐

  1. 物理STANDBY库创建还原点(打开为read write后再变回主库)

    开启STANDBY库为READ WRITE 1.取消主库传送归档 SQL> alter system set log_archive_dest_state_2=defer; 2.取消备库应用日志 ...

  2. 【Not BUG】微软Winform窗体中设计上的Bug,会导致程序编译失败?不,这不是BUG!

    这不是BUG!!! 原文地址: https://www.cnblogs.com/thanks/p/14302011.html 现在让我们回忆一下原文 原文的操作步骤: 1. 新建一个Window Fo ...

  3. Kubernetes 开船记-脚踏两只船:用 master 服务器镜像克隆出新集群

    自从2020年2月23日 园子全站登船 之后,我们一边感叹"不上船不知道,一上船吓一跳" -- kubernetes 比 docker swarm 强大太多,一边有一个杞人忧天的担 ...

  4. Nginx报504 gateway timeout错误的解决方法(小丑搞笑版。。。)

    一.今天登录我的网站,突然发现报了下面的一个错误: 我的第一反应是:超时了应该是Nginx代理没有设置超时时间,默认的超时时间估计太小了,然后就按照正常的方式用Xshell连接服务器,应该是网络或者是 ...

  5. 夯实基础系列一:Java 基础总结

    前言 大学期间接触 Java 的时间也不短了,不论学习还是实习,都让我发觉基础的重要性.互联网发展太快了,各种框架各种技术更新迭代的速度非常快,可能你刚好掌握了一门技术的应用,它却已经走在淘汰的边缘了 ...

  6. mybatis缓存源码分析之浅谈缓存设计

    本文是关于mybatis缓存模块设计的读后感,关于缓存的思考,关于mybatis的缓存源码详细分析在另一篇文章:https://www.cnblogs.com/gmt-hao/p/12448896.h ...

  7. ovs-vsctl命令

    ovs-vsctl [options] -- [options] command [args] [-- [options] command [args]]... 通过连接到 ovsdb-server ...

  8. C#高级编程第11版 - 第八章 索引

    [1]8.1 引用方法 1.委托是指向方法的.NET地址变量. 2.委托是类型安全的类,定义了返回类型和参数类型.委托类不单单只包含一个方法引用,它也可以保存多个方法的引用. 3.Lambda表达式直 ...

  9. 微服务中台落地 中台误区 当中台遇上DDD,我们该如何设计微服务

    小结: 1. 微服务中台不是 /1堆砌技术组件就是中台 /2拥有服务治理就是中台 /3增加部分业务功能就是中台 /4Cloud Native 就是中台 https://mp.weixin.qq.com ...

  10. 小米开源监控系统Open-Falcon安装使用笔记

    小米开源监控系统Open-Falcon安装使用笔记-BB保你大-51CTO博客 https://blog.51cto.com/chenguomin/1865550