changing the color of object - rephrased
William Bronsema
wbronsema at DMSOLUTIONS.CA
Tue Jul 12 05:13:34 PDT 2005
Hi Matthew,
I notice you are doing a drawQuery instead of a drawMap. Does the map's
query object color happen to be yellow? By that I mean, could it be that
the query is coloring the polygons instead of the normal style coloring?
Just a thought.
Regards,
Bill
William A. Bronsema, C.E.T.
Software & Applications Development,
DM Solutions Group Inc.
________________________________________________
> -----Original Message-----
> From: UMN MapServer Users List [mailto:MAPSERVER-USERS at LISTS.UMN.EDU] On
> Behalf Of Matthew Roberson
> Sent: Friday, July 08, 2005 4:31 PM
> To: MAPSERVER-USERS at LISTS.UMN.EDU
> Subject: [UMN_MAPSERVER-USERS] changing the color of object - rephrased
>
> Hi,
>
> I am having a problem getting a PHP/Mapscript to work and I hope that
> somebody can offer some help. I posted this earlier today, however I
> omitted a few details I thought might be pertinent.
>
> Here is what I am trying to do.
>
> I have a shp file(zt48_d00.shp) from the US Census Bureau that
> contains 5-digit zip code boundaries for a particular state(Texas in
> this case). I do a query to find the zip codes I'm interested in. I
> want some of the zip-code boundaries to be filled in red(or whatever
> color) and some to be filled in blue (or whatever color). I have
> written the PHP/Mapscript that I think will produce the results I
> want, however what I get is all yellow zip codes(see the link below).
>
> The portion of the code that is supposed to handle the color is:
>
> if($i <= $percent_num)
> {
> .
> .
> .
> $oZipClassRed = ms_newClassObj($oZipLayer);
> $oZipStyleRed = ms_newStyleObj($oZipClassRed);
> $oZipStyleRed->color->setRG
> .
> .
> .
> }
> else
> {
> .
> .
> .
> $oZipClassBlue = ms_newClassObj($oZipLayer);
> $oZipStyleBlue = ms_newStyleObj($oZipClassBlue);
> $oZipStyleBlue->color->setRGB(0,0,255);
> .
> .
> .
> }
>
> I am running MapServer 4.4.1 on OS X 10.4.
>
> I have included the php and .map file that generates this map. I
> would really appreciate any suggestions. I really need help!
>
> Thanks,
>
> Matt
>
> http://machine.msileads.com/TXZips.html
>
> ------------------------------------------------- php file
> ---------------------------------------------
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> <html>
> <head>
> <TITLE>2080 Machine</TITLE>
> <meta http-equiv = "Content-Language" content="en-us">
> <meta http-equiv = "Content-Type" content="text/html;
> charset=iso-8859-1">
> <style type="text/css">
> <!--
> .red {color: red; font-size: 10pt;}
> .black {color: black; font-size: 10pt;}
> .bold {color: black; font-size: 12pt;font-weight:bold;}
> -->
> </style>
> </head>
> <body>
> <table width="300" align="center" bgcolor="#FFFFFF">
> <tr>
> <td><img src="http://localhost/JW8020/MSILOGO1.gif" alt=""
> width="120" height="112"></td>
> </tr>
> </table>
> <?php
> //require('/Library/WebServer/Documents/fpdf.php');
> //require('/Library/WebServer/Documents/create8020PDF.php');
> ini_set("display_errors","1");
> //$username = "sa";
> $username = "admin";
> //$password = "s1q2l3S1";
> $password = "w3xp2BA5";
> $hostName = "localhost";
> $databaseName = "8020Machine";
> $sQVal = "";
>
> $jID8020 = 3;
>
> function get8020CountPercent($val,
> $iTotalVal)
> {
> if($iTotalVal>0)
> {
> $dPercent=($val/$iTotalVal)*100;
> $dPercent = number_format($dPercent, 2, '.', '');
> }// ($iTotalVal>0)
> else
> {
> $dPercent = 0.0;
> //print "{$iTotalVal} is iTotalVal<br>";
> }// end if ($iTotalVal>0)
>
> return $dPercent;
> }
>
> function create8020OutputRecord($query,
> $zip_array,
> $adPercents)
> {
>
> // Run the query on the server
> if (!($result = @ mysql_query ($query)))
>
> if ($result)
> {
> $jobID = mysql_insert_id();
> }
>
> //return $jobID;
>
> } // end of function
>
> mysql_connect ($hostName,$username,$password);
> mysql_select_db($databaseName);
>
>
> $address_query = mysql_query("select distinct ZipCode from
> eightytwentyinput where ZipCode <> '' and ZipCode is not NULL");
> $address_rows = mysql_num_rows($address_query);
>
> for($i=0; $i<$address_rows; $i++)
> {
> $address_array = mysql_fetch_array($address_query);
> $temp_zip = $address_array['ZipCode'];
> $zip_array[$temp_zip] =0;
> $adPercents[$temp_zip]=0;
> $data[$i][0]=0;
> $data[$i][1]=0;
> $data[$i][2]=0;
> }
>
> $address_query2 = mysql_query("select ZipCode from eightytwentyinput
> where ZipCode <> '' and ZipCode is not NULL");
> $address_rows2 = mysql_num_rows($address_query2);
>
>
> for($i=0;$i<$address_rows2;$i++)
> {
> $address_array2 = mysql_fetch_array($address_query2);
> $temp_zip2 = $address_array2['ZipCode'];
> $zip_array[$temp_zip2] += 1;
>
>
> }
>
> arsort($zip_array);
> arsort($adPercents);
>
> //mapserver stuff
> dl("php_mapscript.so");
>
> $map_file="/Library/WebServer/Documents/test/TX1.map";
> $map = ms_newMapObj($map_file);
>
> $oZipLayer = $map->getLayerByName("TX zip code boundaries");
>
> $sAttrName = 'ZCTA';
>
> //print_r($zip_array);
> print("There are <strong>$address_rows</strong> total unique zip
> codes<BR>");
>
> $iTotalVal = array_sum($zip_array);
> $percent_num = $address_rows*.20;
> $i=0;
> print("<table border=\"1\"><tr><td class=\"bold\">Zip Code</td><td
> class=\"bold\">Count</td><td class=\"bold\">Percent</td></tr>");
>
> while (list($key, $val) = each($zip_array))
> {
>
> $i++;
>
> if($i <= $percent_num)
> {
> $dPercent = get8020CountPercent($val,$iTotalVal);
> $qry8020Output = mysql_query("INSERT INTO EightyTwentyOutput
> VALUES (NULL,'{$jID8020}','{$key}','{$val}','{$dPercent}')");
> create8020OutputRecord($qry8020Output, $zip_array, $adPercents);
> echo "<tr><td class=\"red\">$key</td><td class=\"red\">$val</
> td><td class=\"red\">$dPercent</td></tr>";
> //pdf stuff
> $data[$i][0]=$key;
> $data[$i][1]=$val;
> $data[$i][2]=$dPercent;
> //mapserver stuff
> if(strlen($key)<=5)
> {
> if(strncmp($key, "77", 2)== 0)
> {
> $oZipLayer->set("labelitem", 'ZCTA');
> $sQVal=$sQVal.$key."|";
> $oZipClassRed = ms_newClassObj($oZipLayer);
> $oZipClassRed->setexpression($key);
> $oZipStyleRed = ms_newStyleObj($oZipClassRed);
> $oZipStyleRed->color->setRGB(250,0,0);
>
> }
> }
> } // ($i <= $percent_num)
> else
> {
> $dPercent = get8020CountPercent($val,$iTotalVal);
> $qry8020Output = mysql_query("INSERT INTO EightyTwentyOutput
> VALUES (NULL,'{$jID8020}','{$key}','{$val}','{$dPercent}')");
> create8020OutputRecord($qry8020Output, $zip_array, $adPercents);
> echo "<tr><td class=\"black\">$key</td><td class=\"black\">
> $val</td><td class=\"black\">$dPercent</td></tr>";
> //pdf stuff
> $data[$i][0]=$key;
> $data[$i][1]=$val;
> $data[$i][2]=$dPercent;
> //mapserver stuff
> if(strlen($key)==5)
> {
> if(strncmp($key, "77", 2)== 0)
> {
> $oZipLayer->set("labelitem", 'ZCTA');
> $sQVal=$sQVal.$key."|";
> $oZipClassBlue = ms_newClassObj($oZipLayer);
> $oZipClassBlue->setexpression($key);
> $oZipStyleBlue = ms_newStyleObj($oZipClassBlue);
> $oZipStyleBlue->color->setRGB(0,0,255);
> }
> }
> }// end if ($i <= $percent_num)
> $adPercents[$key] = $dPercent;
> }// end while
>
> print("</table>");
>
>
>
> //more mapserver stuff
> $sQVal = substr($sQVal, 0, strlen($sQVal)-1);
>
> //Do query
> $qresult = @$oZipLayer->queryByAttributes($sAttrName,"/".
> $sQVal."/",MS_MULTIPLE);
>
>
> $image = $map->drawQuery();
> $image_url = $image->saveWebImage();
> $error = ms_GetErrorObj();
> while($error && $error->code != MS_NOERR)
> {
> printf("Error in %s: %s \n", $error->routine, $error->messaage);
> $error = $error->next();
> }
> ?>
>
> <img SRC="<?php echo $image_url?>">
> <p>This is an unprojected map of the 5 digit zip code boundries for
> the state of Texas,
> from the <a href="http://www.census.gov/geo/www/cob/z52000.html"> US
> Census Bureau</a>.</p>
> <p>To find the categories for the legend, I used the <code>ogrinfo</
> code> utility twice.
> <code>ogrinfo -a -summary zt48_d00.shp</code> let me see what fields
> were available, and
> <code>ogrinfo -a zt48_d00.shp|grep SYMBOL|sort -u</code> told me what
> all of the unique values were so that
> I could build my <code>CLASS</code> definitions in <code>TX1.map</code>.
> </p>
>
> <?php
> //print_r($oZipLayer);
> print_r($qresult);
> if ($oZipLayer->getNumResults() > 0)
> echo $oZipLayer->getNumResults()." zips found.";
> else
> echo "No zips found."
>
> ?>
> </body>
> </html>
>
> ------------------------------------------------- map file
> ---------------------------------------------
> MAP
> NAME TX
> IMAGETYPE PNG
> SIZE 600 600
> IMAGECOLOR 255 255 255
> SHAPEPATH "/Library/WebServer/Documents/data"
> FONTSET "/Library/fonts/fonts.list"
> EXTENT -106.645646 25.837377 -93.516407 36.500704
> UNITS METERS
> WEB
> IMAGEPATH "/Library/WebServer/Documents/test/"
> IMAGEURL "/test/"
> END
>
> LEGEND
> STATUS EMBED
> POSITION UR
> END
>
> SCALEBAR
> TRANSPARENT ON
> BACKGROUNDCOLOR 0 0 0
> STATUS EMBED
> POSITION LR
> STYLE 1
> END
> LAYER
> NAME "TX zip code boundaries"
> TYPE POLYGON
> STATUS DEFAULT
> DATA "zt48_d00"
> CLASS
> COLOR 255 255 255
> OUTLINECOLOR 0 0 0
> END
> TEMPLATE "x"
> END
>
> LAYER
> NAME "credits"
> STATUS DEFAULT
> TRANSFORM FALSE
> TYPE ANNOTATION
> FEATURE
> POINTS
> 10 480
> END
> TEXT 'Made with Mapserver.'
> END
>
> CLASS
> LABEL
> TYPE BITMAP
> POSITION CR
> COLOR 0 0 0
> END
> END
> END
> END
More information about the MapServer-users
mailing list