[mapserver-users] Can't figure out queries with Mapscript.

Hankley, Chip Chip.Hankley at GASAI.Com
Mon Jul 8 09:57:59 EDT 2002


Ben...

There's probably a number of ways to do this, but here's how I do it (see
below). There's a Mapfile component, and a mapscript component. FWIW, this
is essentially exactly the way it's done in the GMAP demo.

Cheers!

Chip

----------------------------------------------------------------

...in the mapfile, this would be the layer definition for the layer I want
to query:

LAYER
  NAME "DePere_Parcels"
  METADATA
    "DESCRIPTION"   "PARCEL_INFO"
    "RESULT_FIELDS" "PARCEL_NUM AREA" 
      # These are the two fields (PARCEL_NUM and 
      # AREA) that I want to return
  END
  DATA parcels
  STATUS DEFAULT
  #minscale 5000
  TYPE polygon
  CLASS
    TEMPLATE "ttt_query.html"
    Name Parcels
  END  # CLASS
END  # LAYER

... in the PHP code, I have a function that handles the query...

function query_map($map, $real_pts) {

  //$map is the Map Object
  //$real_pts is an array with two members:
  //  $real_pts[0] x-coordinate in real world terms of the user click
  //  $real_pts[1] y-coordinate in real world terms of the user click
  //
  //NOTE that this function is set up to query only ONE layer, and return
  // the first HIT from a query... so it wouldn't handle multiple layers
  // or return results from numerous objects, although it could easily be
  // modified to do both.

  $click_pt = ms_newPointObj();
  $click_pt->setXY($real_pts[0], $real_pts[1]);

  @$map->queryByPoint($click_pt, MS_SINGLE, -1);
  $Layer = $map->GetLayerByName("DePere_Parcels");
  $count_results = $Layer->getNumResults();

  if ($count_results > 0) {
    $Layer->open($map->shapepath);
    $selFields = explode(" ", $Layer->getMetaData("RESULT_FIELDS"));

    //Take the first record returned, you could modify this to 
    // loop through a bunch of returned records
    $oRes = $Layer->getResult(0);
    $oShape = $Layer->getShape($oRes->tileindex,$oRes->shapeindex);
    //Save the bounding box to an array
    $aResBoundBox = array($oShape->bounds->minx, $oShape->bounds->miny,
                    $oShape->bounds->maxx, $oShape->bounds->maxy);

    //Retrieve the PIN into a variable
    $PIN = $oShape->values[PARCEL_NUM];
    $prcAREA = $oShape->values[AREA];
    $oShape->free();

    $query_result = array($PIN, $prcAREA);
    $return $query_result;
}



More information about the mapserver-users mailing list