Using PHP Mapscript to change DATA for Oracle Spatial

Fernando S. simon at INF.UNIVALI.BR
Tue Nov 16 00:53:21 PST 2004


Hi,
    I tested here and the problem is with the mapscript code, you can't
set the layer->data directly, you need to call set() function. I'm using
the PHP Mapscript.
   In my example:

With this way the data is draw corectly:
.....
$dataLayer = $map->getLayerByName("flisk");
echo $dataLayer->data."<br>";
$data = str_replace("cola_a", "cola_b", $dataLayer->data);
echo $data."<br>";
$dataLayer->set("data", $data);
echo $dataLayer->data."<br>";
$image=$map->draw();
.....


This way don't have efect:
.....
$dataLayer = $map->getLayerByName("flisk");
echo $dataLayer->data."<br>";
$data = str_replace("cola_a", "cola_b", $dataLayer->data);
echo $data."<br>";
$dataLayer->data = $data;
echo $dataLayer->data."<br>";
$image=$map->draw();
.....

I used this layer:
LAYER
        NAME "flisk"
        STATUS ON
        TYPE polygon
        CONNECTIONTYPE oraclespatial
        CONNECTION "XXXX/XXXX at XXXXXX"
        data "coordenada from (SELECT shape as coordenada FROM
cola_markets WHERE name = 'cola_a') USING GEOMRELATE"
        type polygon
        class
            color 255 0 0
            outlinecolor 0 0 200
        end
END

Thanks.

----------------------------------------------------------------
Fernando Simon - simon at inf.univali.br
Mapserver and Oracle Spatial developer
G10 - Laboratorio de Computacao Aplicada
http://g10.cttmar.univali.br
----------------------------------------------------------------


Steve Hall wrote:

> Hi all,
>
> I'm working with the 4.4.0 beta2 release so i'm not sure if this is a
> bug, me doing something wrong or it's just not meant to do what i'm
> trying!
>
> I have an Oracle Spatial layer defined in my map file:
>
> LAYER
>   NAME PostcodeData
>   GROUP all
>   TYPE POLYGON
>   STATUS ON
>   CONNECTIONTYPE oraclespatial
>   CONNECTION "user/pwd at db <mailto:user/pwd at db>"
>   DATA "GEOM FROM (SELECT B.GEOM, R.RESULTS, B.BASENAME, R.REPORT_ID
> FROM BASE B, RS_RESULTS_NUMBER R WHERE B.BASEID=R.GEOGID AND
> R.REPORT_ID = !REPORT_ID!) USING SRID 8192"
> [more of the "usual" stuff here]
>
> END
>
> The !REPORT_ID! is a placeholder that I want to replace at runtime
> with a know value, which I try using a fragment of PHP code like this :
>
>  $map = ms_newMapObj($map_path."thematic.map");
>  $dataLayer = $map->getLayerByName("PostcodeData");
>  echo $dataLayer->data."<br>";
>  $data = str_replace("!REPORT_ID!", "19594", $dataLayer->data);
>  echo $data."<br>";
>  $dataLayer->data = $data;
>  echo $dataLayer->data."<br>";
>  $image=$map->draw();
> Although the string replace is working fine and it looks like the
> assignment to $dataLayer->data is working too, when I make the call to
> draw() then it fails and throws out the SQL stored in the .map file,
> not the one I have manipulated on the fly.
>
> I have managed to workaround this using the FILTER statement (and
> corresponding PHP calls) for now but ideally i'd like to prove this
> can be done at the SQL level as i'm going to be doing more complex
> alterations to this SQL later on.
>
> Many thanks,
>
> Steve



More information about the MapServer-users mailing list