[postgis-users] Perl Mapscript - queryByPoint to extract Data from POSTGIS table
Tom Melhuish
tmelhuish at webinsights.org
Thu May 30 09:00:40 PDT 2002
I am using Perl Mapscript and have not been able to figure out how to obtain the record number out of POSTGIS when Im doing a point query in mapserver. I have successfully been able to get the data out of a xxx.dbf file but not a Postgis table.
=============================================================
Below is my code to show what Im trying to do by getting the data out of a xxx.dbf -shapefile
$x1 = $CursorCoords[0];
$y1 = $CursorCoords[1];
$cx = ($session{WindowXmax}-$session{WindowXmin})/($session{ImageWidth}); # calculate cellsize in x and y
$cy = ($session{WindowYmax}-$session{WindowYmin})/($session{ImageHeight});
$x1 = ($session{WindowXmin} + $cx*$x1); # change x,y from image to map coordinates, offset from UL corner of previous image
$y1 = ($session{WindowYmax} - $cy*$y1);
my $point = new pointObj();
$point->{x} = $x1;
$point->{y} = $y1;
print "**$x1,$y1 ** Point: $point**<BR>\n";
$map->prepareQuery();
$layer = $map->getLayerByName($QueryLayer) or die('Unable to get layer);
#$layer->{$QueryLayer} = $mapscript::MS_ON; # if it's not on already
$rv = $layer->queryByPoint($map,$point, $mapscript::MS_SINGLE,0);
$rv == $mapscript::MS_SUCCESS or die("No items found at the point selected for query type $session{SubOption} ");
#then get your results like:
$layer->open($resultcache);
$resultcache = $layer->{resultcache};
@result= $resultcache->{results};
$result = $layer->getResult(0);
$dbfname = "data/parcels";
$shapefile= new shapefileObj ($dbfname, -1) or die('unable to open shapefile $dbfname');
$shprecnum = $result->{shapeindex};
my $table = new XBase 'data/parcels.dbf';
@querydata = $table->get_record($shprecnum);
print "**Result is: @querydata, $data[1], $data[6] **<BR>\n";
$img = $map->drawQuery();
}
##
## My results in @querydata is an array with each xx.dbf field value in it for the record I queried by the point.
=======================================================================
Now Im trying to do the same thing with POSTGIS with no success.
my $point = new pointObj();
$point->{x} = $x1;
$point->{y} = $y1;
print "**$x1,$y1 ** Point: $point**<BR>\n";
$map->prepareQuery();
$layer = $map->getLayerByName($QueryLayer) or die('Unable to get layer);
#$layer->{$QueryLayer} = $mapscript::MS_ON; # if it's not on already
$rv = $layer->queryByPoint($map,$point, $mapscript::MS_SINGLE,0);
$rv == $mapscript::MS_SUCCESS or die("No items found at the point selected for query type $session{SubOption} ");
#then get your results like:
$layer->open($resultcache);
$resultcache = $layer->{resultcache};
@result= $resultcache->{results};
$result = $layer->getResult(0);
$id=[id];
$tag=[tag];
$SQLcommand=qq(SELECT tag, ncpin, mapsheet, ownername, addr1, addr2, addr3, city, state, zip, book, page, value, acreage, revalue, market FROM jcparcels WHERE tag=$tag);
print "**$SQLcommand**<BR>\n";
$stmt = $dbh->prepare($SQLcommand);
$rc = $stmt->execute();
while (@tname = ($stmt->fetchrow_array())) {
$valuetag=$tname[0];
#print "**$extent**<BR>\n";
}
print "**Result is: $tag, $valuetag, **<BR>\n";
$img = $map->drawQuery();
}
My Results are :
SELECT tag, ncpin, mapsheet, ownername, addr1, addr2, addr3, city, state, zip, book, page, value, acreage, revalue, market FROM jcparcels WHERE tag=ARRAY(0x860cf34)
tag=ARRAY(0x860cf34)
valuetag=
======================================================================
In Perl Mapscript I didnt see any methods like I did for a shapefile to find the record number in a POSGIS table. There are values put in [id] = ARRAY(0x860cfdc) and [tag] = ARRAY(0x860cf34) but I dont know how to write a SQL statement or what method to call to convert [id] to a gid value to select the query record. Can anybody provide code to show me how this is accomplished?
Thanks
Tom Melhuish
--
Tom Melhuish
Consultant
WebInsights
703.255.5127
Email: tmelhuish at webinsights.org
--
More information about the postgis-users
mailing list