GIS基础之矢量数据 arcgis矢量数据是什么
bigegpt 2024-10-09 08:09 48 浏览
矢量数据基本概念
计算机中以矢量结构存贮的内部数据,是跟踪式数字化仪的直接产物。
矢量数据类型,分为点、线和面三种。
- 点(Points)
点数据可直接用坐标值描述,每个点是由单独的X,Y坐标定义的,在一个点矢量文件中可以包含多个点。点数据可以包含:采样点、独立树、测量点等等。
- 线(Lines)
线数据可用均匀或不均匀间隔的顺序坐标链来描述,线是一系列(至少2个)相连的折点或点的集合。道路、溪流都可以以线的形式表现。线包含一系列的线段或弧,每段线都是由折点的X,Y坐标所定义的。
- 面(Polygons)
面状数据(或多边形数据)可用边界线来描述,面是由3个或以上的折点组成的连续封闭图形。建筑物、湖泊、海洋、国家等等都可以以面来表示。
矢量数据的组织形式较为复杂,以弧段为基本逻辑单元,而每一弧段以两个或两个以上相交结点所限制,并为两个相邻多边形属性所描述。
在计算机中,使用矢量数据的主要优点是:存储量小,数据项之间拓扑关系可从点坐标链中提取某些特征而获得;而主要缺点是:数据编辑、更新和处理软件较复杂。
GIS常用矢量数据格式
Esri Shapefile(shp)
Shapefile是最常见的矢量数据格式,所有的商业和开源GIS软件都支持。无处不在的它已成为行业标准。Shapefile由三个必须的文件(.shp、.shx、.dbf)以及若干可选文件(.prj、.xml、.sbn、.sbx、.cpg)组成。
- .shp(shape)文件
.shp文件存储矢量地图数据,记录了每个要素的空间位置信息,.shp由头文件和实体信息两部分构成。
头文件是一个长度固定(100 bytes)的记录段,一共有9个int型和7个double型数据。
实体信息负责记录坐标信息,它以记录段为基本单位,每一个记录段记录一个地理实体目标的坐标信息每个记录段分为记录头和记录内容两部分。
记录头的内容包括记录号(Record Number) 和坐标记录长度(Content Length)两个记录项。它们的位序都是big。记录号(Record Number) 和坐标记录长度(Content Length) 两个记录项都是int型,并且shapefile文件中的记录号都是从1开始的。记录内容包括目标的几何类型(ShapeType) 和具体的坐标记录(X、Y),记录内容因要素几何类型的不同其具体的内容及格式都有所不同。下面分别介绍点状目标(Point) 、线状目标(PoLine)和面状目标(Polygon)。
- .shx(shape index)文件
.shx文件是索引文件,用于存储.shp文件中要素的位置,加快数据访问速度。
shapefile的文件索引包含与.shp文件相同的100个字节的文件头,然后跟随着不定数目的8字节定长记录,每个记录都有两个字段。因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程序就可以很快地向前或向后遍历整个shapefile,在.shp文件中找到任意一个几何体的正确位置。
- .dbf(dBase)文件
.dbf文件存储矢量数据的属性信息,例如地图上每个点的名称、类型等信息。
每个图形的属性数据存储在dBase格式的数据表之中。属性数据也可以存储在另一种开放的数据表格式xBase格式之中。
- .prj文件
.prj是投影系统参数。
- .xml文件
.xml是关联的元数据。
- .sbn文件
.sbn是用于优化查询的空间索引。
- .sbx文件
.sbx优化了加载时间。
- .cpg文件
.cpg说明了shp文件的属性数据编码,如果中文显示乱码,一般需要加一个.cpg文件,使用文本文件编辑,写上UTF-8。
Geographic Java Object Notation (GeoJSON)
GeoJSON格式主要用于基于Web的映射。
GeoJSON以Java对象符号(JSON)形式将坐标存储为文本。这包括矢量点,线和多边形以及表格信息。GeoJSON将对象存储在花括号{}中,并且通常语法标记更为简洁(与GML相比)。
GeoJSON具有简单的语法,您可以在任何文本编辑器中进行修改。网络地图浏览器可以理解Java,因此默认情况下,GeoJSON是一种常见的Web格式。但是Java只理解二进制对象。幸运的是,Java可以将JSON转换为二进制。
GeoJSON数据主要由以下几部分组成:
- 特征
特征是一种几何对象和其他属性的组合体。
- 几何对象
几何对象是点、线、面、多点、多线、多面和几何集合等类型的集合。
- 特征集合
特征集合表示一系列特征。
GeoJSON数据的最小组成单位是特征,每个特征都包含一个几何对象和其他属性,多个特征可以组成一个特征集合,以表示一系列特征。
矢量数据创建与转换
矢量数据创建
在ArcGIS中可以进行矢量数据的创建。
在ArcGIS中矢量数据的处理,建议在文件地理数据库(File Geodatabase)中进行。地理数据库可以存储点、线、面、多面体等,同时支持拓扑,可以对绘制完成的矢量数据进行拓扑检查。
矢量数据转换
在测绘、建筑、规划等方面,CAD和GIS的转换工作非常常用。简单的CAD转换可以直接通过ArcGIS加载数据然后到处为地理数据库要素类实现。
也可以采用一些在线工具进行矢量数据的浏览和转换。使用NSDT 3Dconvert在线工具(https://3dconvert.nsdt.cloud),支持矢量数据(shp、GeoJSON等)在线打开与查看,支持将矢量数据(shp、GeoJSON等)在线转换为glb、gltf、obj、stl、dae、ply、off等格式。
矢量数据特点
- 用离散的线或点来描述地理现象及特征
点用来描述地图上的各种标志点,如监控点、居民点;线包括直线和曲线,曲线又包括一般曲线和封闭曲线,分别用来表示河流、道路及行政边界等,此外还包括一些特殊曲线,如等高线;面用来描述一块连续的区域,如湖泊、林地、居民地等 。
- 用拓扑关系来描述矢量数据之间的关系
在矢量数据系统中,常用几何信息描述空间几何位置,用拓扑信息来描述空间的相连、相邻及包含等关系,从而清楚地表达空间地物之间结构。
- 面向目标的操作
对矢量数据的操作,更多地面向目标,从而使精度高、数据冗余度小、运算量少,如对区域面积的计算和道路长度的量算,分别用计算区域多边形面积及道路长度而获得。这样直接根据目标几何形状用坐标值计算的方法,使计算精度大大提高。另外,由于矢量数据是以点坐标为基础来记录数据,不仅便于对图形放大、缩小,而且还便于将数据从一个投影系统转换到另一个投影系统。
- 数据结构复杂且难以同遥感数据结合
矢量数据系统不仅难以同DEM模型数据相结合,而且也难以同遥感数据相结合,从而限制了矢量数据系统的功能和效率。在目前基于矢量数据结构的地理信息系统中,为解决同遥感结合的问题,往往是将矢量数据转换成栅格数据,再进行分析,然后,根据需要再转换回去。这是矢量数据结构在地理信息应用中的最大不足。
- 难以处理位置关系(如求交、包含等)
在矢量数据结构中,给出的是地物取样点坐标,判断地物的空间位置关系时,往往需要进行大量求交运算。例如,当已知某一土壤类型图和某一积温图,要叠置获取新分类图时,需进行多边形求交运算,组成新多边形,建立新的拓扑关系。因此,矢量数据结构解决这类问题是相当复杂的。
矢量数据应用
- 矢量图
计算机中显示的数字图像可以分为两大类——矢量图和位图。矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。 矢量图形最大的优点是无论放大、缩小或旋转等不会失真。
- 矢量图像
也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。既然每个对象都是一个自成一体的实体,就可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分辨率无关。这意味着它们可以按最高分辨率显示到输出设备上。
相关推荐
- 最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)
-
前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...
- Redis数据库从入门到精通(redis数据库设计)
-
目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...
- netcore 急速接入第三方登录,不看后悔
-
新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...
- 精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)
-
大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...
- Oracle 12c系列(一)|多租户容器数据库
-
作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...
- flutter系列之:UI layout简介(flutter-ui-nice)
-
简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...
- Flutter 分页功能表格控件(flutter 列表)
-
老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...
- Flutter | 使用BottomNavigationBar快速构建底部导航
-
平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...
- Android中的数据库和本地存储在Flutter中是怎样实现的
-
如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...
- Flet,一个Flutter应用的实用Python库!
-
▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...
- flutter系列之:做一个图像滤镜(flutter photo)
-
简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...
- flutter软件开发笔记20-flutter web开发
-
flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...
- Flutter实战-请求封装(五)之设置抓包Proxy
-
用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...
- 为什么不在 Flutter 中使用全局变量来管理状态
-
我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...
- Flutter 攻略(Dart基本数据类型,变量 整理 2)
-
代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...
- 一周热门
- 最近发表
-
- 最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)
- Redis数据库从入门到精通(redis数据库设计)
- netcore 急速接入第三方登录,不看后悔
- 精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)
- Oracle 12c系列(一)|多租户容器数据库
- flutter系列之:UI layout简介(flutter-ui-nice)
- Flutter 分页功能表格控件(flutter 列表)
- Flutter | 使用BottomNavigationBar快速构建底部导航
- Android中的数据库和本地存储在Flutter中是怎样实现的
- Flet,一个Flutter应用的实用Python库!
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)