PHP Query By Attributes - queryMap ?

Steve Lehr lehrs at ERAU.EDU
Wed Jan 26 19:58:07 EST 2005


I found the parcels I'm sending in but they are not highlighting as defined
in the QUERYMAP;  it seems I don't have an association linking the QUERYMAP
defined in the map file with parcel layer that I'm querying, ie to mark them
as to be highlighted.  I can't find the appropriate method to link the layer
with the querymap (if I need to do)

How do I associate the QUERYMAP definition in the map file with the parcel
layer in the PHP code (or in the map file?)

Abe had a last second thought ..
Now that I look at it, the last thing you may have been missing was the
mapObj::queryMap() method. Anyhow, I hope this helps.

But I'm not sure what to do with this



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: Sunday, January 23, 2005 1:45 AM
  To: MAPSERVER-USERS at LISTS.UMN.EDU
  Subject: Re: [UMN_MAPSERVER-USERS] PHP Highlight list of Parcels Passed In


  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 --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapserver-users/attachments/20050126/1018a9d6/attachment.html


More information about the mapserver-users mailing list