Rasters, TileIndex and Shapefiles - Oh My! Now markers won't display tran
Christopher Harris
docterrobert at MSN.COM
Mon Oct 1 09:39:50 PDT 2007
(Problem described on second parapraph.)
Alrighty...........it works! What's most exciting is that the problem that I eluded to in my last reply (the markers or points being off a few hundred yards in a circular pattern) has been fixed as a result of all your advice from earlier. I don't know if it was from me using a shapefile to describe the tile index or if it was from me adjusting lines 1 & 4 in the world file to correctly define the x and y map unit/pixel ratio. I'll play around with it and figure it out. I got it working last Friday right before I left work. Thanks a million!
Now - one minor issue. The markers that I'm placing all display and show up at the right spots, but they aren't displaying there transparent backgrounds. I'm using .png's, and always there's a black background being displayed. I've double checked in The GIMP and there's definitely no background. I noticed on the Mapscript API in the "Layers" class that there's a member called transparency and that it takes an int value. I know that a lot of the members that say int actually take a constant as defined in the constants section, but none of them work (MS_ON, MS_TRUE, MS_YES, MS_GD_ALPHA) and actual integers like -10 through 10 don't work either. I know the layer's type shouldn't be set to Raster.
Here's the code snippets and sections where I define my marker and the layer it is on:
//Location Marker Layer
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$markerLayer = ms_newLayerObj($map);
$markerLayer->set(name, "Marker");
$markerLayer->set(type, MS_LAYER_POINT);
$markerLayer->set(status, MS_DEFAULT);
//Location Marker layer class
$markerclass = ms_newClassObj($markerLayer);
//Location Marker layer class style
$markerstyle = ms_newStyleObj($markerclass);
//Sets the size of the marker. The bigger, the badder.......
$markerstyle->set(size, 15);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
and
$layer=$map->getLayerByName("Marker");
$layer->status = MS_DEFAULT;
//Loop creates marker points then populates them on the map
for($i=0; $i<$markerCount; $i++){
//Creates a point so the marker can be drawn
$marker[$i] = ms_newPointObj();
//Sets that marker according to respective x,y's
$marker[$i]->setXY($mx[$i], $my[$i]);
//Gives the location of the symbol to place as a marker
$markerstyle->set(symbolname, "data/statesp020/$mi[$i]");
//Draws the point using the map, layer Marker, and the image generated, and the only class it has (Index 0)
$marker[$i]->draw($map, $layer, $image, 0, "");
}
Here's the rest of my php (with the code above in it):
<?php
//Takes the $_GET array's and keys and sets them to another array
$keys = array_keys($_GET);
//This loop will find all values that have a name lat, lon, and mi (marker icon) and set them to their own array
foreach($keys as $curvar){
if((substr($curvar, 0, 3))=="lat"){
$my[] = $_GET[$curvar];
}
if((substr($curvar, 0, 3))=="lon"){
$mx[] = $_GET[$curvar];
}
if((substr($curvar, 0, 2))=="mi"){
$mi[] = $_GET[$curvar];
}
}
//The count of how many points were entered in
$markerCount = count($mx);
//echo "<br>The marker count is: $markerCount<br>";
//Map pic width, height parameters
//////////////////////////////////////////////////////////////////////////
$mapwidth = $_GET['width'];
$mapheight = $_GET['height'];
//New point object for Zooming
$centerpoint = ms_newPointObj();
//Taking the center points of the image
$centerX = $mapwidth/2;
$centerY = $mapheight/2;
$centerpoint->setXY($centerX, $centerY);
//////////////////////////////////////////////////////////////////////////
//The zoompoint and zoomscale parameters
//////////////////////////////////////////////////////////////////////////
//$zoompoint = $_GET['zoompoint']; ZOOMPOINT ZOOMS IN ON A PIXEL
$zoomscale = $_GET['zoomscale'];
//////////////////////////////////////////////////////////////////////////
//Center Coordinates passed will be in decimal degrees
//////////////////////////////////////////////////////////////////////////
$x = $_GET['lon1'];
$y = $_GET['lat1'];
//Create a new recObj with dd extents
$extent = ms_newRectObj();
//Set those extents
$extent->setextent($x-.002, $y-.002, $x+.002, $y+.002);
//Set the newly adjusted extent variables
$x1 = $extent->minx;
$y1 = $extent->miny;
$x2 = $extent->maxx;
$y2 = $extent->maxy;
//Upper left and lower right coordinates
//$ULx = $x1;
//$ULy = $y2;
//$LRx = $x2;
//$LRy = $y1;
//////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//The Map Itself
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//The mapfile path and map file itself
$map_path = "/var/www/mapserver/campuscomber/";
$map_file = "indexAlt.map";
$map = ms_newMapObj($map_path.$map_file);
//The size of the window set by mapserver
$map->setSize($mapwidth, $mapheight);
//The name of the map
$map->set(name, "US Universities");
$app = $_GET['app'];
//The type of image produced depending if request comes from Wap, Kiwi, or Webcomber
if($app=="app"){
$map->selectOutputFormat("GIF");
//Sets the output format type
$map->outputformat->setOption(name, "gif");
$map->outputformat->setOption(driver, "GD/GIF");
$map->outputformat->setOption(mimetype, "image/gif");
$map->outputformat->setOption(imagemode, MS_IMAGEMODE_RGB);
$map->outputformat->setOption(extension, "gif");
}
if($app=="kiwi" || $app=="web"){
$map->selectOutputFormat("PNG");
//Sets the output format type
$map->outputformat->setOption(name, "png");
$map->outputformat->setOption(driver, "GD/PNG");
$map->outputformat->setOption(mimetype, "image/png");
$map->outputformat->setOption(imagemode, MS_IMAGEMODE_PC256);
$map->outputformat->setOption(extension, "png");
}
//The color of the background
$map->imagecolor->setRGB(140, 140, 140);
//Tells where the US Shapefile info and images are located
$map->set(shapepath, "/var/www/mapserver/campuscomber/data/statesp020/");
//Sets the map projection lat/lon
$map->setProjection("+proj=latlong +ellps=GRS80 +datum=NAD83");
//sets the EXTENT
$map->setExtent($x1, $y1, $x2, $y2);
$map->set(units, MS_DD);
$map->set(debug, MS_ON);
//Web Object which specifies the image path and the image url for the image Maperver generates
$map->web->set(imagepath, "/var/www/mapserver/campuscomber/images/");
$map->web->set(imageurl, "/mapserver/campuscomber/images/");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//United States layer
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$us = ms_newLayerObj($map);
$us->set(name, "US state polygons");
$us->set(type, MS_LAYER_POLYGON);
$us->set(status, MS_DEFAULT);
$us->set(data, "statesp020");
//United States layer class
$usclass = ms_newClassObj($us);
//United States layer class style
$usstyle = ms_newStyleObj($usclass);
$usstyle->color->setRGB(240, 230, 140);
$usstyle->set(symbol, 0);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//US Boundaries Layer
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$usbounds = ms_newLayerObj($map);
$usbounds->set(name, "US state boundaries");
$usbounds->set(type, MS_LAYER_LINE);
$usbounds->set(status, MS_DEFAULT);
$usbounds->set(data, "statesp020");
//US Boundaries layer class
$usboundsclass = ms_newClassObj($usbounds);
//US Boundaries layer class style
$usboundsstyle = ms_newStyleObj($usboundsclass);
$usboundsstyle->color->setRGB(50, 50, 50);
$usboundsstyle->set(size, 3);
$usboundsstyle->set(symbol, 0);$usboundsstyle->set(symbol, 0);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//University Map Layer (Actually, I don't think we even need this layer - but ehhh, who knows?)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$university = ms_newLayerObj($map);
$university->set(name, "University of Illinois");
$university->set(type, MS_LAYER_RASTER);
$university->set(status, MS_OFF);
$university->set(data, "UofICampusMapAlt.gif");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Tiled University Map Layer
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$universityTiles = ms_newLayerObj($map);
$universityTiles->set(name, "University of Illinois Tiles");
$universityTiles->set(type, MS_LAYER_RASTER);
$universityTiles->set(status, MS_DEFAULT);
$universityTiles->set(tileindex, "u_of_ill.shp");
$universityTiles->set(tileitem, "Location");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Location Marker Layer
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$markerLayer = ms_newLayerObj($map);
$markerLayer->set(name, "Marker");
$markerLayer->set(type, MS_LAYER_POINT);
$markerLayer->set(status, MS_DEFAULT);
//Location Marker layer class
$markerclass = ms_newClassObj($markerLayer);
//Location Marker layer class style
$markerstyle = ms_newStyleObj($markerclass);
//Sets the size of the marker. The bigger, the badder.......
$markerstyle->set(size, 15);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//$map->zoompoint(1, $centerpoint, $mapwidth, $mapheight, $extent);
//Sets the zoom scale for zooming in and out
$map->zoomscale($zoomscale, $centerpoint, $mapwidth, $mapheight, $extent);
//Draws the image
$image=$map->draw();
//Gets the Marker Layer
$layer=$map->getLayerByName("Marker");
$layer->status = MS_DEFAULT;
//Loop creates marker points then populates them on the map
for($i=0; $i<$markerCount; $i++){
//Creates a point so the marker can be drawn
$marker[$i] = ms_newPointObj();
//Sets that marker according to respective x,y's
$marker[$i]->setXY($mx[$i], $my[$i]);
//Gives the location of the symbol to place as a marker
$markerstyle->set(symbolname, "data/statesp020/$mi[$i]");
//Draws the point using the map, layer Marker, and the image generated, and the only class it has (Index 0)
$marker[$i]->draw($map, $layer, $image, 0, "");
}
//Produces a url to reference the image by
$image_url=$image->saveWebImage();
echo $image_url."<br>";
?>
<html>
<head>
<title>Mapserver "University of Illinois"</title>
</head>
<body>
<img src="<?php echo $image_url?>">
</body>
</html>
_________________________________________________________________
Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy!
http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20071001/d02fdb79/attachment.htm>
More information about the MapServer-users
mailing list