Un piccolo script per eseguire le query puntuali con PHP/Mapscript
Lo script riceve alcuni parametri via GET e legge due variabili (il mapfile e il nome dell’estensione mapscript da un file di configurazione), può essere facilmente modificato per adattarlo ad altre esigenze.
Il codice javascript serve a impostare i valori di x e y in un form che ha aperto il webgis
<?php
/**
* Query by point
*/
require_once 'config.php';
// Warning: this override system locale (here it_IT) and avoids ugly DOUBLE errors
setlocale(LC_NUMERIC,'en');
$mapfile = $aszMapFiles[$_REQUEST['map']][1];
if (!extension_loaded('MapScript'))
{
dl( $szPHPMapScriptModule );
}
$formfield = $_REQUEST['formfield'];
$x = floatval($_REQUEST['mX']);
$y = floatval($_REQUEST['mY']);
$point = ms_newPointObj();
$point->setXY($x, $y);
$map = ms_newMapObj($mapfile);
$numlayers = $map->numlayers;
$html = '';
$results = array();
for($i = 0; $i < $numlayers; $i++){
$layer = $map->getLayer( $i );
if($layer->type == MS_LAYER_POINT){
//echo 'Querying ' . $layer->name . "<br />";
if(@$layer->queryByPoint($point, MS_MULTIPLE, -1) == MS_SUCCESS){
// get the number of results
$layer->open();
$numresults = intval($layer->getNumResults());
if($numresults){
// meta data
$glayer = $layer->getMetaData('DBTABLE');
$layerdesc = $layer->getMetaData('DESCRIPTION');
$html .= '<tr><th colspan="4">Punti nel layer "' . $layerdesc . '"</th></tr>' ."\n";
$html .= '<tr><td>Nome</td><td>x</td><td>y</td><td> </td></tr>' ."\n";
}
// add element to results array for each result row
for ($j=0; $j < $numresults; $j++)
{
// get next shape row
$result = $layer->getResult($j);
$shape = $layer->getShape($result->tileindex, $result->shapeindex);
// push the row array onto the results array
$aTmp = $shape->values;
$aTmp = array_merge( $aTmp ,
array('x' => $shape->bounds->minx,'y' => $shape->bounds->miny, 'glayer' => $glayer, 'layerdesc'=>$layerdesc));
array_push( $results, $aTmp );
$html .= "<tr><td>{$aTmp['titolo']}</td><td>{$aTmp['x']}</td><td>{$aTmp['y']}</td><td><button onclick="setPoint({$aTmp['x']}, {$aTmp['y']})">Imposta punto</button></td></tr>" ."\n";
// end for loop
}
$layer->close();
}
}
}
$html = "<table border="1"><tr><td>Posizione cliccata</td><td>$x</td><td>$y</td><td><button onclick="setPoint($x, $y)">Imposta punto</button></td></tr>" . $html . '</table>' ."\n";
$html = < <<EOT
<html>
<head>
<title>Query puntuale</title>
<style type="text/css">
body {
background:#dedede;
font-family: verdana, arial, sans-serif;
font-size: 11px;
}
table {
background:#fff;
}
</style>
<script language="javascript">
function setPoint(x, y){
//alert('setting point ' + x + ', ' + y);
self.opener.opener.document.forms[0].{$formfield}_x.value = x;
self.opener.opener.document.forms[0].{$formfield}_y.value = y;
window.opener.close();
window.close(this);
}
</script>
</head>
<body>
$html
</body>
EOT;
echo $html;
?>