• GEOS库在windows中的编译和测试(vs2012)


    版本:vs2012, geos3.5

    一、下载和编译

       这类的文章比较,不再具体细说,可以参考 http://blog.csdn.net/wangqinghao/article/details/8201319

    我的软件保存目录是d:/geos350/,编译成功后,会在d:/geos350/src目录下生成一个geos_c_i.lib库。

    在VS中新建项目后,需要进行配置,只需要三处地方:

    第一处:属性--配置属性---c/c++---常规,添加附加包含目录d:/geos350/include

    第二处:属性--配置属性---链接器---常规,附加库目录d:/geos350/src

    第三处:属性--配置属性---链接器--输入,附加依赖项:geos_c_i.lib

    二、测试

     先添加头文件: #include "geos.h"

    void test();
    string str(bool flag);
    int main(int argc,char *argv[])
    {
            test();
        system("pause");
        return 1;
    }
    
    
    void test()
    {
        cout<<"GEOS库版本为:"<<GEOS_VERSION<<endl;
    
        typedef Coordinate PT;
         GeometryFactory factory;
        CoordinateArraySequenceFactory csf; //构建第一个矩形p1
        CoordinateSequence* cs1 = csf.create(5,2);//五个2维点,第三维度z始终为0
        cs1->setAt(PT(0,0),0);
        cs1->setAt(PT(3,0),1);
        cs1->setAt(PT(3,3),2);
        cs1->setAt(PT(0,3),3);
        cs1->setAt(PT(0,0),4); //与第一个点相等,构成闭合
        LinearRing* ring1 = factory.createLinearRing(cs1); //点构成线
        Geometry* p1 = factory.createPolygon(ring1,NULL); //线构成面
    
         CoordinateSequence* cs2 = csf.create(5,2); //构建一个四边形p2
        cs2->setAt(PT(2,2),0);
        cs2->setAt(PT(4,5),1);
        cs2->setAt(PT(5,5),2);
        cs2->setAt(PT(5,4),3);
        cs2->setAt(PT(2,2),4);
        LinearRing * ring2 = factory.createLinearRing(cs2);
        Geometry* p2 = (factory.createPolygon(ring2,NULL));
    
        CoordinateSequence *cs3 = new CoordinateArraySequence(); //构建一个三角形p3
        int xoffset=4,yoffset=4,side=2;
        cs3->add(PT(xoffset, yoffset));
        cs3->add(PT(xoffset, yoffset+side));
        cs3->add(PT(xoffset+side, yoffset+side));
        cs3->add(PT(xoffset, yoffset));
        LinearRing * ring3 = factory.createLinearRing(cs3);
        Geometry* p3 = (factory.createPolygon(ring3,NULL));
        bool flag12=p1->intersects(p2);
        bool flag13=p1->intersects(p3);
        bool flag23=p2->intersects(p3);
        cout<<"图1与图2:"<<str(flag12)<<endl;
        cout<<"图1与图3:"<<str(flag13)<<endl;
        cout<<"图2与图3:"<<str(flag23)<<endl;
    }
    string str(bool flag)
    {
        string result=(flag==true)?"相交":"不相交";
        return result;
    }

    结果:

  • 相关阅读:
    webLogic的安装与配置总结
    hibernate 中save()、update()、saveOrUpdate()的区别?
    struts2+spring+hibernate+oracle整合,实现增删改查操作。(一)
    配置struts时web.xml中<url-pattern>*.action</url-pattern>
    java中,返回1000-10000中 能被3整除,且个位数是6的个数
    kubernetes部署Fluentd+Elasticsearch+kibana 日志收集系统
    用Docker搭建WordPress
    51建设Android版一些技术整理
    微信内置浏览器隐藏功能左上角功能选项
    vs2013修改默认的开发环境
  • 原文地址:https://www.cnblogs.com/denny402/p/4965213.html
Copyright © 2020-2023  润新知