History of GEOS

GEOS中Geometry的结构

GEOS分析功能简介

1、History of GEOS

J​T​S​ ​T​o​p​o​l​o​g​y​ ​S​u​i​t​e是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的更多相关文章

  1. 各种Android UI开源框架 开源库

    各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...

  2. JTS空间分析工具包(GIS开源)学习 JAVA

    JST空间分析工具包是一套JAVA API,提供一系列的空间数据分析操作.最近开发项目刚好需要用到,上网搜资料也少,就自己写下来记录一下.C++版本的拓扑分析开源工具叫:geos:.NET版本的拓扑分 ...

  3. DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像

    背景介绍: 近期项目需求,须要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发.在C++语言下,我使用的是应用最广泛的DCMTK开源库,在本专栏的起初阶段的大多数博文都是对DCMTK开源 ...

  4. MVP模式, 开源库mosby的使用及代码分析

    Android中的构架模式一直是一个很hot的topic, 近年来Architecture components推出之后, MVVM异军突起, 风头正在逐渐盖过之前的MVP. 其实我觉得MVP还是有好 ...

  5. JavaScript 空间分析库——JSTS和Turf【转】

    https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...

  6. DICOM:DICOM三大开源库对比分析之“数据加载”

    背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,“只要Sante DICOM Editor打不开的数据,基 ...

  7. 捕获网络数据包并进行分析的开源库-WinPcap

    什么是WinPcap WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets.  这是一种简单的 ...

  8. 【Java&Android开源库代码分析】のandroid-async-http の开盘

          在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正 ...

  9. 【Java&Android开源库代码剖析】のAndroid-Universal-Image-Loader-part1

    做Android app开发的同学应该都听说过或者用过nostra13的Android-Universal-Image-Loader开源库,它在图片异步加载.缓存和显示等方面提供了强大灵活的框架.之前 ...

随机推荐

  1. JavaScript可视化框架——Echarts

    记录一款好用的JavaScript可视化框架: https://echarts.baidu.com/index.html 另 python库: pyecharts

  2. 【GIS新探索】GeoHash原理和编解码实现

    1.什么是GeoHash geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码.不好理解,没关系,我来找个图. 就像上面这张图,一个坐 ...

  3. System Verilog基础(二)

    这一篇笔记主要记录Procedural,Process,Task and function,Interface和Communication中值得注意的点. 1.Procedural 写testbenc ...

  4. DB2 体系结构 (进程模型)

    DB2 是众多关系型数据库中的一种, 关系型数据库还包括比较火的Oracle,MySQL 实例 数据库 DB2 进程模型 DB2 通过 db2start 命令启动数据库实例,即启动相应的进程和线程,并 ...

  5. dubbo接口快速测试技巧

    在分布式系统的开发中,用到了dubbo+zookeeper技术,最近遇到一个问题,产品上线后,我负责的模块出了问题,某个bean中某个字段的值一直为null,而这个bean是我调用注册在zookeep ...

  6. Ubuntu16.04 下如何安装搜狗拼音输入法【亲测有效】

    Ubuntu16.04 下如何安装搜狗拼音输入法[亲测有效]   一.添加fcitx键盘输入法系统[系统默认是iBus] 1.将下载源添加至系统源: sudo add-apt-repository p ...

  7. python安装及配置

     1.进入python官网https://www.python.org/2.导航栏选择Download -> Windows3.按照系统版本点击选择32.64位安装包64 Windows x86 ...

  8. mongo 语法 增删改查

    1.增 db.collection.insert()与db.collection.save() 都是增加,区别:save()遇到相同_id后,则更新此_id数据. 而insert()则报错 > ...

  9. I/O的整体介绍

    java的i/o操作类在包java.io下,大概可以分成如下四组: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 ...

  10. mongo实体设计1 tag

    public class TagProperty { private String type; private int count; } @Document(collection = "ta ...