как запросить щелкнутый полигон на картографическом сервере с помощью PHP?

каждый. Пожалуйста, позвольте мне краткое введение.


Например: Мой картографический сервер использует режим CGI. У меня есть шейп-файл с именем 'us_states.shp', в нем есть столбец 'state_name'. Если я написал правильный файл '.map' и шаблон '.html', я должен получить конкретное название штата США, когда щелкну изображение карты в теге «форма». Почему это может произойти? Поскольку в шаблоне .html есть строка: [state_name].


Теперь вношу изменения:

  1. пространственные данные находятся в базе данных postgreSQL, а также есть столбец с именем 'state_name';
  2. Я использую PHP для отображения карты запросов.

Тогда, как я могу получить значение 'state_name'? как изменить цвет нажатого состояния?

Мой показатель прогресса:

  • а. Я могу показать исходное изображение карты из файла '.map' с помощью postgreSQL, а также показать названия всех состояний на изображении;
  • б. простой 'QUERYMAP' абзац уже существует в файле '.map';
  • в. Я добавил эти коды в свой файл '.php':

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

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

$image=$map->drawQuery();

Однако, во-первых, координаты изображения не совпадают с координатами в базе данных, равно как и координаты в базе данных не являются ни широтами, ни долготами! Нужно ли мне преобразовывать их? Во-вторых, метод 'queryByPoint' не смог получить имя состояния. Нужно ли использовать 'queryByAttributes'? Как это использовать?

Я не знаю... Я действительно не знаю... Мне нужна твоя помощь, пожалуйста.


person sirius    schedule 12.12.2010    source источник


Ответы (1)


Я думаю, что могу ответить на свой вопрос, хотя он не решен идеально.


У меня две цели:

  1. изменить цвет по нажатию;
  2. получить название государства.

На самом деле мне не нужно решать все проблемы с помощью 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);
}

Как видите, вам не нужен мапсервер для завершения всего.

Между прочим, я черпал вдохновение из книги "Beginning MapServer: Open Source GIS Development", написанной Биллом Кропла. Хорошая книга, многому меня научила!

person sirius    schedule 13.12.2010