利用Ka-map搭建的WebGIS遇到的第一个问题是投影系统的大小、比例关系;遇到的第二个问题是图形文件的创建和生成;这两个问题在将会在第一季中进行总结。
今天遇到的是第三、四个问题,分别是:
1、图层上的点如何改变样式?
2、利用Grass62创建的图层中文乱码问题如何解决?
下面将两个问题的解决方案记录一下。
问题一、图层上的点如何改变样式?
解决方案:在Ka-map中有一系列symbols文件,这些文件中给出了各种图例样式,例如实心园点、小方块、十字形、小叉子等等,还可以指定用图标做为地图图例。
我在搭建GIS的过程中遇到的最多的问题就是文件路径错误和缓存无法刷新,文件路径错误不会给出任何错误提示、而缓存也同样会造成"毫无效果"的假象,因而调试起来很费时间。
然而只要调通,会发现改变标点样式非常简单、甚至可以做出很多漂亮的图例来。现在正在考虑用科学家小H提供的六类图例进行地图标注,找到好看的小图标就是成功的标志了。
问题二、利用Grass62创建的图层中文乱码问题如何解决?
这个问题也不难解决,但是却让我感到无法实现易用性的要求。原因是Grass62的软件操作时、手工标点完成后弹出的数据录入窗口不支持UTF-8编码(至少在我的freeBSD系统上如此),因而录入到dbf数据库中的内容均为gb2312编码。
而在Ka-map上进行读取、显示的时候,却全部以UTF-8进行处理,自然会出现乱码。我现在的解决方案是利用PHP将dbf文件进行遍历转换,将其中全部数据转换成UTF-8再使用。
这样做的坏处显而易见:用grass62生成的dbf必须经过导出变成含有dbf的图形文件,然后再通过PHP将其中的dbf转换一下。若操作失误,就会重复两次转换或忘记转换,同时在使用grass进行地图绘制的时候看到的全部是乱码,暂时还没有想到更好的办法。
以下是将dbf通过PHP读取并进行转换的程序片断:
<?php
$dbf_filename='./test.dbf';
$dbf_handle=dbase_open($dbf_filename, 2);
$max_n=dbase_numrecords($dbf);
for($x=1; $x<=$max_n; $x++) {
$record=array();
$record=dbase_get_record_with_names($dbf_handle, $x);
unset($record['deleted']);
foreach($record as $key=>$value) {
$record[$key]=iconv("gb2312", "UTF-8", $value);
}
$record=array_values($record);
dbase_replace_record($dbf_handle, $record, $x);
}
dbase_close($dbf_handle);
exit;
?>
尚未解决的问题:
1、如何根据不同的缩放级别显示不同数量的图标?也就是说为每个数据点设置显示级别;
2、框选地图查看数据虽然可以使用了,但是通过搜索找到数据点还不能使用;
3、当地图含有多个图层的时候,如何控制各图层的可见性?如何关闭某图层或打开某图层?
4、数据结果内容中是否可含有超链接?含有超链接才能方便的跳转到具体的数据展现页面。
今天遇到的是第三、四个问题,分别是:
1、图层上的点如何改变样式?
2、利用Grass62创建的图层中文乱码问题如何解决?
下面将两个问题的解决方案记录一下。
问题一、图层上的点如何改变样式?
解决方案:在Ka-map中有一系列symbols文件,这些文件中给出了各种图例样式,例如实心园点、小方块、十字形、小叉子等等,还可以指定用图标做为地图图例。
我在搭建GIS的过程中遇到的最多的问题就是文件路径错误和缓存无法刷新,文件路径错误不会给出任何错误提示、而缓存也同样会造成"毫无效果"的假象,因而调试起来很费时间。
然而只要调通,会发现改变标点样式非常简单、甚至可以做出很多漂亮的图例来。现在正在考虑用科学家小H提供的六类图例进行地图标注,找到好看的小图标就是成功的标志了。
问题二、利用Grass62创建的图层中文乱码问题如何解决?
这个问题也不难解决,但是却让我感到无法实现易用性的要求。原因是Grass62的软件操作时、手工标点完成后弹出的数据录入窗口不支持UTF-8编码(至少在我的freeBSD系统上如此),因而录入到dbf数据库中的内容均为gb2312编码。
而在Ka-map上进行读取、显示的时候,却全部以UTF-8进行处理,自然会出现乱码。我现在的解决方案是利用PHP将dbf文件进行遍历转换,将其中全部数据转换成UTF-8再使用。
这样做的坏处显而易见:用grass62生成的dbf必须经过导出变成含有dbf的图形文件,然后再通过PHP将其中的dbf转换一下。若操作失误,就会重复两次转换或忘记转换,同时在使用grass进行地图绘制的时候看到的全部是乱码,暂时还没有想到更好的办法。
以下是将dbf通过PHP读取并进行转换的程序片断:
<?php
$dbf_filename='./test.dbf';
$dbf_handle=dbase_open($dbf_filename, 2);
$max_n=dbase_numrecords($dbf);
for($x=1; $x<=$max_n; $x++) {
$record=array();
$record=dbase_get_record_with_names($dbf_handle, $x);
unset($record['deleted']);
foreach($record as $key=>$value) {
$record[$key]=iconv("gb2312", "UTF-8", $value);
}
$record=array_values($record);
dbase_replace_record($dbf_handle, $record, $x);
}
dbase_close($dbf_handle);
exit;
?>
尚未解决的问题:
1、如何根据不同的缩放级别显示不同数量的图标?也就是说为每个数据点设置显示级别;
2、框选地图查看数据虽然可以使用了,但是通过搜索找到数据点还不能使用;
3、当地图含有多个图层的时候,如何控制各图层的可见性?如何关闭某图层或打开某图层?
4、数据结果内容中是否可含有超链接?含有超链接才能方便的跳转到具体的数据展现页面。
Leave a comment