空间分析开源库GEOS
History of GEOS
GEOS中Geometry的结构
GEOS分析功能简介
1、History of GEOS
JTS Topology Suite是Martin Davis和Dr. Mark Sondheim提出并实施的OGC简单要素规范的Java项目。项目始于2000年秋季,JTS提供了全功能的,强大的,高效的空间操作。
在2003年PostGIS正在成为一个严谨实用的空间数据库,然而它缺少一套完整的空间功能。Paul Ramsey 和Martin Davis就计划把具体空间功能的JTS移植为C++版本,参与PostGIS的Dave Blasby提出命名为Geometry Engine (Open Source) – GEOS。
GEOS(几何引擎 - 开源)是一个C++版本的的JTS。正因为如此,它的目标是包含JTS的完整功能C++库。它包括所有OpenGIS Simple Features for SQL的空间谓词的功能和空间操作,以及增强特定JTS的拓扑功能。
2、GEOS中Geometry的结构
GEOS的空间数据结构是参考OGC的Simple Features Specification for SQL(SFS)。
图1.1 GEOS的空间数据结构

图1.1 GEOS的空间数据结构
GEOS的空间数据类型见下图。且数据类型全部是二维结构,例如Point中的变量仅有x,y,对于含有x,y,z的数据,也是先舍弃z,再进行赋值存储。
图1.2 GEOS的空间数据模型

图1.2 GEOS的空间数据模型
3、GEOS分析功能简介
GEOS一个重要的应用是计算几何图形(Geometry)之间的空间关系,它提供了多种多样的用于处理空间关系的办法。GEOS遵循OGC说明的维扩展九交集模型(the Dimensionally-Extended 9 Intersection Matrix model)。
GEOS提供了一套布尔数学体系(boolean)能够直接计算普通空间关系的空间谓词(predicates)。
表2.1 空间关系谓词
|
相等(Equals) |
几何形状拓扑上相等 |
|
脱节(Disjoint) |
几何形状没有共有的点 |
|
相交(Intersects) |
几何形状至少有一个共有点(区别于脱节) |
|
接触(Touches) |
几何形状有至少一个公共的边界点,但是没有内部点 |
|
交叉(Crosses) |
几何形状共享一些但不是所有的内部点 |
|
内含(Within) |
几何形状A的线都在几何形状B内部 |
|
包含(Contains) |
几何形状B的线都在几何形状A内部(区别于内含) |
|
重叠(Overlaps) |
几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域 |
GEOS支持基本空间分析方法。空间分析方法需要一个或两个几何图形作为参数并返回一个新的构造几何。对空间分析接口描述如下表:
表2.2 空间分析
|
缓冲区分析(Buffer) |
包含所有的点在一个指定距离内的多边形 |
|
凸包分析(ConvexHull) |
包含几何形体的所有点的最小凸包多边形(外包多边形) |
|
交叉分析(Intersection) |
交叉操作就是多边形AB中所有共同点的集合 |
|
联合分析(Union) |
AB的联合操作就是AB所有点的集合 |
|
差异分析(Difference) |
AB形状的差异分析就是A里有B里没有的所有点的集合 |
|
对称差异分析(SymDifference) |
AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合 |
|
距离(Distance) |
AB的距离分析是判断AB中点的最小距离 |
参考文献:
[1] http://tsusiatsoftware.net/jts/jts-history.html History of the JTS Topology Suite (and GEOS)
[2] JTS Topology Suite Developer’s Guide- Version 1.4
[3] OpenGIS Simple Features Specification For SQL- Revision 1.1
空间分析开源库GEOS的更多相关文章
- 各种Android UI开源框架 开源库
各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...
- JTS空间分析工具包(GIS开源)学习 JAVA
JST空间分析工具包是一套JAVA API,提供一系列的空间数据分析操作.最近开发项目刚好需要用到,上网搜资料也少,就自己写下来记录一下.C++版本的拓扑分析开源工具叫:geos:.NET版本的拓扑分 ...
- DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像
背景介绍: 近期项目需求,须要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发.在C++语言下,我使用的是应用最广泛的DCMTK开源库,在本专栏的起初阶段的大多数博文都是对DCMTK开源 ...
- MVP模式, 开源库mosby的使用及代码分析
Android中的构架模式一直是一个很hot的topic, 近年来Architecture components推出之后, MVVM异军突起, 风头正在逐渐盖过之前的MVP. 其实我觉得MVP还是有好 ...
- JavaScript 空间分析库——JSTS和Turf【转】
https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...
- DICOM:DICOM三大开源库对比分析之“数据加载”
背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,“只要Sante DICOM Editor打不开的数据,基 ...
- 捕获网络数据包并进行分析的开源库-WinPcap
什么是WinPcap WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets. 这是一种简单的 ...
- 【Java&Android开源库代码分析】のandroid-async-http の开盘
在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正 ...
- 【Java&Android开源库代码剖析】のAndroid-Universal-Image-Loader-part1
做Android app开发的同学应该都听说过或者用过nostra13的Android-Universal-Image-Loader开源库,它在图片异步加载.缓存和显示等方面提供了强大灵活的框架.之前 ...
随机推荐
- shiro原理及其运行流程介绍
shiro原理及其运行流程介绍 认证执行流程 1.通过ini配置文件创建securityManager 2.调用subject.login方法主体提交认证,提交的token 3.securityMan ...
- (五)Audio子系统之AudioRecord.stop
在上一篇文章<(四)Audio子系统之AudioRecord.read>中已经介绍了AudioRecord如何获取音频数据,接下来,继续分析AudioRecord方法中的stop的实现 函 ...
- golang (4) golang 操作mongdb
1. 数据按照时间聚合操作 1.1 正常的数据结构 { "_id" : ObjectId("5cac8d7b1202708adf5d4b64"), " ...
- (转)ELK Stack 中文指南--性能优化
https://www.bookstack.cn/read/ELKstack-guide-cn/elasticsearch-README.md https://blog.csdn.net/cjfeii ...
- web服务器/应用服务器
1.概念 Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.与客户端的网络浏览器配合.因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTT ...
- 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字
我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...
- unity代码创建草和模拟风的效果
void Start() { Test4(); } //草 private Vector3[] grassArray = new Vector3[7]; private GameObject gras ...
- PHP中return,exit,die的区别
参考:die(),exit(),return的区别 1.die() 是遇到错误才停止,停止程序运行,输出内容(是程序级别的) 2.exit,exit():是一个函数 是停止程序运行,前者不输出内容:后 ...
- Node.js的基础知识(一)
一.Buffer类 1.创建缓冲区的三种方式 var buffer = new Buffer(10); console.log(buffer); var buffer2 = new Buffer([1 ...
- ORACLE 分页 java 用jdbc方式以 sys账号连接oracle数据的问题
2,3,4,6,8 betwenen 为闭区间,前后都包括 select * from(select a.*,rownum rn from (select * from student) a ) ...