首页 > 其他分享 >GIS基础之矢量数据

GIS基础之矢量数据

时间:2023-10-11 15:31:43浏览次数:30  
标签:shp 文件 GIS 记录 矢量 GeoJSON 数据

矢量数据基本概念

计算机中以矢量结构存贮的内部数据,是跟踪式数字化仪的直接产物。

矢量数据类型,分为点、线和面三种。

  • 点(Points)

点数据可直接用坐标值描述,每个点是由单独的X,Y坐标定义的,在一个点矢量文件中可以包含多个点。点数据可以包含:采样点、独立树、测量点等等。

GIS基础之矢量数据_模型格式转换

  • 线(Lines)

线数据可用均匀或不均匀间隔的顺序坐标链来描述,线是一系列(至少2个)相连的折点或点的集合。道路、溪流都可以以线的形式表现。线包含一系列的线段或弧,每段线都是由折点的X,Y坐标所定义的。

GIS基础之矢量数据_模型格式转换_02

  • 面(Polygons)

面状数据(或多边形数据)可用边界线来描述,面是由3个或以上的折点组成的连续封闭图形。建筑物、湖泊、海洋、国家等等都可以以面来表示。

GIS基础之矢量数据_GIS_03

矢量数据的组织形式较为复杂,以弧段为基本逻辑单元,而每一弧段以两个或两个以上相交结点所限制,并为两个相邻多边形属性所描述。

在计算机中,使用矢量数据的主要优点是:存储量小,数据项之间拓扑关系可从点坐标链中提取某些特征而获得;而主要缺点是:数据编辑、更新和处理软件较复杂。

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数据的最小组成单位是特征,每个特征都包含一个几何对象和其他属性,多个特征可以组成一个特征集合,以表示一系列特征。

GIS基础之矢量数据_矢量数据_04

矢量数据创建与转换

矢量数据创建

在ArcGIS中可以进行矢量数据的创建。

在ArcGIS中矢量数据的处理,建议在文件地理数据库(File Geodatabase)中进行。地理数据库可以存储点、线、面、多面体等,同时支持拓扑,可以对绘制完成的矢量数据进行拓扑检查。

GIS基础之矢量数据_矢量图_05

矢量数据转换

在测绘、建筑、规划等方面,CAD和GIS的转换工作非常常用。简单的CAD转换可以直接通过ArcGIS加载数据然后到处为地理数据库要素类实现。

也可以采用一些在线工具进行矢量数据的浏览和转换。使用NSDT 3Dconvert在线工具,支持矢量数据(shp、GeoJSON等)在线打开与查看,支持将矢量数据(shp、GeoJSON等)在线转换为glb、gltf、obj、stl、dae、ply、off等格式。

GIS基础之矢量数据_GIS_06

矢量数据特点

  • 用离散的线或点来描述地理现象及特征

点用来描述地图上的各种标志点,如监控点、居民点;线包括直线和曲线,曲线又包括一般曲线和封闭曲线,分别用来表示河流、道路及行政边界等,此外还包括一些特殊曲线,如等高线;面用来描述一块连续的区域,如湖泊、林地、居民地等 。

  • 用拓扑关系来描述矢量数据之间的关系

在矢量数据系统中,常用几何信息描述空间几何位置,用拓扑信息来描述空间的相连、相邻及包含等关系,从而清楚地表达空间地物之间结构。

  • 面向目标的操作

对矢量数据的操作,更多地面向目标,从而使精度高、数据冗余度小、运算量少,如对区域面积的计算和道路长度的量算,分别用计算区域多边形面积及道路长度而获得。这样直接根据目标几何形状用坐标值计算的方法,使计算精度大大提高。另外,由于矢量数据是以点坐标为基础来记录数据,不仅便于对图形放大、缩小,而且还便于将数据从一个投影系统转换到另一个投影系统。

  • 数据结构复杂且难以同遥感数据结合

矢量数据系统不仅难以同DEM模型数据相结合,而且也难以同遥感数据相结合,从而限制了矢量数据系统的功能和效率。在目前基于矢量数据结构的地理信息系统中,为解决同遥感结合的问题,往往是将矢量数据转换成栅格数据,再进行分析,然后,根据需要再转换回去。这是矢量数据结构在地理信息应用中的最大不足。

  • 难以处理位置关系(如求交、包含等)

在矢量数据结构中,给出的是地物取样点坐标,判断地物的空间位置关系时,往往需要进行大量求交运算。例如,当已知某一土壤类型图和某一积温图,要叠置获取新分类图时,需进行多边形求交运算,组成新多边形,建立新的拓扑关系。因此,矢量数据结构解决这类问题是相当复杂的。

GIS基础之矢量数据_矢量图_07

矢量数据应用

  • 矢量图

计算机中显示的数字图像可以分为两大类——矢量图和位图。矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。 矢量图形最大的优点是无论放大、缩小或旋转等不会失真。

  • 矢量图像

也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。既然每个对象都是一个自成一体的实体,就可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分辨率无关。这意味着它们可以按最高分辨率显示到输出设备上。

GIS基础之矢量数据_矢量数据_08

标签:shp,文件,GIS,记录,矢量,GeoJSON,数据
From: https://blog.51cto.com/u_16186343/7811421

相关文章

  • luffy前端配置,跨域问题,后端数据库迁移, 后台主页功能,后台管理
    1luffy前端配置......
  • 第二章:变量和简单的数据类型
    点击查看代码message='"Hellwworld"'#大小写转化print(message.title())print(message.lower())print(message.upper())first_name="ruo"second_name="ye"#f字符串,f是format的简写full_name=f"{first_name}{second_name}"......
  • 关于vant移动端的样式使用hbuilderX打包成app时数据请求失败的问题
    项目使用的是vant4,在使用hbuilderX打包时,发现请求后端失败,然后在网上查了一下说是因为在apk中不存在跨域的问题,所以不需要进行代理设置那就取消代理试试吧(注:我这里使用的是cli3):api.js中写入exportconstlogin=(data)=>{//登录  returnaxiosPost('http://xxx.xxx.......
  • 达梦空间数据学习(二)
    示例演示--点(POINT)droptableifexistsdmpoint;createtabledmpoint(namevarchar(100),geomST_Point);insertintodmpointVALUES('p1',dmgeo2.ST_PointFromText('point(11)',4326));insertintodmpointVALUES('p2',dmgeo2.ST_Po......
  • 构建高性能的爬虫系统:使用HTTP代理加速数据采集
    在构建一个高性能的爬虫系统时,使用HTTP代理可以显著加速数据采集过程,提高系统的效率和稳定性。今天就给大家介绍一下如何利用HTTP代理来加速数据采集,以及如何选择合适的代理服务器,帮助您构建一个高性能的爬虫系统,快速获取所需的数据。一、了解HTTP代理的作用HTTP代理是一个位于客户......
  • C++ - 数据类型
    2数据类型C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存2.1整型作用:整型变量表示的是==整数类型==的数据C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:数据类型占用空间取值范围short(短整型)2字节(-2^......
  • 连接数据库遇到过的问题
    java.sql.SQLException:Nosuitabledriverfoundforjdbc:mysql://localhost:3306/db2直接运行jdbc的代码能加载驱动,但是在servlet中调用就会出现以上错误。最后将mysql5.1.34版本的jar包直接放到tomcat的lib文件夹中,把之前导入maven的jar包删掉解决第二个问题:数据库不能录......
  • 查询数据库慢排查、获取当前数据库连接数,sql执行很快但是日志记录接口确很慢
    获取当前数据库连接数@ResourceprivateDruidDataSourcedruidDataSource;intactiveCount=druidDataSource.getActiveCount();intactivePeak=druidDataSource.getActivePeak();LOG.info("当前连接数:{},最高峰值连接数:{}",activeCount,activePe......
  • 【虹科干货】Redis Enterprise 自动分层技术:大数据集高性能解决方案
    越来越多的应用程序依赖于庞大的数据集合,而这些应用程序必须快速响应。借助自动分层,RedisEnterprise7.2帮助开发人员轻松创建超快的应用程序。何乐而不为?Redis将数据存储在内存中,因此应用程序能以最快的速度检索和处理数据。然而,随着应用程序需要处理的数据越多,存储数据集所需的......
  • NAS之间docker无损数据怎么迁移,无需代码操作,简简单单。
    情况:你一定遇到过这么一个棘手的问题,在群晖上自己配置或者是请人配置的docker应用,想换群晖或者转移应用一定想知道怎么样才能无损迁移docker应用。我也比较爱折腾,docker通常也设置好了。一但换了机器docker迁移就很麻烦,文档资料倒是可以复制过去就行,docker不能直接复制,复制后会......