wordpress 站点群,wordpress被篡改文件,电脑网,工业设计网官网最近#xff0c;想要在C下编一个可用GDAL模块的地图管理系统#xff0c;找来找去#xff0c;找到了GEOS。GEOS#xff08;Geometry Engine-Open Source#xff09;开源几何引擎 是一个用于计算几何的JTS库的 C/C实现#xff0c;专注于地理信息系统 #xff08;GIS#…最近想要在C下编一个可用GDAL模块的地图管理系统找来找去找到了GEOS。GEOSGeometry Engine-Open Source开源几何引擎 是一个用于计算几何的JTS库的 C/C实现专注于地理信息系统 GIS 软件中使用的算法。 它实现了 OGC 简单要素几何模型并提供了该标准中的所有空间函数以及许多其他标准。 GEOS 是 PostGIS、QGIS、GDAL、Shapely 等的核心依赖项。GEOS库可以和GDAL库一起编译提供OGR库的所有功能。希望了解GEOS更多信息可以前往https://trac.osgeo.org/geos/。
本文GEOS库所采用的是QT软件平台下的MinGW32编译器进行编译编译出来的库文件也用于Windows系统下QTMinGW软件平台进行开发。编译后的文件主要有两个libgeos.dll和libgeos_c.dll编译出来以后经过测试可以正常使用。
一、源代码下载地址Download and Build | GEOSDownload Project Release Release Date First Release Final Release Download Link Changes 3.12.1 2023/11/11 2023/06/27 2027/07/01 geos-3.12.1.tar.bz2 Changes 3.11.3 2023/11/11 2022/07/01 2026/07/01 geos-3.11.3.tar.bz2 Changes 3.10.6 2023/11/11 2021/10/20 2025/10/20 geos-3.10.6.tar.bz2 Changes 3.9.5 2023/11/12 2020/12/09 2024/12/09 geos-3.9.5.tar.bz2 Changes 3.8.4 EOL 2023/11/12 2019/10/10 2023/11/12 geos-3.8.4.tar.bz2 Changes Old releases can be downloaded from https://download.https://libgeos.org/usage/download/下载后的文件为geos-3.12.1.tar.bz2。解压后备用。
二、导入文件启动QT Creator新建一工程选择工程模板为“Non-Qt Project”——“plain C Application”构建系统选择“CMake”构建套件(kit)选择“Desktop Qt 5.15.2 MinGW 32-bit”一路点”下一步“生成工程框架。将解压后的目录”geos-3.12.1“下面的所有子目录和文件导入到工程目录下面并删除自动生成的”main.cpp“文件。
三、分析CMakeLists.txt文件并编译经过仔细对工程目录下的所有CMakeLists.txt文件分析未发现有误之处便不再修改CMakeLists.txt文件进行下一步构建工程。经过4分多钟的等待最终生成了”libgeos.dll、libgeos_c.dll“两个dll文件和3 个测试可执行文件。编译成功
四、调用GEOS库前设置新建一工程选择工程模板为“Application(Qt)”——“Qt Witgets Application”构建系统选择“CMake”构建套件(kit)选择“Desktop Qt 5.15.2 MinGW 32-bit”一路点”下一步“生成工程框架。在工程目录下新建“lib”和“include”两个子目录将”libgeos.dll、libgeos_c.dll“两个dll文件复制到“lib”目录将解压后的目录”geos-3.12.1“下面的学习“include/geos/”下面的所有文件拷贝至工程目录下的“include”中至此调用前设置工作完成。
五、调用GEOS库使用官方网站的CAPI帮助实例代码如下
#include iostream #include mygdalwidget.h #include ./ui_mygdalwidget.h #include geos/geom/GeometryFactory.h #include geos/geom/Geometry.h
#include geos/io/WKTReader.h #include geos/io/WKTWriter.h #include QMessageBox
using namespace std; using namespace geos::geom; using namespace geos::io;
myGdalWidget::myGdalWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::myGdalWidget) { ui-setupUi(this); }
myGdalWidget::~myGdalWidget() { delete ui; } void myGdalWidget::on_btnConnectGDAL_clicked() { GeometryFactory::Ptr fact GeometryFactory::create(); WKTReader reader(*fact); string wkt_a(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))); string wkt_b(POLYGON((5 5, 15 5, 15 15, 5 15, 5 5))); /* Convert WKT to Geometry */ unique_ptrGeometry geom_a(reader.read(wkt_a)); unique_ptrGeometry geom_b(reader.read(wkt_b)); /* Calculate intersection */ unique_ptrGeometry inter geom_a-intersection(geom_b.get()); /* Convert Geometry to WKT */ WKTWriter writer; writer.setTrim(true); /* Only needed before GEOS 3.12 */ QString inter_wkt QString::fromStdString(writer.write(inter.get())); /* Print out results */ cout Geometry A: wkt_a endl; cout Geometry B: wkt_b endl; cout Intersection(A, B): inter_wkt.toStdString()endl; QMessageBox::information(this,显示两个图形相交,inter_wkt); }
代码输入完毕点构建运行应用程序输出
11:54:07: Starting F:\QtProjects\build-firstGDALPro-Desktop_Qt_5_15_2_MinGW_32_bit-Debug\firstGDALPro.exe... Geometry A: POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)) Geometry B: POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)) Intersection(A, B): POLYGON ((10 10, 10 5, 5 5, 5 10, 10 10)) 11:54:26: F:\QtProjects\build-firstGDALPro-Desktop_Qt_5_15_2_MinGW_32_bit-Debug\firstGDALPro.exe 退出退出代码: 0 至此成功运行