GEOS库使用
1.官网:https://trac.osgeo.org/geos/
2.源码:https://git.osgeo.org/gitea/geos/geos
3.编译,(windows)使用的话,需要先使用cmake工具生成以下vs工程
4.demo
#include "pch.h"
#include "../include/geos.h"
#include <iostream>
using namespace geos::geom;
GeometryFactory::Ptr global_factory;
void test();
std::string str(bool flag);
//生成点
Point*
create_point(double x, double y)
{
Coordinate c(x, y);
Point* p = global_factory->createPoint(c);
return p;
}
int main()
{
std::cout << "GEOS库版本为:" << GEOS_VERSION << std::endl;
Point *p = create_point(0, 0);//生成一个点
double parea = p->getArea();//点的面积为0
std::cout << "扩充前点的面积:" << parea << std::endl;
parea = p->buffer(1.0)->getArea();//buffer的功能是将点扩充成一个面
std::cout << "扩充后点的面积:" << parea << std::endl;
//生成线
CoordinateArraySequence* cl = new CoordinateArraySequence();
cl->add(Coordinate(0, 0));
cl->add(Coordinate(0, 1));
LineString* ls = global_factory->createLineString(cl);
double larea = ls->getArea();
std::cout << "扩充前线的面积:" << larea << std::endl;
larea = ls->buffer(1.0)->getArea();
std::cout << "扩充后线的面积:" << larea << std::endl;
//相交面积
double both_area = p->buffer(1.0)->intersection(ls->buffer(1.0).get())->getArea();
std::cout << "相交的面积:" << both_area << std::endl;
getchar();
}