GIS系列专题(1):GDAL/Shapely/GEOS/2geom/Grass/Clipper/CGAL计算几何算法库

GDAL/OGR

GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。 OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。

DownloadSource – GDAL

GDAL — GDAL documentation

Index of /gdal/

https://github.com/OSGeo/gdal

Python版本下载

https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal

(base) C:\Users\firecat>conda activate firecat
(firecat) C:\Users\firecat>pip install GDAL‑3.1.2‑cp38‑cp38‑win_amd64.whl
这个文件中的cp38是指安装包支持的是Python3.8版本。
Python本地的版本与下载的安装包的版本要一一匹配。否则会报错:
*.whl is not a supported wheel on this platform

Shapely

Manipulation and analysis of geometric objects。Shapely是在笛卡尔平面对几何对象进行操作和分析的Python工具包。它基于应用广泛的GEOS和JTS库。

可用于GIS数据处理与空间计算的Python包有GDAL和shapely。相对来说,GDAL功能更全面,还可以用于数据转换、瓦片地图发布、栅格影像分析等,shapely只能进行基本的数据处理和空间计算。但大多数情况下shapely就完全够用了。

Shapely · PyPIhttps://pypi.org/project/Shapely/

Shapely — Shapely 1.8a3 documentation 【官方文档说明

https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely

https://github.com/Toblerity/Shapely 【基于Python的源码】

https://github.com/Toblerity/rtree

安装Shapely,使用最常用的pip install shapely,最后报错,说找不到geos_c.dll。

因为Shapely依赖geos(geos.dll和geos_c.dll)。解决办法:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely 【C/C++动态库下载】

下载并安装对应版本的whl文件,里面包含了geos.dll和geos_c.dll。

pip install Shapely-1.7.0-cp38-cp38-win_amd64.whl

GEOS(★重点关注★

1、简介

GEOS ,是Geometry Engine, Open Source的英文缩写。GEOS(the engine of PostGIS)是Java Topology Suite拓扑套件(JTS)的C ++端口。 是开源项目PostGIS、QGIS等的引擎。它旨在包含C ++中JTS的完整功能。 这包括用于SQL空间谓词功能和空间运算符的所有OpenGIS简单功能,以及特定的JTS增强功能。 GEOS为许多其他项目和产品提供空间功能。

GEOS是一个集合形状的拓扑关系操作实用库,简单得说,就是判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。GEOS (Geometry Engine – Open Source) Java Topology Suite (JTS) 的 C++ 实现。它的目标是在C++ 下面,完全实现 JTS 的功能。GEOS的前身是JTS,JTS提供了全功能的,强大的空间操作和空间判断。后来PostGIS缺少一套完整的空间查询操作,于是就将JTS移植成为C++版本,正式命名为GEOS。GEOS为开源库,它包括了完整的空间查询和一大部分空间操作,是从事图形操作和GIS行业开发人员经常接触的开发库。较为知名的使用GEOS的GIS软件就有PostGISQGIS,QGIS使用GEOS的c接口,c接口函数名称不会经常发生更改,具有更多的稳定性。

Spatial Model and Functions:
Geometries: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection
Predicates: Intersects, Touches, Disjoint, Crosses, Within, Contains, Overlaps, Equals, Covers
Operations: Union, Distance, Intersection, Symmetric Difference, Convex Hull, Envelope, Buffer, Simplify, Polygon Assembly, Valid, Area, Length,
Prepared geometries (pre-spatially indexed)
STR spatial index
OGC Well Known Text (WKT) and Well Known Binary (WKB) encoders and decoders.

2、官网及源码链接

https://github.com/libgeos/geoshttps://github.com/libgeos/geos

geos/geos: Official GEOS git repository - geos - OSGeo Git Services: Gitea - Git with a cup of teahttps://git.osgeo.org/gitea/geos/geos

GEOShttps://trac.osgeo.org/geos

Download Source | GEOSDownload Sourcehttps://libgeos.org/usage/download/

https://geos.osgeo.org/doxygen/index.htmlhttps://geos.osgeo.org/doxygen/index.html

JTS Topology Suitehttp://www.tsusiatsoftware.net/jts/main.html

3、二进制库编译与下载

(1)CMake+VS2019编译(★推荐★

没有额外的第三方依赖,直接编译成功!

BuildingOnWindowsWithCMake – GEOShttps://trac.osgeo.org/geos/wiki/BuildingOnWindowsWithCMake

(2)全自动下载(★不推荐★)

OSGeo4Whttps://trac.osgeo.org/osgeo4w/

下载osgeo4w-setup-x86_64.exe,运行它,选择网站OSGeo Download Server,全自动下载。

4、计算几何库JTS、GEOS、Shapely和boost.geometry对比

先有Java版本的JTS,再有C/C++版本的GEOS,后有Python版本的Shapely。他们三者的关系是爷子孙。

(1)JTS

The JTS Topology Suite is a Java library for creating and manipulating vector geometry.

JTS Topology Suite

JTS Topology Suite - Features官方文档说明

LocationTech JTS Topology Suite | projects.eclipse.org

https://github.com/locationtech/jts

JTS Topology Suite download | SourceForge.net

(2)GEOS

GEOS是一个开源的C++计算几何引擎,基于Java Topology Suite(JTS)移植而来。GEOS的文档和示例比较匮乏,并且接口主要用C封装,想直接上手比较困难,借鉴JTS的文档或者直接学习shapely是个不错的选择。

(3)shapely

shapely是基于GEOS的Python包,文档示例比较完善,由于是在python上运作,可视化功能十分强大,上手起来非常简单。

https://github.com/Toblerity/Shapelyhttps://github.com/Toblerity/Shapely

Shapely — Shapely 1.8a3 documentation

Shapely — Shapely 1.7.1 documentation

The Shapely User Manual — Shapely 1.7.1 documentation官方文档说明

(4)boost.geometry

boost.geometry是boost的一个子集,主要提供与GEOS相似的计算几何功能,调试、可视化以及对其它数据格式如stl容器的兼容性远优于GEOS。在Visual Studio上还可配合GraphicalDebugging插件一起使用,非常方便。Boost.Geometry介绍

5、应用项目与案例

(1)项目一览

使用GEOS的应用有PostGIS (C API),MapServer (C API),Quantum GIS (即QGIS,C API),OGR (C API),GRASS (C API),Shapely (C API),INGRES (C API),SpatiaLite (C API),MapGuide Open Source GeoDjango (C API),MapWindow GIS (C API), osm2pgsql (C++ API),osgEarth (C++ API),MonetDB (C API),rgeos (C API),其中还有软件包的FME和Autodesk MapGuide Enterprise。

(2)重点项目PostGIS

PostGIS : Home

PostGIS — Windows Downloads

Index of /postgis/windows/

(3)重点项目QGIS

Welcome to the QGIS project!

https://github.com/qgis/QGIS

(4)博客

https://blog.csdn.net/weixin_39951988/category_9443778.html

GEOS - 随笔分类 - denny402 - 博客园

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2geom

2Geom是一个面向鲁棒处理的C++二维几何库,与矢量图形相关联的计算几何库。

Inkscape / lib2geom · GitLab

更多详细的内容,参见我的另一篇博文,桌面排版软件Scribus v1.5.5源码编译,使用VS2017+Qt5.12.7环境_$firecat全宏的代码足迹$-CSDN博客

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Grass GIS

Geographic Resources Analysis Support System

GRASS GIS - free and open source Geographic Information System (GIS)

GRASS GIS - Bringing advanced geospatial technologies to the world

https://staging.grass.osgeo.org/

https://github.com/OSGeo/grass

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Clipper

Clipper库是目前计算机图形领域广为使用的图形处理库,可以用于解决平面二维图形的多边形简化、布尔运算和偏移处理,在CAD、加工路径与3D打印方面都有着比较重要的应用。

GIS系列专题(2):Clipper计算机图形库使用说明(Vatti‘s clipping algorithm)_$firecat全宏的代码足迹$-CSDN博客

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

CGAL

CGAL,Computational Geometry Algorithms Library,计算几何算法库

设计目标是,以C++库的形式,提供方便,高效,可靠的几何算法。CGAL可用于各种需要几何计算的领域,如计算机图形学,科学可视化,计算机辅助设计和建模,地理信息系统,分子生物学,医学成像,机器人运动规划,网格生成,数值方法等等。  计算几何算法库(CGAL),提供计算几何相关的数据结构和算法,诸如三角剖分(2D约束三角剖分及二维和三维Delaunay三角剖分),Voronoi图(二维和三维的点,2D加权Voronoi图,分割Voronoi图等),多边形(布尔操作,偏置offset),多面体(布尔运算),曲线整理及其应用,网格生成(二维Delaunay网格生成和三维表面和体积网格生成等),几何处理(表面网格简化,细分和参数化等),凸壳算法(2D,3D和dD),搜索结构(近邻搜索,kd树等),插值,形状分析,拟合,距离等。

算法一览:

CGAL 5.4 - Manual: Package Overview

源码:

https://github.com/CGAL/cgal

关注2D Minkowski Sums:

CGAL 5.4 - 2D Minkowski Sums: User Manual

CGAL 5.4 - 2D Minkowski Sums: 2D Minkowski Sums Reference

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Geom/Fade2D

Triangle Meshing in C++

Fade is a fast C++ Delaunay triangulation library and it comes in two flavors: First, Fade 2D is a planar Constrained Delaunay triangulation, see the above red 2D cyclist-shape. Second, Fade 2.5D creates elevated Delaunay triangulations from 2.5D point clouds like the above terrain, for instance. Both software versions are equipped with additional robust algorithms from the meshing field. Moreover, ready-made C++ examples demonstrate the application of these algorithms:

C++ Meshing Libraries - Geom Software

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

libIGL

Simple C++ geometry processing library

https://github.com/alecjacobson/geometry-processing-smoothing

https://github.com/libigl/libigl

Tutorial - libigl

https://github.com/aijm/NURBS

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ALGLIB

ALGLIB 是一个跨平台的数值分析和数据处理库。

Interpolation and fitting
single-dimensional interpolation
1D, 2D and 3D splines
fast scattered N-dimensional interpolation
least squares curve fitting

ALGLIB - C++/C# numerical analysis library

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ggplot2

ggplot2 是一个基于图形语法的声明式创建图形的系统。 您提供数据,告诉 ggplot2 如何将变量映射到美学,使用哪些图形原语,并处理细节。

Create Elegant Data Visualisations Using the Grammar of Graphics • ggplot2

https://github.com/tidyverse/ggplot2

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

推荐书籍

《计算几何—算法设计、分析及应用(第5版) 》,周培德,清华大学出版社

《计算几何算法与实现(Visual C++版)》,孔令德,电子工业出版社

《地理信息系统算法基础》,作者:张宏 温永宁 刘爱利等 出版社:科学出版社

《Python与开源GIS:数据处理、空间分析与地图制图》,作者:卜坤 出版社:科学出版社

开源地理空间基金会中文分会,OSGeo中文分会,OSGeo中国中心,地理空间数据共享,开放地理空间实验室

Python与开源GIS:数据处理、空间分析与地图制图 — 首页

QGIS 3 地理信息系统基础教程 — 首页

https://github.com/bukun/book_python_gis

GDAL - GIS开发者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值