[mapserver-users] Strage behaviour of dynamic classes (color v/s outlinecolor)
    Vinko Vrsalovic 
    v at w.cl
       
    Mon Jan 28 23:47:58 PST 2002
    
    
  
Hello again!
	I've been trying to reduce at a minimum the use of the map file
	in order to obtain maximum flexibility (ie, i'd like almost all
	parameters to be configurable trough a web interface).
	My problem is the following:
	I'm creating layers according to some user input, the layers
	are drawn, but the polygon layers take the color parameter
	as the outline color and the color inside the polygons remain
	always the same as the background color of the image.
	Point layers are drawn ok and the trouble i have with line
	layers i guess it's because the symbol set.
	The strange thing about all this is that if i write a map file
	with the same attributes i'm setting dynamically, the polygons
	are filled with the color correctly.
	Here is all the data i think is relevant to the issue
	(is rather (but not too) long, so thanks a lot if you look at 
	it all :-) )
	The version:
	MapScript
	MapScript Version ($Revision: 1.76 $ $Date: 2002/01/20 21:30:01
	$)
	MapServer version 3.5 OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP
	SUPPORTS=PROJ SUPPORTS=TTF SUPPORTS=WMS_SERVER INPUT=EPPL7
	INPUT=GDAL INPUT=SHAPEFILE
	
	(PHP 4.0.6, Apache 1.3.20)
	The map file:
NAME FIRSTMAP
SIZE 500 500
STATUS ON
SYMBOLSET ../symbols/symbols.sym
EXTENT 173340 6228551 471816 6466951
UNITS METERS
SHAPEPATH "../data"
IMAGECOLOR 150 220 233
WEB
IMAGEPATH "/var/www/html/ms/tmp/"
IMAGEURL "/tmp/"
END
END
	The code:
	$layers is an array that comes with the name of the shapefiles,
	$data is an array with the corresponding attributes to set
	in every layer. I create them and afterwars draw them with
	$layer->draw($img);
	Could the problem be that I 'lose' the classObj's? (or they
	remain attached to the layers even outside the function?)
	I think they remain 'attached' because if i change some
	attributes of the classes it shows on the resulting image.
<?php
dl('php_mapscript.so');
function add_layers($map,$layers,$data) {
	$blanco = $map->addColor(255,255,255);
	$c = $map->addColor(200,100,0);
	$d = $map->addColor(150,200,0);
	for ($i=0;$i<count($layers)-1;$i++) {
		$lay[$layers[$i]] = ms_newLayerObj($map);
	
		$lay[$layers[$i]]->set("name","n".$layers[$i]);
		$lay[$layers[$i]]->set("data",$layers[$i]);
		$lay[$layers[$i]]->set("type","MS_LAYER_".$data["tipo"][$i]);
		$lay[$layers[$i]]->setMetadata("RESULT_FIELDS",'"'.$data["metadata"][$i].'"');
		$lay[$layers[$i]]->set("status",MS_ON);
		$cla[$layers[$i]] = ms_newClassObj($lay[$layers[$i]]);
		switch($data["tipo"][$i]) {
			case "POLYGON":
				$cla[$layers[$i]]->set("color",$blanco);
				break;
			case "LINE":
				$cla[$layers[$i]]->set("color",$c);
				$cla[$layers[$i]]->set("symbol",9);
				$cla[$layers[$i]]->set("size",4);
				break;
			case "POINT":
				$cla[$layers[$i]]->set("color",$d);
				$cla[$layers[$i]]->set("outlinecolor",$blanco);
				$cla[$layers[$i]]->set("symbol",3);
				$cla[$layers[$i]]->set("size",8);
				break;
		}
		
	}
	return $lay;
}
?>
Thanks!,
-- 
V. <v at w.cl>
    
    
More information about the MapServer-users
mailing list