[Mapserver-users] Create a legend using PHPMapscript

Van Ulden, Joost jvanulde at nrcan.gc.ca
Wed May 26 17:42:00 EDT 2004


You can use legend templates or code your own.  Here is a function that will
do it for you (excuse the formating!):

// draw the legend
	function drawLegend($layerArray) {
	
		GLOBAL $map;
		
		// get the list of layers
		$aLayerList = $map->getAllLayerNames();
		$aLayerList = array_reverse($aLayerList);
		$aSentLayers = explode(",",$layerArray);
				
		//loop through layers
		foreach($aLayerList As $sName)
		{		
			$currentLayer = $map->getLayerByName($sName);
			// check if layer is passed and if it was set the
status to on
			if ($currentLayer->status != 2)
			{ 
				foreach($aSentLayers As $testName){
					if($sName == $testName)
					{
						$currentLayer->set(status,
1);
					} else {
						$currentLayer->set(status,
0);
					}
				}
			}
			
			$currentName = $sName;
			$currentTitle =
$currentLayer->getMetaData("WMS_TITLE");
			$currentStatus = $currentLayer->status;
			$checked = "";
			
			// set the checked status of layer
			if ($currentStatus == 1)
			{
				$checked = '<INPUT type="checkbox"
name="layer" value="'.$currentName.'"
onClick="mapForm.redraw.value=true;mapForm.submit()" CHECKED >';
			} elseif ($currentStatus == 0){
				$checked = '<INPUT type="checkbox"
name="layer" value="'.$currentName.'"
onClick="mapForm.redraw.value=true;mapForm.submit()" >';		
			}
			
			// write out the title
			echo '<TR bgcolor="#CCCCCC"><TD
colspan="2">&nbsp;'.$checked.$currentTitle.'</TD></TR>';
			
			if ($currentStatus >= 1)
			{
				//get the number of classes for this layer
				$nClassCount = $currentLayer->numclasses;
				
				// loop through the classes
				for($j=0; $j<$nClassCount; $j++)
				{
					$currentClass =
$currentLayer->getClass($j);
					$className = $currentClass->name;
					$classImage =
$currentClass->createLegendIcon(20,10);
					$classImageUrl =
$classImage->saveWebImage(MS_GIF,1,0,90);
					// write out the html code
					echo '<TR bgcolor="#FFFFFF"><TD><IMG
src="'.$classImageUrl.'"></TD><TD>'.$className.'</TD></TR>';	
				}
		  }
			
		}
	} 


Good luck!

============================================ 
Joost van Ulden 
Programmer/Analyst 
Natural Resources Canada / Ressources naturelles Canada 
Geological Survey of Canada / Commission geologique du Canada 
101 - 605 Robson Street / 101 - 605 rue Robson 
Vancouver, B.C. / Vancouver (C.B.) 
V6B 5J3 
Office/Bureau:  604.666.7525 
fax/telecopieur: 604.666.1124 
jvanulde at nrcan.gc.ca 
============================================



-----Original Message-----
From: Frank Broniewski [mailto:Frank.Broniewski at mnha.etat.lu] 
Sent: Wednesday, May 26, 2004 6:25 AM
To: mapserver-users at lists.gis.umn.edu
Subject: [Mapserver-users] Create a legend using PHPMapscript


Dear List

I'm still a beginner with MapServer, so I have trouble understanding the
process of creating a legend using php-mapscript. Maybe a reader may send me
on the right path.

I've done so far this tutorial
   http://mapserver.gis.umn.edu/doc/phpmapscript-byexample-howto.html
And the tutorials found here
   http://terrasip.gis.umn.edu/projects/tutorial/
Which provide quite some background

But when it comes to creating the legend dynamically, I can't seem to find
any helpful source. And I must admit, that I'm not capable of understanding
the information provided here:
   http://mapserver.gis.umn.edu/doc/phpmapscript-class-guide.html#legend

As far as I understand inherits the legend object from the mapobject. So I
thought it might be a good idea to create the legend in the same manner as
the scalebar, which I could figure out myself :-) To provide a little more
information on my work, here is the code I
used:
  $legend = $map->legend();
  $legend_url = $legend->saveWebImage();
Am I missing vital parameters or something else? I'm currently displaying
one shapefile only in my map.

Thanks a lot in advance of your help and kind greetings from Luxembourg

                                                      
Frank Broniewski
Musée National d'Histoire et d'Art
Section Préhistoire / Projet EPC
    Tél: +352 260 281-21
241, Rue de Luxembourg
L-8077 Bertrange


_______________________________________________
Mapserver-users mailing list
Mapserver-users at lists.gis.umn.edu
http://lists.gis.umn.edu/mailman/listinfo/mapserver-users



More information about the mapserver-users mailing list