====== PHP MapScript Recipes ====== **[[http://mapserver.org/mapscript/index.html|MapScript documentation]]**. ===== Return a map image from a map file ===== We can build an image from a working map file. Here we just turn on one layer, setting its status to ''DEFAULT'': getLayerByName('layer_name'); $layer->set('status', MS_DEFAULT); $map_image = $map->draw(); if ($inline) { header('Content-Type: image/png'); $map_image->saveImage(''); exit; } $image_url = $map_image->saveWebImage(); ?> PHP MapScript example: Display the map > ===== Build a map from scratch ===== See [[http://www.rigacci.org/wiki/doku.php/tecnica/gps_cartografia_gis/mapserver#php-mapscript|this example]]. ===== Generate the legend image ===== We need a mapfile with all the necessary to display the legend. We can return just the legend image via PHP code. The image can be served as an **inline image** or as a **web image** from the temporary directory. drawLegend(); if ($inline) { header('Content-Type: image/png'); $legend_image->saveImage(''); exit; } $image_url = $legend_image->saveWebImage(); ?> PHP MapScript example: Display the legend > The mapfile requires all the relevant entries, among them: **''MAP.FONTSET''**, **''MAP.WEB.IMAGEPATH''**, **''MAP.WEB.IMAGEURL''**, **''MAP.LEGEND''**. For inline images you can omit web paths, because no temporary images will be created. ===== Make a query ===== Open an existing map file and perform a **query by rectangle** on a layer, print results with a **template**. setextent(1681023, 4850413, 1681906, 4851167); $map->queryByRect($selrect); $buffer = $map->processquerytemplate(array(), false); print "\n"; print $buffer; print "
\n"; ?>
The **''$buffer''** variable contains one template instance for each record. The querable layer is definend in the ''**MAP.LAYER**'' section, and it requires a query template: MAP ... LAYER ... TEMPLATE "query_template.html" TOLERANCE 6 METADATA DESCRIPTION "Impianti Pubblicitari" RESULT_FIELDS "objectid,field1,field2" RESULT_HEADERS "ID,Heading1,Heading2" END END END This is an example for **''query_template.html''**: [item name=objectid][item name=field1][item name=field2] This example does not use the template, it **iterates through the query results**: setextent(1681023.81515592, 4850413.68207817, 1681906.91185973, 4851167.76185515); $map->queryByRect($selrect); $layer = $map->getLayerByName('layer_name'); $count = $layer->getNumResults(); print "Query result count: " . $count . "
\n"; print "
\n";
for ($i = 0; $i < $count; $i++) {
    $qRes = $layer->getResult($i);
    print_r($qRes);
}
print "
\n"; ?>