Страница 1 из 1

MapServer + PHP

Добавлено: 05 май 2009, 11:35
arzobispo
Привет всем! :)
У меня возникла такая проблема, может кто может помочь.
Описание проблемы: надо стороку из РНР передать MapServer'у (в map-файл) и там сделать запрос.
Кусок из map-файла:

Код: Выделить всё

  LAYER
  NAME "prostokarta"
  CONNECTIONTYPE postgis
  CONNECTION "user=postgres password=1234 dbname=postgis host=localhost"
  DATA "the_geom FROM 
         (
            SELECT prostokarta.the_geom AS the_geom,
            prostokarta.oid AS oid,
         prostokarta.groupunits AS agroupunits
            from prostokarta
            where (prostokarta.groupunits='%group%')
            )
            AS new_table USING SRID=4326"
  TYPE POLYGON
...
  
Т.е. вместо SELECT надо вписать из РНР код, который в последствии формирует SQL-запрос. Но как? :shock:

РНР полностью приведу:

Код: Выделить всё

<?php

echo $pervaya1 = isset($_POST['pervaya1'])? $_POST['pervaya1'] : '';
echo $pervaya2 = isset($_POST['pervaya2'])? $_POST['pervaya2'] : '';
echo $pervaya3 = isset($_POST['pervaya3'])? $_POST['pervaya3'] : '';
echo $pervaya4 = isset($_POST['pervaya4'])? $_POST['pervaya4'] : '';

$a = "";

if ($pervaya1 != '')
{
$a = "`name` LIKE '%{$pervaya1}%'";

if ($pervaya2 != '' or $pervaya3 != '' or $pervaya4 != '')
{
$a .= " and ";   
}

}


if ($pervaya2 != '')
{
$a .= "`name_company` LIKE '%{$pervaya2}%'";

if ($pervaya3 != '' or $pervaya4 != '')
{
$a .= " and ";   
}

}

if ($pervaya3 != '')
{
$a .= "`sells_group` LIKE '%{$pervaya3}%'";

if ($pervaya4 != '')
{
$a .= " and ";   
}

}

if ($pervaya4 != '')
{
$a .= "`number_point` LIKE '%{$pervaya4}%'";
}

echo $sql = "SELECT * FROM `vibor` WHERE $a";



    //создать запрос
$query = $db->query($sql); 
 
  while ($row = $db->fetch_assoc($query))
  {
    
echo '<br>';
echo $row['name'].'<br>';
echo $row['name_company'].'<br>';
echo $row['sells_group'].'<br>';
echo $row['number_point'].'<br>';

     
  }
   
 

 ?>


<form action="" method="post">

pervaya1<input type="text" name="pervaya1" value="<?=$pervaya1?>"><br />
pervaya2<input type="text" name="pervaya2" value="<?=$pervaya2?>"><br />
pervaya3<input type="text" name="pervaya3" value="<?=$pervaya3?>"><br />
pervaya4<input type="text" name="pervaya4" value="<?=$pervaya4?>"><br />

<input type="submit" value="Go!">
Вот собственно и всё :)

Re: MapServer + PHP

Добавлено: 06 май 2009, 09:24
wmk
В голову приходит только один вариант ... динамический мапфайл , а именно создание его "на лету"

Всё это можно реализовать через .htaccess примерно вот так:

Код: Выделить всё

RewriteRule ^MyWms_([A-Za-z0-9.-]+).map$ wms_generator.php?config=$1 [L]
Таким образом при запросе http://map.loc.ru/MyWms_Kazan.map будет обработан файл wms_generator.php которому будет передан параметр $config='Kazan'

То есть JavaScript'ом будет запрашиваться мапфайл с некими параметрами которые и будет обрабатывать PHP

Примерно так:

Код: Выделить всё

Gorodinform = new OpenLayers.Layer.WMS("Gorodinform WMS", "http://192.168.0.19/cgi-bin/mapserv.exe?MAP=/ms4w/apps/MyWms_" + param + ".map&",
  				{
  				layers: ['podlogka_kazan','water','streets','kazan_merged'], 
  				format: "gif"
  				});
Соответственно param - это некий набор инструкций для твоего PHP скрипта который будет передан в файл wms_generator.php в виде переменной config
Ну вот наверное и всё :) ... делаем ECHO сформированного *.MAP файла.

Единственная проблема в том возможно ли подцепить к MapServer'у map файл который доступен по ссылке типа "http://map.loc.ru/MyWms_Kazan.map"

Ну ладно пищу для размышлений я дал ... будут вопросы пиши в аську