[目标]
Ka-map是一个Ajax概念的很好的MapServer前端工具,官方网址。为了使更加易用,
希望引入Ka-map。
[案
例]
国内可见的案例有:
·国家动态地图网
·百姓地图
·国家自然保护区
织梦好,好织梦
[实践]
过程简记如下:
刚开始接
触时,Ka-map还是0.1。通过订阅邮件列表和cvs下载获取Ka-map最新版本。不久前Ka-map升级到0.2,目前cvs中是0.3的版本,
下面的过程与ka-map版本无关。
服务器环境是Redhat EL4U2。
1、先。
2、安装
php_mapscript,有rpm包可以直接安装。
(注意直接安装mapserv网站上的包后,名叫'php_mapscript.so',
而include目录下config.dist.php中为'php_mapscript_46.so',所以把文件改名或者修改config.php或
者做个链接都可以 )
3、修改include下config.dist.php并改名为config.php。
4、运行
init.php测试,无任何正常输出。检查错误日志:报告
PHP Warning: dl(): Unable to load
dynamic library '/usr/lib/php4/php_mapscript_46.so' -
/usr/lib/php4/php_mapscript_46.so: undefined symbol: php_sprintf in
/var/www/thegreatwall/html/public/TheGreatWallWebGis/test/init.php on
line 54
PHP Fatal error: Call to undefined function: ms_newmapobj()
in /var/www/thegreatwall/html/public/TheGreatWallWebGis/test/init.php on
line 60 dedecms.com
php_mapscript_46.so
为什么加不上?google资料无果。
有过诸多怀疑,比如PHP版本不对,SELinux捣乱之类的可能性。后决定自己编译一下试试。
先
检查来源,发现php_mapscript是mapserv的一个直系后代,就先基于MapServer网站上提供的src.rpm进行rebuild,
报需要各类devel包一堆,配齐并理顺版本关系、安装,然后开始rebuild,到最后报大堆的错误,气恼。
下
载tar.gz源码包,适当configure,小关键是指定--with-php=/usr/include/php4,这样
php_mapscript也会被自动编译。然后就是make。到mapscript/php3下将新生成的php_mapscript.so复制到
/usr/lib/php4目录下,还是不行。错误的内容变为
PHP Warning: dl(): Unable to load
dynamic library '/usr/lib/php4/php_mapscript_46.so' -
/usr/lib/php4/php_mapscript_46.so: undefined symbol: php_gd_gdImageCopy
in /var/www/html/ka-map/tile.php on line 149
这和编译过程中的一个警告提示是相匹配的
php_mapscript.c:
In function `php3_ms_img_pasteImage':
php_mapscript.c:6267: warning:
implicit declaration of function `php_gd_gdImageColorExact' copyright dedecms
php_mapscript.c:6271:
warning: implicit declaration of function
`php_gd_gdImageColorTransparent'
php_mapscript.c:6274: warning:
implicit declaration of function `php_gd_gdImageCopy'
php_mapscript.c:
In function `php3_ms_img_saveImage':
php_mapscript.c:5997: warning:
'tmp' might be used uninitialized in this
function
google一下,在
ka-map邮件列表中有一个答复给了我提示
http://blog.gmane.org/gmane.comp.gi...er/day=20050617
大
意是php_gd_gdImageCopy是在php_gd2.so中定义的,请检查php_gd2.so是否已经载入,顺送代码。 织梦内容管理系统
PHP代码:
if ( PHP_OS == "WINNT" || PHP_OS == "WIN32" )
$szGDModule = "php_gd2.dll"; 内容来自dedecms
else
$szGDModule = "php_gd2.so";
if (!extension_loaded("gd"))
dl($szGDModule);
php_gd2.so是什么?google搜索未果,猜测应该是php的gd支持。到EL4的安装盘中查到有php-gd.rpm的包,任务是在
/usr/lib/php4/下安装一个gd.so,这个目录是php的动态库目录,所以猜测gd.so任务和php-gd2.so相同,遂安装php-
gd.rpm,然后修改诸文件,凡加载php_mapscript_46.so的语句前,一律先挂gd.so,测试init.php,通过!
copyright dedecms
革命向成功迈进一步!
分
别修改了init.php legend.php legend-templete.php scale.php
然后调ka-map主程
序查看,不料浏览器上显示需有40多个图在等待下载,而测试机硬盘则嘎嘎声大作起来,没弄明白怎么回事一会儿ssh终端都登陆不上了,最后心疼硬盘就重起
机器(弄了台奔腾300当测试机,除了机器和网卡,什么外设都没有,只能远程控制),咋搞得?
起来后,检查错误日志,有
PHP Warning: [MapServer Error]:
msDrawMap(): Failed to draw layer named 'river'.\n in
/var/www/html/ka-map/tile.php on line 224, referer:
PHP Warning:
[MapServer Error]: msSHPOpenFile():
(/var/www/html/ka-map/../china/hyd2_4l)\n in
/var/www/html/ka-map/tile.php on line 224, referer: copyright dedecms
PHP Warning: [MapServer Error]:
msSHPOpenFile(): (/var/www/html/ka-map/../china/data/hyd2_4l)\n in
/var/www/html/ka-map/tile.php on line 224, referer:
PHP Fatal
error: Call to a member function on a non-object in
/var/www/html/ka-map/tile.php on line 225, referer:
检查map文件和数
据,原来拿来测试的map文件中的需要数据有部分没有拽过来,没想到这个错误动静如此大,再重试了一下,发现听到硬盘狂转20秒内重起httpd服务就还
有救过来的希望。
所以,map文件应该先用mapserver试一下,成功了,再去ka-map试验。
把需要的数据文件拷贝到指
定的位置,到浏览器边一刷新,ok,ka-map成功运行了
[总
结]
1、在Linux上安装ka-map需要先安装mapserver和
php_mapscript.so,php_mapscript.so可以通过安装rpm包(网站上提供mapserver-php-
4.6.0beta3-mh1.i686.rpm)或者自己编译mapserver.tar.gz获得(比较复杂)。 dedecms.com
2、修改config.php,注意修改
php_mapscript_46为php_mapscript。
3、测试init.php,如果没有正常显示测试文本的话。检查错误日
志。如果是php不能加载php_mapscript.so的话,那么也许你需要php_gd.so。找到你的linux对应的php_gd.so,安
装。
4、如果是3的问题的话,需要修改init.php legend.php legend-templete.php
scale.php等文件,在加载php_mapscript.so前加载php_gd.so。我的php的gd库名叫gd.so,所以代码为
PHP代码:
if ( PHP_OS == "WINNT" || PHP_OS == "WIN32" ) copyright dedecms
$szGDModule = "php_gd2.dll";
else
$szGDModule = "gd.so";
if (!extension_loaded("gd"))
dl($szGDModule);
5、测试init.php legend-templete.php
的输出都ok了,就可以测ka-map了,之前保证你的测试案例在mapserver上已经测试通过。
阅读(1442) | 评论(0) | 转发(0) |