PostGis、MapWindows、QGis安装

PostGis、MapWindows、QGis安装


发布日期: 2015-07-20 更新日期: 2015-07-20 编辑:bukun 浏览次数: 8173

标签:

摘要: 一、postgis安装和试用 下载的OneClick版的postgresql-8.4.3-1-windows.exe,安装时要选择locale的时候,最初选择的default。安装快完成时,报错“error reading d:\Program Files\P...

一、postgis安装和试用

下载的OneClick版的postgresql-8.4.3-1-windows.exe,安装时要选择locale的时候,最初选择的default。安装快完成时,报错“error reading d:\Program Files\PostgreSQL\8.3\data\postgresql.conf”。开始选择了忽略,结果安装postgis时,安装不上。发现是PostgreSQL启动不了。到网上找,发现也有安装不上(http://archives.postgresql.org/pgsql-bugs/2009-01/msg00132.php),有人指定试试English的locale。照此重新安装,一路顺利。

打开PostgreSQL的pgAdmin,利用template_postgis新建一个数据库TestGIS。

参考网上的《PostGIS入门》,手动导入shp文件到TestGIS。(shp文件名太长或者是之间有空格会出错,没有仔细去试,在出错之后直接将文件拷到c盘根目录下导入的)。

二、MapWindows安装和试用

MapWindows项目又MapWindows桌面软件,也有MapWinGIS的ocx控件,扩展会比较方便。其代码设计之初就是针对控件的,不是先用C/C++写,再包装成控件。MapWindows没有针对任何一个稳定的版本提供打包下载的代码,必须到svn中下载。而svn中的目录非常之多,又没有个介绍。

用迅雷下载MapWindow47SRa-x86-Setup.exe,到99.9%之后,怎么都下载不完了。直接右键另存为才下载下来。安装MapWindows,安装包中有一系列插件。

“文件”菜单的“Geodatabase”菜单项是对postgis进行数据操作的菜单。

利用其“Import Shapefile into Database”,导入shp文件,怎么弄,都没有反应。利用其“Load Feature”打开之前用PostgreSQL手工导入shp文件图层,总是报错。网上也有很多人提出了相关的问题,只是报错跟我的不一样。解决办法都是要将MapWindows插件目录下的pgsql2shp.exe和shp2pgsql.exe拷贝到MapWindows目录下,我试了,还是不行。网上还有人说到”从postgreSQL取数据后,会写到临时的shp文件“(http://www.mapwindow.org/phorum/read.php?7,11836),而从我打开图层时报的错误信息来看,应该就是在做这个时出现了错误。

报错信息是-h localhost -p 5432 -u postgres -P asdfasdf -f c:\documents and settings\administrator\local settings\temp\countries.shp TestGIS public.countries,手工去运行,发现是因为postgis提供的这个pgsql2shp不支持路径中有空格。如果将临时文件写到C盘根目录下就没有问题。

下载了MapWinGIS控件的代码略看了一下,设计的不怎么样。一般一个GIS库,一般会有数据访问和调度部分、专题符号注记的绘制部分、编辑部分、分析算法部分等,最终将数据访问、绘制、编辑等汇总到一起,会有一个跟窗口有关联的类,在MapWinGIS中这个类叫CMapView。看这里面的函数,一堆跟shapefile有关(也就是说其最初的设计时太绑定shp文件的访问,这就会像OGR库一样,访问空间数据库的接口用起来会不舒服),一堆Draw函数(也就是没看到专门的专题图和符号体系)。也没看到编辑体系。所以这个系统还很初级。在代码中搜索了一下post,根本没有相关代码,貌似MapWinGIS控件中没有访问postgis数据的能力,所以只是在桌面端,利用postgis的命令,将数据库中的图层导出成shp。

放弃用MapWinGIS的想法。

三、qgis

qgis是老牌的跨平台、C++开发的gis平台了。不过大部分的资料,都是把qgis作为一个桌面GIS软件来使用,可以定制开发插件。我想只把qgis作为一个二次开发库,所以要重新编译其代码。

下载安装了QGIS-1.4.0-1-No-GrassSetup.exe,试验了一下导入(spit插件的功能)和打开postgis中的数据,比较顺利。spit好像不支持中文目录,如果shapefile中的字段有中文字符,也会报错(因为试验了一下,postgis是支持中文表名和字段名的),而qgis是支持直接打开中文目录下的带中文字段名的shapefile的,也支持打开postgis中带中文字段名的表。

为了得到能二次开发的qgis平台,需要qgis的头文件、lib库、dll库,lib库qgis没提供(至少我没找到),所以要自己编译。我前面的都是用的vc8,最后发现编译qgis的debug时报错,因为我装的qt4是vc9版本的,所以最后才转用vc9编译成功。

1.下载qgis1.4的代码,在解压目录内建立一个vc2008的目录,下面建立include、lib和bin目录,后面所说的include、lib、bin目录都是指这三个目录。

2.安装qt4:下载qt-win-opensource-4.6.2-vs2008.exe来安装,不要下载minGW版本,安装包会设置好环境变量。

3.安装geos:下载解压geos-3.2.0,里面有个build\msvc90目录,vs打开后,build geos_lib和geos_c_dll,将在msvc90\release目录下生成的geos_c_i.lib和geos_c.dll,分别拷贝到lib和bin目录中,将geos的source\headers目录拷贝到include目录中,并改名为geos,还要把capi目录下的geos_c.h拷贝到qgis的vc2008\include\geos目录下。

4.安装proj:下载解压proj-4.6.1,用vc9的cmd环境,nmake makefile.vc进行编译链接,得到proj_i.lib和proj.dll,分别拷贝到lib和bin子目录中,将proj的所有.h文件拷贝到include下的proj目录中

5.安装GDAL/OGR:到http://download.osgeo.org/gdal下载最新版GDAL1.7.1,用里面的makegdal90编译,将得到的gdal_i.lib和gdal16.dll拷贝到lib和bin目录下,将include目录拷贝到include目录下,并改名为gdal。记住编译时要设置nmake.opt中PostgreSQL的路径PG_INC_DIR和PG_LIB(注意将前面的#去掉),还有要将frmts\makefile.vc中的-DFRMT_leveller干掉,将GDALAllRegister.cpp中下面代码注释掉 //#ifdef FRMT_leveller // GDALRegister_Leveller(); //#endif

因为跟这相关的类有很多错误。

6.安装sqlite:一个朋友给我发过的文件,sqlite3.h、sqlite3.lib、sqlite3.dll分别放到相应目录。

7.flex和BISON安装:按《Quantum GIS Coding and Compilation Guide Version 1.4 ’Enceladus’》中“Building under windows using msys”一节的说明,到http://download.osgeo.org/qgis/win32/msys.zip下载msys,里面有Flex和bison这两个exe(单独下载这两个exe来用,好像不行,这两个exe运行的时候会要其他相对路径下的文件,而这些在msys中有)。

8.安装PostGIS:我安装的postgresql-8.4.3-1-windows.exe和postgis_1_4_pg84.exe,安装后会有include、lib目录,将其拷贝到vc2008目录下的相应目录。

9.用CMake生成sln。我的qgis目录为E:/gis/opensource/qgis/qgis-1.4.0,生成的vs工程放到E:/gis/opensource/qgis/qgis-1.4.0/vc2008。勾上CMAKE_USE_RELATIVE_PATHS(Advanced View),这里只是表示最终生成的vs工程会用相对路径。在设置CMake中的目录时,你还是可以用绝对路径,CMake会自动给你生成相对的。WITH_BINDINGS(whether it should try to build Python bindings for QGIS )、WITH_GRASS(whether it should try to build GRASS plugin )、WITH_INTERNAL_SPATIALITE、WITH_SPATIALITE都不勾。设置好GEOS、GDAL、PROJ、sqlite、postgres的include目录和lib文件。

10.用vc9打开,编译qgis_core,发现报错“Cannot open include file: 'unistd.h': No such file or directory”,参考http://hi.baidu.com/daren007/blog/item/5b0b4c446fecb54a510ffe30.html,在vc/include目录或者我们前面给qgis创建的include目录下加一个unistd.h文件。

11.编译报错:Project : error PRJ0019: A tool returned an error code from "Generating qgssearchstringparser.cpp",查看BuildLog.htm,是......\msys\bin\bison.exe -oE:/gis/opensource/qgis/qgis/vc2008/src/core/qgssearchstringparser.cpp -d -v -t E:/gis/opensource/qgis/qgis/src/core/qgssearchstringparser.yy错误。网上查了很久,也试了很多方法,都解决不了。最后尝试手工用命令行,进入bison.exe所在的目录,手工执行“bison.exe -oE:/gis/opensource/qgis/qgis_1.4.0/vc2008/src/core/qgssearchstringparser.cpp -d -v -t E:/gis/opensource/qgis/qgis_1.4.0/src/core/qgssearchstringparser.yy”。编译qgis_core成功。

虽然qgis的说明书都说其不是通过ogr来连接PostgreSQL,而是自己实现了一个postgresprovider。但是我编译出来一看,postgresprovider根本就没有注册成一个provider(我自己在qgspostgresprovider.cpp中加了一个QGISEXTERN QString databaseDrivers(){return POSTGRES_KEY;},使之变成一个provider,但发现在qgis.exe中根本没用。查看代码,发现在qgis工程的QgsOpenVectorLayerDialog文件,也就是添加图层的对话框的代码中,添加图层用的是QgsNewOgrConnection,一看名字就知道,这里面是用的ogr的。

可以通过另外的方法来验证。直接安装qgis的安装包,删除安装目录下plugins下的postgresprovider.dll,一样可以连上PostgreSQL,但如果是删掉ogrprovider.dll,就不能连了。

从框架设计上来看,qgis设计得还不错,结构比较清晰,比较符合我的习惯。但由于qt_gui跟qt绑定得很紧密,很难剥离,所以要在windows下写程序,也必须用qt的界面。

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org