0

每个人。请允许我简单介绍一下。


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


现在,我做了一些改变:

  1. 空间数据在postgreSQL数据库中,还有一个名为'state_name';
  2. 我正在使用PHP来显示查询图。

那么,我怎样才能得到 的值'state_name'呢?如何改变点击状态的颜色?

我的进度:

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

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

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

$image=$map->drawQuery();

但是,首先,图像的坐标不是数据库的坐标,数据库中的坐标也不是纬度或经度!我需要改造它们吗?其次,方法'queryByPoint'无法获取状态名称,需要我使用'queryByAttributes'吗?如何使用它?

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

4

1 回答 1

0

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


我有两个目的:

  1. 改变点击的颜色;
  2. 获取州名。

实际上,我不需要通过 MapServer 解决所有问题。第一个任务取决于Mapserver,第二个任务取决于postgreSQLand 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);
}

如您所见,您不需要地图服务器来完成所有工作。

顺便说一句,我从Bill Kropla 所写的一本书《 Beginning MapServer: Open Source GIS Development 》中获得灵感。这是一本好书,教会了我很多!

于 2010-12-13T14:16:46.717 回答