如何使用PHP在mapserver中查询单击的多边形?

时间:2010-12-12 17:57:37

标签: php mapserver

大家。请允许我简要介绍一下。


例如:我的地图服务器使用 CGI 模式。我有一个名为'us_states.shp'的shapefile,其中有一列'state_name'。如果我已经编写了正确的'.map'文件和'.html'模板,那么当我点击“表单”标签中的地图图片时,我应该获得美国州的特定名称。为什么会这样?因为'.html'模板有一个字符串: [state_name]


现在,我做了一些改变:

  1. 空间数据位于 postgreSQL 数据库中,还有一个名为'state_name'的列;
  2. 我正在使用 PHP 来显示查询地图。
  3. 然后,如何获得'state_name'的值?如何更改点击状态的颜色?

    我的进步率:

    • 一个。我可以使用postgreSQL从'.map'文件中显示原始地图图像,还可以显示图像中所有状态的名称;
    • 湾“.map”文件中已经存在一个简单的'QUERYMAP'段落;
    • ℃。我将这些代码添加到我的'.php'文件中:
      

    $ point-> setXY($ img_x,$ img_y);

         

    $ map-> queryByPoint($ point,'MS_SINGLE', - 1);

         

    $图像= $ MAP-> drawQuery();

    然而,首先,图像的坐标不是数据库的坐标,数据库中的坐标也不是纬度或经度!需要我改造它们吗? 第二个,方法'queryByPoint'无法获取州名称,我需要使用'queryByAttributes'吗?怎么用?

    我不知道......我真的不知道......我需要你的帮助。

1 个答案:

答案 0 :(得分:0)

我想我可以回答我的问题,即使它没有完美解决。


我有两个目的:

  1. 更改单击的颜色;
  2. 获取州名称。
  3. 实际上,我不需要通过MapServer解决所有问题。第一项任务取决于Mapserver,第二项任务取决于postgreSQLPHP


    第一项任务:

    更改旧代码:

    $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开发”中获得灵感。这是一本很好的书,教我很多!