1. 什么是GIS(知识地图定位)
1.1. GIS概念
地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
位置与地理信息既是LBS的核心,也是LBS的基础。一个单纯的经纬度坐标只有置于特定的地理信息中,代表为某个地点、标志、方位后,才会被用户认识和理解。用户在通过相关技术获取到位置信息之后,还需要了解所处的地理环境,查询和分析环境信息,从而为用户活动提供信息支持与服务。
地理信息系统(GIS,Geographic Information System)是一门综合性学科,结合地理学与地图学以及遥感和计算机科学,已经广泛的应用在不同的领域,是用于输入、存储、查询、分析和显示地理数据的计算机系统,随着GIS的发展,也有称GIS为“地理信息科学”(Geographic Information Science),近年来,也有称GIS为”地理信息服务”
1.1. 传统GIS平台
1.1.1. ArcGIS和ESRI
ArcGis是“计算机制图”应用,包含了全球范围内的底图、地图数据、应用程序,以及可配置的应用模板和开发人员使用的 GIS 工具和 API,可用于创建 Web 地图、发布GIS服务、共享地图、数据和应用程序,以及管理组织的内容和多个用户。
1.1.1.1. ESRI公司
美国环境系统研究所公司(Environmental Systems Research Institute, Inc. 简称ESRI公司)成立于1969年,总部设在美国加州RedLands市,是世界最大的地理信息系统(Geographic Information System GIS)技术提供商。
- 技术人员可以关注ESRI的github:https://github.com/Esri
1.1.1.2. 评价
从某种意义上ArcGIS就是GIS
- 最全名最工业实现标准最多的商业GIS软件
- ArcGIS Desktop
- ArcGIS Server
- ArcGIS Engine
- City Engine
- …
- 最大的原罪就是他是美国的
1.1.2. SuperMap GIS和超图
SuperMap GIS 是超图软件研发的面向各行业应用开发、二三维制图与可视化、决策分析的大 型 GIS 基础软件系列,包含云 GIS 服务器、边缘 GIS 服务器、端 GIS 以及在线 GIS 平台等多种软 件产品。
1.1.2.1. 超图
北京超图软件股份有限公司是全球第三大、亚洲最大的地理信息系统(GIS)软件厂商,主要从事地理信息系统相关软件技术研发与应用服务。
1.1.2.2. 评价
- 国内最完善的GIS平台,可以平替ArcGIS
- 与ArcGIS在细节上有着差距
1.1.3. QGIS
Quantum GIS(QGIS)是相当友善的开源地理信息系统,使用GNU(General Public License)授权,属于 Open Source eospatial Foundation(OSGeo)的官方计划。在 GNU 这个授权下,开发者可以自行检阅与调整程序代码,并保障让所有使用者可以免费且自由地修改程序。
QGIS 的目标是成为一个使用简单的 GIS,提供了常见的功能与图征。借着核心图征提供基本功能与附加组件(Python 或 C++)持续地扩充,让使用者可以浏览、管理、编辑、分析数据以及制图。
QGIS 是一群自愿者所开发的项目,欢迎全球使用者或开发者将程序代码的缺陷、修复、报告以及提供文件等贡献。它是由热心的使用者和开发社群所维护的。它提供了交互式的邮件列表,以及透过网络管道传达给其他用户与开发人员帮忙与建议。另外,它也提供商业定制化开发。
- github地址:https://github.com/qgis/QGIS
1.2. 数据类型
在数据存储中,存储GIS(地理信息系统)数据的存储介质有
- Shapefile,简称
shp文件
- MDB
- GDB
- ArcSDE
- ArcSDE for Oracle
- ArcSDE for SqlServer
- ArcSDE for Postgresql
- Oracle Spatial
- Postgresql 的 PostGIS
一般而言,本地文件使用shp文件
,对于共享服务器存储时使用ArcSDE、PostGIS。在PostGIS出来之前,大家都是使用Oracle Spatial。
而在存储介质中对于空间数据类型划分为:
- 基本空间数据类型
- 点、多点
- 线、多线
- 面、多面
- 栅格数据
1.2.1. 基本空间数据类型
POINT(0 0)LINESTRING(0 0,1 1,1 2)POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))MULTIPOINT((0 0),(1 2))MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))
WKT、WKB和GeoJson表达点线面
1.2.2. 栅格数据类型
1.2.2.1. 栅格数据类型
- .tiff
- ERDAS IMAGINE (.img)
- 卫星影像
- DEM和DOM
1.3. 空间参考
1.3.1. 空间参考使用历史转变
新中国按时间顺序使用的空间参考为:
- 北京54
- 西安80
- CGCS2000
具体可以参见北京54、西安80和CGCS2000
一言以蔽之,新中国由于政策和科学技术的原因使用了北京54;西安80是将大地原点设在中国中部陕西省泾阳县永乐镇
的空间参考,同时在这个时候确定了1985国家高程基准
;而走入新世纪,为了满足科研、航空、航天、航海以及国防建设我们采用了CGCS2000空间参考。
1.3.2. 常用空间参考
- WGS84坐标系:即地球坐标系,国际上通用的坐标系。
- GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。高德地图
- BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。百度独有
- Web墨卡托坐标系
1.3.3. 空间参考中名词拾遗(坐标系统、空间参考、投影、基准面、椭圆体)
具体可以参见:空间参考中名词拾遗(坐标系统、空间参考、投影、基准面、椭圆体)
1.3.3. 为什么要进行投影
在上述表达中我们基本上描述的均为经纬度的,也就是地理坐标系
,地图单位通常为度
,投影坐标系 (Projected Coordinate System)平面坐标系统地图单位通常为米
,也称非地球投影坐标系统(notearth),或者是平面坐标。
- 地球是三维的
- 地图(屏幕)是二维的
- 地理坐标系统是在三维(基准面)上的定位方法
- 投影使得三维转成二维
- 三维转成二维会产生变形
- 一般而言,使用相同椭球体的投影坐标系统和经纬度坐标系统是可以相互转换的,而对于两种椭球体的坐标系统需要建立坐标转换进行数学基础的转换,具体表现为,一4参,7参,二节点坐标的变化。
在一些特殊的城市,在使用投影坐标系统是往往有地方坐标系统,比如北京,原因是因为跨带
2. Postgresql中的PostGIS
2.1. 什么是PostGIS
PostGIS is a spatial database extender for PostgreSQL object-relational database. It adds support for geographic objects allowing location queries to be run in SQL.
PostGIS是PostgreSQL对象关系数据库的空间数据库扩展器。它增加了对地理对象的支持,允许在SQL中运行位置查询。
PostGIS是在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力的开源空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
它是PostgreSQL的扩展插件,在PostgreSQL的core(存储、检索、事务等)层之上实现GIS层的功能,它不能独立于PostgreSQL运行。
2.2. Postgis解决什么问题,为什么选择PostGIS
Postgresql本身是最先进的开源RDBMS(没有之一),是最稳定成熟的RDBMS之一(流行度和社区成熟度比不上MySQL)
PostGIS是最成熟,功能最丰富的免费GIS数据库(没有之一),只有收费的Oracle和SQL Server(他们都有GIS版)才能与之媲美,MySQL的GIS功能通常不能拿来和它比
PostGIS本质上还是数据库,使用SQL操作,可以满足你更新频繁、和其它筛选条件联合使用的要求
结合postgresql FTS扩展(Full Text Search),不仅可以根据性别、年龄、LBS信息搜索,更可以和模糊关键词搜索联合起来
Postgresql也可以做集群、复制、高可用
2.3. Postgis与ArcSDE的关系
2.3.1. Postgis与ArcSDE的关系” />
ArcSDE是ESRI提供的一项技术,可以访问和管理存储在关系型数据库中的空间数据。
2.3.1.1. 两者的相同点
- 都可以作为空间数据库的实现;
- 都遵循OGC SFSQL以及ISO SQL/MM两个规范;
2.3.1.2. 两者的不同点
- ArcSDE可作为不同关系型数据库的空间数据引擎(SDE即spatial data engine),Postgis不可以;
- ArcSDE可在不同关系型数据库中实现空间数据库,Postgis只能在PostgreSQL上实现空间数据库。
2.4. Postgis包含了哪些内容?遵循什么规范?
Postgis在PostgreSQL基础上,实现了空间数据类型、空间索引和空间函数。它所实现的这些内容,遵循了两个规范:OGC SFSQL以及ISO SQL/MM。
2.4.1. OGC SFSQL规范
OGC:它是一个国际标准组织,成立于1994年,是一个由GIS厂商、计算机厂商、数据库厂商、美国联邦机构、标准组织以及学术界等部门代表组成的公益性行业协会。致力于实现地理空间数据与地理信息处理资源的全面集成,通过信息基础设施,广泛使用商业化的、可互操作的地理信息处理软件。
2.4.2. SQL/MM标准
SQL/MM是ISO(International Standard Organization,国际标准化组织)提出的标准,SQL/MM第三部分空间定义了矢量数据存储与检索的相关标准,解释了基于这些数据类型如何使用存储、获取和处理空间数据。
SQL-MM Part3定义大量插值曲线类型来扩展SQL规范定义的简单要素类型。
2.4.3. PostGIS的扩展
- 扩展EWKT、EWKB
从本质上来说,方便数据的统一管理,为每一个存储在数据表中的图形加了一个srid(为每一个图形增加了空间参考),而在同一个数据表(表模式)下空间参考是一致的,为后续的数据存储、数据分析特别是空间参考定义一致的数学基础。
- 扩展GIS函数
方便postgis的一些新特性的展现,以及新算法和技术的实现。
3. PostGIS的基本使用
3.1. 使用扩展
CREATE EXTENSION postgis;
创建扩展之后在数据库函数中将会出现postgis类型,也就是可以在Postgresql中使用几何类型,并可以使用postgis的函数操作、分析几何图形。
3.2. 数据读取
根据前面的OGC标准我们可以使用WKT、WKB、GeoJson来进行数据的存储通信,即不同平台、数据库的交换标准,在PostGIS的体现为以下函数。
一般而言使用最多的无非
---------------读取wkt字符串为geometry---------------:ST_GeomFromText(ST_GeometryFromText)---------------将geometry转化为不同数据标准格式---------------:---转换为wktST_AsText---转换为geojsonST_AsGeoJSON
3.3. 操作符
- &&
A && B: 当二维A范围覆盖二维B范围时,返回真。
- &&&
A &&& B: 当三维A范围覆盖三维B范围时,返回真。
- &<
A&<B : A范围覆盖B范围或A范围在B范围左侧时,返回真。
- &<|
A&<|B :当A范围覆盖B范围或A范围在B范围下方,返回真。
- =
A=B : A范围=B范围时,返回真。
- ~
A~B :A范围包含B范围时,返回真。
AB : 返回两点之间的距离。为了点或点检查它使用浮点精度(相对于双精度的基础几何点)。对于其他几何类型之间的距离返回浮点边界框。用于做距离排序和最近邻法。
AB :返回2个几何图形边界框之间的距离。对于点/点检查它的几乎一样的距离(虽然可能不一样,因为这个边界框是浮点精度和几何图形是双精度)。用于做最短距离和查找邻接边距离等。
3.4. 基于9交(DE-9IM)模型的空间关系
空间关系 | 中文名称 | OGC标准 | 解释 |
---|---|---|---|
Contains | 包含 | 是 | 一个几何图形的内部完全包含了另一个几何图形的内部和边界。 |
CoveredBy | 覆盖 | 否 | 一个几何图形被另一个几何图形所包含,并且它们的边界相交。Point和MultiPoint不支持此空间关系,因为它们没有边界。 |
Crosses | 交叉 | 是 | 一个几何图形的内部和另一个几何图形的边界和内部相交,但是它们的边界不相交。 |
Disjoint | 分离 | 是 | 两个几何图形的边界和内部不相交。 |
EnvelopeIntersects | 外包矩形相交 | 否 | 两个几何图形的外接矩形相交。 |
Equal | 相等 | 是 | 两个几何图形具有相同的边界和内部。 |
Inside | 内部 | 否 | 一个几何图形在另一个几何图形的内部,但是和它的边界不接触。 |
Intersects | 相交 | 是 | 两个几何图形没有分离(Non-DisJoint)。 |
Overlaps | 重叠 | 是 | 两个几何图形的边界和内部相交(Intersect)。 |
Touch | 接触 | 是 | 两个几何图形的边界相交,但是内部不相交。 |
Within | 包含于 | 是 | 一个几何图形的内部和边界完全在另一个几何图形的内部。 |
https://qlygmwcx.blog.csdn.net/article/details/122762041″ />
3.4.1. 翻译资源
总体资源
- PostGIS的Spatial Relationships and Measurements-空间关系与测量
- PostGIS的Spatial Relationships and Measurements 空间关系与测量:2
- PostGIS的Spatial Relationships and Measurements 空间关系与测量:3
- PostGIS的Spatial Relationships and Measurements 空间关系与测量:4
- PostGIS的Spatial Relationships and Measurements 空间关系与测量:5
- PostGIS的Geometry Processing 几何处理_1 ST_Buffer&&ST_BuildArea
- [PostGIS的Geometry Processing 几何处理2(ST_ClipByBox2D、ST_Collect、ST_ConcaveHull、ST_ConvexHull)](PostGIS的Geometry Processing 几何处理2(ST_ClipByBox2D、ST_Collect、ST_ConcaveHull、ST_ConvexHull))
- Geometry Processing 几何处理 3 ST_CurveToLine、ST_DelaunayTriangles
- Geometry Processing 几何处理 4 ST_Difference、ST_Dump、ST_DumpPoints、ST_DumpRings
3.5. 空间关系索引
GiST 的意思是通用的搜索树(Generalized Search Tree)。 它是一种平衡的,树状结构的访问方法,在系统中起一个基础模版的作用,可以使用它实现任意索引模式。B+/-trees,R-trees 和许多其它的索引模式都可以用 GiST实现。
CREATE INDEX idx_my_table_geom ON my_table USING gist(geom gist_geometry_ops);
- 从数据库库索引说到空间数据索引
- 为什么要使用空间索引
- 空间数据:格网索引
- 空间数据结构(四叉树、八叉树、BVH树、BSP树、k-d树)
- 高效的多维空间点索引算法 — Geohash 和 Google S2
- 矢量数据空间索引之R树索引
- GIST索引
3.6. 样例说明
geotools导入PostGIS同时使用ArcGIS加载,查看空间数据
Java导入shapefile到postgis,提升geotools导入效率
使用PostGIS求两个要素类的相交部分
PostGIS实现(大数据量,大图斑)图层间相交工具
使用PostGIS对数据做拓扑抽稀