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