PHP Highlight list of Parcels Passed In
Abe Gillespie
agillesp at VT.EDU
Sat Jan 22 22:44:52 PST 2005
Ok, since this list has been so helpful and generous to me in the past,
here is an exhaustive example. I hope this will finally get you going.
Disclaimer: I'm doing this all from memory and w/o testing so there
may be a few errors.
Setup a map file like this:
MAP
NAME "Parcel Query"
STATUS on
EXTENT xmin ymin xmax ymax
SIZE 300 300
SHAPEPATH "/data_path"
IMAGETYPE png
IMAGECOLOR 255 255 255
QUERYMAP
STYLE hilite
COLOR 255 0 0
END
LAYER
NAME "Parcels"
DATA "parcels"
CLASS
OUTLINECOLOR 0 255 0
END
TEMPLATE "x"
END
END
Setup a web page like this:
<html>
<head>
<?
$parcel_ids = "1|2|3|4|5";
if (PHP_OS == "WINNT" || PHP_OS == "WIN32")
dl("php_mapscript.dll");
else
dl("php_mapscript.so");
$map = ms_newMapObj("parcels.map");
$layer = $map->getLayerByName("parcels");
// Query.
$layer->queryByAttributes("", "/".$parcel_ids."/", MS_MULTIPLE);
// If you want to avoid errors when no matches are found use the
ampersand
// in the above statement like this: @$layer->queryByAttributes();
// Render an image and get its URL.
$img = $map->drawQuery();
$url = $img->saveWebImage(MS_PNG, 1, 1, 0);
$img->free();
?>
</head>
<body>
<img src="<? echo $url; ?>" />
<?
if ($layer->getNumResults() > 0)
echo $layer->getNumResults()." parcels found.";
else
echo "No parcels found.";
?>
</body>
</html>
Now that I look at it, the last thing you may have been missing was the
mapObj::queryMap() method. Anyhow, I hope this helps.
-Abe
On Jan 22, 2005, at 10:07 PM, Steve Lehr wrote:
> Abe:
>
> I appreciate the help, still not getting it though. I'm wondering if
> I need
> to draw out the map after rendering? I've sceen other posts but no
> real
> solutions...
>
> I'll start from scratch rather then trying to reuse something I have.
> If
> anyone else has a more complete example I'd really appreciate seeing
> it.
>
> Thanks
>
> Steven Lehr
> Assistant Professor
> Freshmen Program
> College of Engineering
> Embry-Riddle Aeronautical University (LB159)
> 600 S. Clyde Morris Blvd.
> Daytona Beach, FL 32114-3900
> 386-226-7740
>
> -----Original Message-----
> From: UMN MapServer Users List [mailto:MAPSERVER-USERS at LISTS.UMN.EDU]On
> Behalf Of Abe Gillespie
> Sent: Saturday, January 22, 2005 8:22 PM
> To: MAPSERVER-USERS at LISTS.UMN.EDU
> Subject: Re: [UMN_MAPSERVER-USERS] PHP Highlight list of Parcels Passed
> In
>
>
> Something else I noticed. You shouldn't even have to setup a separate
> layer to show queried parcels (though there are ways to do this). I
> suggest starting out with one layer that renders queried and
> non-queried parcels at the same time. Once you get the hang of that
> then you can do two different layers (if you still even want to). Make
> the layer like this:
>
> LAYER
> NAME "parcels"
> DATA "parcels"
> STATUS on
> TYPE polygon
> CLASS
> OUTLINECOLOR 0 255 0
> END
> TEMPLATE "x" # Must be present to query on (though "x" means
> absolutely nothing).
> END
>
> The above layer will render all your parcels green outline with hollow
> fill. Then when you use the PHP code to query it will render your
> queried parcels red. This assumes you have QUERYMAP setup correctly.
>
> -Abe
>
> On Jan 22, 2005, at 7:12 PM, Steve Lehr wrote:
>
>> Abe I've never used the QUERY MAP before, I tried putting it in the
>> layer
>> and it did not like that?
>>
>> My initial layer looks like:
>>
>> I changed my code to pass Pipe delimited.
>>
>> But I'm not quite certian I'm still getting what I need to do to my
>> .map.
>>
>> Thanks for the help..below is the layer repeated my EXPRESSION is
>> trashed I
>> realize.
>>
>>> LAYER
>>> NAME "selected_parcels"
>>> DATA parcels
>>> STATUS DEFAULT
>>> TYPE POLYGON
>>> CLASSITEM QPID
>>> CLASS
>>> EXPRESSION "/%parcels%/"
>>> COLOR 255 0 0
>>> END
>>> END
>>
>>
>> Steven Lehr
>> Assistant Professor
>> Freshmen Program
>> College of Engineering
>> Embry-Riddle Aeronautical University (LB159)
>> 600 S. Clyde Morris Blvd.
>> Daytona Beach, FL 32114-3900
>> 386-226-7740
>>
>> -----Original Message-----
>> From: UMN MapServer Users List
>> [mailto:MAPSERVER-USERS at LISTS.UMN.EDU]On
>> Behalf Of Abe Gillespie
>> Sent: Saturday, January 22, 2005 7:05 PM
>> To: MAPSERVER-USERS at LISTS.UMN.EDU
>> Subject: Re: [UMN_MAPSERVER-USERS] PHP Highlight list of Parcels
>> Passed
>> In
>>
>>
>> For the red you need to setup the QUERYMAP. For the PHP it will be
>> something like this:
>>
>> $target =
>> use_appropriate_string_func_to_conver_semi_to_pipe($parcels);
>> // $target should look like "1|2|3|4" ... where the numbers are the
>> IDs.
>> $layer = $map->getLayerByName("parcels");
>> $layer->queryByAttributes("parcel_id_field", "/".$target."/",
>> MS_MULTIPLE);
>>
>> Also, don't forget to add the TEMPLATE "x" tag in your LAYER
>> definition.
>>
>> I'm not a RegEx expert, so someone please put me in check if I'm
>> leading Steven astray.
>>
>> -Abe
>>
>> On Jan 22, 2005, at 6:37 PM, Steve Lehr wrote:
>>
>>> I'm trying to write some PHP that I can send extents and list of
>>> parcels to
>>> get it to highlight the parcels.
>>>
>>> I'd like to highlight all the found parcels in RED.
>>>
>>> My php gets a variable by post called parcels and contains at this
>>> time a
>>> semi colon delimited list of ids in the attribute column QPID of the
>>> parcels.dbf.
>>>
>>> LAYER
>>> NAME "selected_parcels"
>>> DATA parcels
>>> STATUS DEFAULT
>>> TYPE POLYGON
>>> CLASSITEM QPID
>>> CLASS
>>> EXPRESSION "/%parcels%/"
>>> COLOR 255 0 0
>>> END
>>> END
>>>
>>>
>>> I've got my extents. I've got the list of parcels. Now I want to
>>> highlight
>>> the list of parcels with something like the below. But I have to do
>>> something in php to take that ; delimited list and the turn on all
>>> the
>>> matching attributes. (I belive its a QUERYMAP with MULTIPLE_SELECT)
>>> but I'm
>>> having trouble getting my brain around what I need to code - might
>>> someone
>>> have a sample.
>>>
>>> Thanks
>>>
>>> Steven Lehr
>>> Assistant Professor
>>> Freshmen Program
>>> College of Engineering
>>> Embry-Riddle Aeronautical University (LB159)
>>> 600 S. Clyde Morris Blvd.
>>> Daytona Beach, FL 32114-3900
>>> 386-226-7740
>>>
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 6275 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20050123/19be1cb1/attachment.bin>
More information about the MapServer-users
mailing list