GEOS库 介绍 (转)
http://wiki.woodpecker.org.cn/moin/lilin/geos-introduce
介绍
GEOS是一个集合形状的拓扑关系操作实用库(可能这么说不太准确),简单得说,就是判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。
其实学geos的好地方不是在GEOS的主站。而是在另一个地方,JTS Topology Suite (JTS)!
事实上,GEOS是仿照JTS做的。它其实是JTS的C++实现。
GEOS主要支持几种操作和计算:
空间关系计算,主要支持几种计算
另外还支持多边形化,连接有向线段,压出节点等等操作。
geos for python的安装
windows下的安装
纯粹的GEOS安装
纯粹的GEOS在windows下的安装挺复杂,因为geos本来是为unix类系统写得.作者好像在windows下花的时间不是很多.所以代码很多在windows下都会出错.不过我还是把它安装上了.
- 下载geos的geos-2.1.4版(更高的版本我没有试过)解压,假设解压路径下面都表示为$GEOSHOME
- 进入$GEOSHOME\source\headers\geos,把platform.h.vc改名为platform.h,把version.h.in改名为version.h
- 进入$GEOSHOME\source
- 登记vcvars32.bat,如"D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat",依你的vs安装路径和版本自己看着办.
运行nmake /f makefile.vc,注意,不要去$GEOSHOME\VisualStudio下开vc工程,那个工程如果没有经过修改是不会运行成功的.nmake运行成功后,就有了geos.lib了,很好,现在geos的C++版已经可以用了.
- 下面进入$GEOSHOME\swig\python目录
- 运行swig -c++ -python -modern -o geos_wrap.cxx ../geos.i (注意,这里的前提是你有swig,没有去下一个swig for windows,然后把swig.exe所在目录加入path环境变量
- 打开setup.py,去掉有stdc++.lib的那行,然后把libgeos.a改成geos.lib
- 运行python setup.py build
- 运行python setup.py install
ok,成了!
让geos作为ogr的辅助支持
上面的编译方法实在有些……,不过有一种简单的办法也可以用到geos的功能,就是让ogr添加geos支持。这种方法比较稳妥,也比较容易成功。
先参考上面的步骤编译出geos.lib静态库。
然后打开gdal主目录下的nmake.opt修改:
GEOS_CFLAGS = -IE:/clibs/geos-2.1.4/source/headers -DHAVE_GEOS
GEOS_LIB = E:/clibs/geos-2.1.4/source/geos.lib
这两行,把前面的“#”号去掉,然后把两个路径修改成geos下对应的目录。注意:第一个需要修改的是从-I开始到-D结束,写得是GEOS头文件所在的headers目录,而且-D前面有空格。第二个是从=开始,到行末,写的是geos.lib所处路径
然后重新编译gdal库。然后 nmake /f makefile.vc install安装后就可以用GEOS支持了。
其实geos支持本来就应该在编译gdal时直接添加了。到后面再加就有点浪费感情了。:-)
测试安装是否成功
做个例子试一下,看是否添加成功:
>>> import ogr
>>> wkt = "POINT (1 1)"
>>> geom = ogr.CreateGeometryFromWkt(wkt)
>>> buf = geom.Buffer(1)
>>> buf.ExportToWkt()
'POLYGON ((2 1,1.998629534754652 0.947664043758551,1.994521895368586 0.895471536
735323,1.98768834059584 0.843565534964204,1.97814760073505 0.792088309188096,1.9
65925826291005 0.741180954904707,1.951056516297928 0.690983005633592,1.933580426
500956 0.64163205046448,1.913545457647471 0.593263356935137,1.891006524194483 0.
546009500272454,1.866025403791921 0.500000000012961,1.83867056795439 0.455360964
998779,1.809016994385503 0.412214747722056,1.777145961469214 0.370679608965282,1
.743144825491414 0.330869393656712,1.707106781202421 0.292893218829326,1.6691306
06376652 0.256855174538628,1.629320391069609 0.22285403855904,1.587785252314266
0.190983005640886,1.544639035038874 0.161329432070062,1.500000000025921 0.133974
596230527,1.453990499767549 0.1089934758259,1.406736643105877 0.08645454237079,1
.358367949577434 0.066419573515133,1.309016994409106 0.048943483715945,1.2588190
45138659 0.034074173720615,1.207911690855819 0.021852399274284,1.15643446508014
0.012311659411183,1.104528463309327 0.005478104636107,1.052335956286284 0.001370
465247698,1.000000000044896 0.0,0.947664043803385 0.001370465242998,0.8954715367
79973 0.005478104626721,0.843565535008546 0.012311659397137,0.792088309232011 0.
021852399255615,0.741180954948073 0.034074173697375,0.69098300567629 0.048943483
688198,0.641632050506393 0.066419573482955,0.593263356976151 0.086454542334269,0
.546009500312456 0.108993475785135,0.500000000051841 0.133974596185631,0.4553609
65036432 0.161329432021158,0.412214747758377 0.190983005588108,0.370679609000173
0.222854038502531,0.330869393690077 0.256855174478545,0.292893218861073 0.29289
3218765832,0.25685517456867 0.330869393589983,0.222854038587295 0.37067960889549
9,0.190983005667276 0.412214747649411,0.161329432094515 0.455360964923472,0.1339
74596252976 0.499999999935197,0.108993475846283 0.546009500192447,0.086454542389
052 0.593263356853106,0.066419573531224 0.641632050380649,0.04894348372982 0.690
983005548192,0.034074173732236 0.741180954817972,0.021852399283619 0.79208830910
0263,0.012311659418207 0.843565534875514,0.0054781046408 0.89547153664602,0.0013
70465250047 0.947664043668878,0.0 0.999999999910204,0.001370465240648 1.05233595
6151776,0.005478104622028 1.104528463175373,0.012311659390113 1.156434464947106,
0.02185239924628 1.20791169072407,0.034074173685754 1.258819045008556,0.04894348
3674323 1.309016994281006,0.066419573466864 1.358367949451687,0.086454542316006
1.406736642982829,0.10899347576475 1.453990499647536,0.13397459616318 1.49999999
9909273,0.161329431996703 1.54463903492591,0.190983005561715 1.587785252205296,0
.222854038474274 1.629320390964932,0.256855174448499 1.669130606276555,0.2928932
18734082 1.707106781107177,0.330869393556614 1.743144825401285,0.370679608860604
1.777145961384448,0.412214747613085 1.809016994306332,0.455360964885815 1.83867
056788103,0.499999999896312 1.866025403724574,0.546009500152441 1.89100652413333
3,0.593263356812088 1.913545457592686,0.641632050338733 1.933580426452686,0.6909
83005505492 1.951056516256306,0.741180954774604 1.965925826256144,0.792088309056
347 1.978147600707046,0.843565534831169 1.98768834057477,0.895471536601369 1.994
521895354507,0.947664043624043 1.998629534747603,0.999999999865308 2.0,1.0523359
56106943 1.998629534761701,1.104528463130724 1.994521895382665,1.156434464902764
1.98768834061691,1.207911690680157 1.978147600763054,1.258819044965192 1.965925
826325865,1.30901699423831 1.95105651633955,1.358367949409777 1.933580426549225,
1.406736642941818 1.913545457702254,1.453990499607537 1.89100652425563,1.4999999
99870396 1.866025403859266,1.544639034888262 1.838670568027747,1.587785252168979
1.809016994464671,1.629320390930046 1.777145961553976,1.669130606243195 1.74314
4825581537,1.707106781075436 1.70710678129766,1.743144825371249 1.66913060647674
5,1.777145961356199 1.629320391174281,1.809016994279947 1.58778525242323,1.83867
0567856582 1.544639035151832,1.86602540370213 1.500000000142563,1.89100652411295
4 1.453990499887555,1.913545457574428 1.406736643228919,1.933580426436599 1.3583
67949703174,1.951056516242435 1.3090169945372,1.965925826244526 1.25881904526875
5,1.978147600697713 1.207911690987561,1.987688340567748 1.156434465213167,1.9945
21895349815 1.104528463443274,1.998629534745254 1.052335956420784,2 1))'
>>>
好大的一个缓冲区!不过这个多边形的圆也太恶心了吧!
Linux下的安装
这还要我说吗?
./configure
make
make install
自己去折腾吧!
要OGR支持,只要在GDAL编译的时候加入GEOS的编译开关(似乎只要在编译gdal前编译安装好GEOS,在configure GDAL的时候就会自动加入GEOS支持,当然各个系统不一定)重新编译GDAL就可以了。
不懂编译开关的设置?那就用./configure --help看看吧!一大堆?慢慢看。一堆英文看不懂?不是吧,我四级没过都看懂了。实在看不懂?那么你就apt yum urpmi 什么的搞个二进制包吧!
祝你好运!
GEOS库 介绍 (转)的更多相关文章
- GEOS库的学习之一:介绍和编译
对GEOS库的学习,源于一个项目:要在c++中判断二维平面中两个多边形的关系(无论凹凸).也就是判断两个多边形是否相交.相容等.听起来很简单,可实现起来却比较难,而项目又催得紧.于是我去搜索了一下,看 ...
- DBoW2库介绍
DBoW2库是University of Zaragoza里的Lopez等人开发的开源软件库. 由于在SLAM回环检测上的优异表现(特别是ORB-SLAM2),DBoW2库受到了广大SLAM爱好者的关 ...
- Alljoyn瘦客户端库介绍(官方文档翻译)
Alljoyn瘦客户端库介绍(上) 1.简介 本文档对AllJoynTM瘦客户端的核心库文件(AJTCL)进行了详尽的介绍.本文档介绍了系统整体架构,AllJoyn框架结构,并着重于介绍如何将嵌入式设 ...
- 使用VS2010编译64的Geos库
Geos库在cmake中总是报错,所以我决定试试nmake编译64位的库.现将编译过程记录如下: 1.下载Geos,我下的是最新版3.5.0,地址在 http://trac.osgeo.org/geo ...
- C/C++ 网络库介绍
C/C++ 网络库介绍 Aggregated List of Libraries(Source Link) Boost.Asio is really good. Asio is also availa ...
- GEOS库学习之五:与GDAL/OGR结合使用
要学习GEOS库,肯定绕不开地理方面的东西.如果需要判断的两个多边形或几何图形,不是自己创建的,而是来自shapefile文件,那就得将GEOS库和GDAL/OGR库结合使用了.实际上只需要OGR就行 ...
- GEOS库在windows中的编译和测试(vs2012)
版本:vs2012, geos3.5 一.下载和编译 这类的文章比较,不再具体细说,可以参考 http://blog.csdn.net/wangqinghao/article/details/8201 ...
- Lua5.1基本函数库介绍
Lua5.1基本函数库介绍assert (v [, message])功能:相当于C的断言,参数:v:当表达式v为nil或false将触发错误,message:发生错误时返回的信息,默认为" ...
- Cadence ORCAD CAPTURE元件库介绍
Cadence ORCAD CAPTURE元件库介绍 来源:Cadence 作者:ORCAD 发布时间:2007-07-08 发表评论 Cadence OrCAD Capture 具有快捷.通用的 ...
随机推荐
- OPENGL学习笔记整理(五):着色语言
有些事情本身就是十分奇怪的.在传统上,图形硬件的设计目的是用于快速执行相同的硬编译指令集.不同的计算步骤可以被跳过,参数可以被调整,但计算本身确实固定不变的.然而,随着技术的发展,却越来越变得可以编程 ...
- Windows 下命令行修改文件夹的控制权限 Cacls
设置用户访问权限:我们经常要修改目录和文件的访问权限,使用Cacls命令就很容易做到.下面要赋予本机用户testuser对d盘下 test目录及其所有子目录中的文件有完全控制权限.在命令提示符对话框中 ...
- Epic - Seed Number
Find the seed of a number. Eg : 1716 = 143*1*4*3 =1716 so 143 is the seed of 1716. find all possible ...
- 网易实习笔试真题C/C++
刚做的时候根本就没有想到解题思路,刚好看到了别人的思路,自己写了一下.里面对unordered_map及vector二维数组的建立很灵活,另外区别了一下map,unordered_map,hash_m ...
- Javascript类型转换表
各种类型的值 转换为各种类型 String Number Boolean Object undefined "undefined" NaN false 报错 null " ...
- yum 安装 php5.6 和 mysql5.6
安装 PHP rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm; rpm - ...
- ControlsFX8.0.2中对话框无法判断是否显示的修改
在org.controlsfx.dialog.FXDialog.java中加入 public abstract boolean isShowing(); 在org.controlsfx.dialog. ...
- fedora 16安装ByPass四网口网卡遇到的问题
这个问题困扰了好几天,今天终于在大谷歌的帮助下,在这个网站http://blog.bwysystems.com/bwysystems/?p=16上找到了答案!还是国外的技术论坛强,在百度上搜遍了也没有 ...
- iconv 的参数问题
工作中遇到一个转码的问题,如下代码说话 void encode_convert(iconv_t& cd, const char* str, size_t str_len, std::strin ...
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3146 Accepted: 1798 Descr ...