shapefile 输出的地理处理注意事项
多年来,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 3 或 ArcInfo Workstation 使用时
- 当需要快速写入简单要素及属性(例如,为获得 ArcGIS Server 地理处理服务而这样做)时(不过,您必须注意下面所述的局限性。)
何时不能使用 shapefile?
除以下列出的一些特例外,可以使用 shapefile 来存储简单的要素几何。不过,shapefile 的属性存在严重问题。例如,它们无法存储空值,无法向上舍入数字,对 Unicode 字符串的支持不足,字段名称最长只能为 10 个字符,且在同一字段中无法同时存储日期和时间。这些只是其中的主要问题。此外,它们不支持在地理数据库中发现的功能,如:域和子类型。因此,除非是简单的属性且不需要使用地理数据库功能,否则不得使用 shapefile。
Shapefile 组件与文件扩展名
Shapefile 存储在三个或更多个具有相同前缀的文件中,且位于同一系统文件夹(shapefile 工作空间)中。当您使用 Windows Explorer 而非 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
日期
日期
8
dBASE 中的字段宽度
- dBASE 文件标准仅支持其字段名称及字段值中存在 ANSI 字符。ESRI 已针对 dBASE 文件新增了大量 Unicode 支持,以存储 Unicode 字段名称及字段值。但此附加支持仅适用于 ArcGIS,在非 ESRI 应用程序中则未提供这些支持。对于 ESRI 来说,对 dBASE 中 Unicode 的支持是一个持续进行的过程,这就意味着,新问题将不断出现,也将被不断地加以解决。
注意:
若您的字段名称或字段值需要支持 Unicode,则强烈建议您使用地理数据库,而非 shapefile。
- 数据字段既支持日期也支持时间,但在同一字段中不能同时支持两者。
- shapefile 不支持空值。如果将含有空值的要素类转换为 shapefile,则空值会变为下列形式:
|
包含空值的数据类型 |
Shapefile 制图表达 |
|---|---|
|
数字 - 当工具需要输出“空值”、无穷大值或 NaN(非数字)时 |
-1.7976931348623158e+308(最大负值的 IEEE 标准) |
|
数字(所有其他地理处理工具) |
0 |
|
文本 |
“ ”(空白 - 无空格) |
|
日期 |
存储为零,但显示为“<空>” |
空值的 Shapefile 制图表达
- 字段名称的长度不能超过 10 个字符。
- 属性的最大记录长度为 4000 字节。记录长度是用于定义全部字段的字节数,而非用于存储实际值的字节数。
- 最大字段数为 255。若超出此上限,转换为 shapefile 时会转换前 255 个字段。
- dBASE 文件必须至少包含一个字段。当您创建新 shapefile 或新 dBASE 表时,默认会创建一个整数 ID 字段。
- dBASE 文件不支持类型 blob、guid、全局 ID、坐标 ID 或栅格字段类型。
- dBASE 文件不支持 WHERE 子句,也不支持 SQL。
- 当您保存编辑时,属性索引会被删除,因此,必须重新创建属性索引。
不支持的功能
Shapefile 在工作空间或要素类级别无扩展数据类型,因此,从地理数据库要素类或其他格式转换为 shapefile 时会导致下列数据丢失:
- 子类型
- 属性域
- 几何网络
- 拓扑
- 注记
Shapefile 和地理处理
可通过任何能够输出要素类的地理处理工具来选择 shapefile 或地理数据库要素类作为输出格式。同样,可通过表输出工具来选择 dBASE 文件 (.dbf) 或地理数据库表作为输出。您应始终了解所使用的格式,以及将地理数据库输入转换为 shapefile 输出的后果。
地理处理工具可自动生成输出要素类或表。自动生成的输出基于使用当前及临时工作空间环境中所述的许多因素。若您的临时工作空间环境未设置为某个地理数据库,而是设置为了某个系统文件夹,则自动生成的输出要素类将为 shapefile 或 dBASE 文件,如下图所示。
建议您将临时工作空间设置为某个文件地理数据库,以便自动生成的输出不会被写入 shapefile 或 .dbf 表中,而是被写入文件地理数据库中。
由于 shapefile 些入速度快,可加快模型执行速度,因此,通常用它写入模型的中间数据。不过,写入文件地理数据库与写入 shapefile 的速度几乎相同,所以除非对执行速度的要求较高,否则应始终使用文件地理数据库写入中间数据及输出数据。若您一定要使用 shapefile,请注意上述限制,且仅将 shapefile 用于简单要素和属性。将 shapefile 用于中间数据的替代方法是将要素写入 in_memory 工作空间。
shapefile 输出的地理处理注意事项的更多相关文章
- shapefile 输出的地理处理注意事项(转载)
来源:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//005600000013000000 多年来,Esri 为存储地理信息 ...
- shapefile文件
基本信息编辑 ESRI公司的Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式. 内容编辑 一个Shapefile文件最少包括三个文件: 主文件(*.shp).-- ...
- mongodb的地理空间索引常见的问题
创建地理空间索引注意事项 创建地理空间索引失败,提示错误信息如下 > db.places.ensureIndex({"loc":"2dsphere"}){ ...
- ES6+ 现在就用系列(二):let 命令
系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...
- 【搬砖】安卓入门(3)- Java开发编程基础--循环控制语句
04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } 复制代码 B:循环结构for语句的 ...
- JavaEE基础(四)
1.Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do...while B:循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的 ...
- 【面试虐菜】—— LVS负载均衡
Load Balancer(负载均衡器): Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上.Load Balancer通过Ldirectord监测各Rea ...
- 使用ArcGIS API for Silverlight实现地形坡度在线分析
原文:使用ArcGIS API for Silverlight实现地形坡度在线分析 苦逼的研究生课程终于在今天结束了,也许从今以后再也不会坐在大学的课堂上正式的听老师讲课了,接下来的时间就得开始找工作 ...
- powerdesigner的使用
前言 做过建模和设计的人都知道,powerdesigner是个强大实用的工具:采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术.本文档 ...
随机推荐
- jstl的forEach 循环
jstl的forEach循环一般有两种格式 1.当需要操作循环的下标时,或者需要固定循环的次数时: <c:forEach begin="0" end="5" ...
- 关于操作git
手册:http://www.yiibai.com/git/ 一.安装git,可以通过git bash执行命令行:安装tortoiseGit执行git相关操作,在那之前需要了解下git命令行操作 二.在 ...
- docker-compose deploy replicaSet in standalone MongoDB cluster and with auth
经过两天的折腾,终于实现了自己想要的效果,就是通过docker-compose 部署最新的mongodb replicaSet, 主要是为了测试 4.2 最新的多文档事务,下面将整个步骤分享一下: d ...
- 10.自定义EL函数和自定义标签
需要在JSP页面中进行一些常见逻辑操作(如对字符串进行操作),首先考虑是否可以用到sun公司提供的EL函数库(fn.tld)和JSTL 核心标签库 如果sun公司的EL函数库没有或者无法满足,就需要自 ...
- JSONObject fromObject() 需要引入的包
1. maven项目 在pom.xml中添加以下依赖: <dependency> <groupId>net.sf.json-lib</groupId> <ar ...
- cursor:not-allowed
今天发现了一个鼠标样式:not-allowed,是一个红色圈加一个斜杠,表示禁止的意思,似乎IE ,chrome firefox 都可以正常显示,很好用
- mysql存储json
1. json_merge 合并Json并返回 update `user` set inviteeMap = json_merge(inviteeMap, '{"xx1":100} ...
- MAC 环境下搭建HttpRunnerManager平台
1 . mac pycharm 创建虚拟环境 https://blog.csdn.net/qq_39806105/article/details/96908584 2. mac 环境下搭建HttpRu ...
- free命令详解-1
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存以及被内核使用的buffer.我们本篇学习如何使用free命令监控系统的内存情况. 一般使用free –m方式查看内存占用情况( ...
- 干货 | 以太坊Mist负责人教你建立无服务器应用
作者:Alex Van de Sande译者:王建/蔡佳慧译者介绍: 王建:万云平台区块链技术专家,拥有多年应用系统架构经验,目前在区块链落地方面进行积极探索 蔡佳慧:万云平台实习生,区块链技术爱好者 ...