大家。请允许我简要介绍一下。
例如:我的地图服务器使用 CGI 模式。我有一个名为'us_states.shp'
的shapefile,其中有一列'state_name'
。如果我已经编写了正确的'.map'
文件和'.html'
模板,那么当我点击“表单”标签中的地图图片时,我应该获得美国州的特定名称。为什么会这样?因为'.html'模板有一个字符串: [state_name] 。
现在,我做了一些改变:
'state_name'
的列; 然后,如何获得'state_name'
的值?如何更改点击状态的颜色?
我的进步率:
'QUERYMAP'
段落; $ point-> setXY($ img_x,$ img_y);
$ map-> queryByPoint($ point,'MS_SINGLE', - 1);
$图像= $ MAP-> drawQuery();
然而,首先,图像的坐标不是数据库的坐标,数据库中的坐标也不是纬度或经度!需要我改造它们吗? 第二个,方法'queryByPoint'
无法获取州名称,我需要使用'queryByAttributes'
吗?怎么用?
我不知道......我真的不知道......我需要你的帮助。
答案 0 :(得分:0)
我想我可以回答我的问题,即使它没有完美解决。
我有两个目的:
实际上,我不需要通过MapServer解决所有问题。第一项任务取决于Mapserver
,第二项任务取决于postgreSQL
和PHP
。
第一项任务:
更改旧代码:
$point->setXY($img_x, $img_y);
$map->queryByPoint($point, 'MS_SINGLE', -1);
$image=$map->drawQuery();
到新代码:
$point->setXY($map_x, $map_y);
$map->queryByPoint($point, 'MS_SINGLE', -1);
$image=$map->drawQuery();
点击的状态颜色将被更改。我只需将 $ img_x 更改为 $ map_x ,将 $ img_y 更改为 $ map_y 。但是如何获得该点的正确坐标?只需要两个变量:地图的范围,图像的大小。获得它们后,从图像点到地图坐标的转换很容易。我恐怕不会重复它们。
第二项任务:
如果你得到了地图的坐标,你将很容易从postgresql数据库中查询状态。 这是PHP的查询代码:
$query = "select state_name from country where within(GeomFromText('Point($map_x $map_y)', 4269), the_geom)";
$result = pg_query($query);
if($result) {
list($state) = pg_fetch_row($result);
}
如您所见,您不需要mapserver来完成所有事情。
顺便说一句,我从Bill Kropla撰写的一本书“ Beginning MapServer:开源GIS开发”中获得灵感。这是一本很好的书,教我很多!