[mapserver-users] Create Dynamic Pt Layer, then queryByPoint()

E Perik erwin at perik.nu
Sun Mar 3 08:14:47 EST 2002


Hi Dan,

Could you not create a new-shapefile of your points and then add this
'name' in the Map-layer. Then add the new-shapefile to the map through a
dummy-layer.

I used similar to retrieve a shape-object from an existing shapefile and
then:

1) Get shapeobject from existing-shapefile (through its index)
2) Put it in new-shapefile
3) Create dbf-file with name of new-shapefile
4) Clear new-shapefile
5) Add new-layer to map-object (default of this layer is set to OFF)
6) Show new-layer
7) Draw the map (now includes newly created shapefile ;-) )

In part 1) yours would differ. Her you create the shape-object (points)
from the SQL-database. Part 3) is needed, because mapscript does not
make a dbf-file.


Erwin


-----Original Message-----
From: owner-mapserver-users at lists.gis.umn.edu
[mailto:owner-mapserver-users at lists.gis.umn.edu] On Behalf Of Dan Barron
Sent: Friday, March 01, 2002 11:59 PM
To: Stephen Woodbridge
Cc: mapserver-users at lists.gis.umn.edu
Subject: Re: [mapserver-users] Create Dynamic Pt Layer, then
queryByPoint()

 >At 05:33 PM 3/1/2002 -0500, Stephen Woodbridge wrote:
 >The LAYER must have TEMPLATE defined or it will NOT be queried so make
 >sure you have that set.
 >
 >-Steve

Thanks for the reply Steve.  Query still does not find any points.  I
have 
modified my map file per your suggestion, see below.  Is there some
special 
way I need to create the layer?  Or does the template need to call out 
anything specific or could is just print "Hello world" if you wanted? I 
have also included my php code that queries the database and builds the
layer.

Dan

<< map file snip >>
------------------

LAYER
   NAME 'point-test'
   TYPE POINT
   STATUS OFF

   CLASS
           name 'point-test'
     SYMBOL 'c:\bin\mapserver\mapservertest\graphics\novice-icon.png'
   #  template 'point-test-template.html'
   END
   template "point-test-template.html"
   tolerance 10
END

<< php file snip >>
--------------------

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~
// Connect to mySQL database, print a successful or unsuccessful
message, then
// select the database to use.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~
$link = mysql_connect($host, $user, $pwd) or die("Could not connect");
print "Connected to mysql  successfully<br>";
mysql_select_db($dbase) or die("Could not select database");

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~
// Set query strings, then perform query
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~
$query_select = "SELECT * FROM ".$table;
$query_where[0] = " WHERE latitude < ".$map->extent->maxy;
$query_where[1] = " AND latitude > ".$map->extent->miny;
$query_where[2] = " AND longitude < ".$map->extent->maxx;
$query_where[3] = " AND longitude > ".$map->extent->minx;

$result = 
mysql_query($query_select.$query_where[0].$query_where[1].$query_where[2
].$query_where[3])
     or die("Query failed");

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~
// Loop through result of point query and:
//   1) create pointObj's to hold results of mySQL query
//   2) create lineObj's made of pointObj's values - use these for
shapeObj's
//   3) create shape objects to hold additional fields, specifically
siteid
//   4) draw the point and shape object on the map and layer
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~

$factor = 0.5;

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

                 // create point objects
            $pt = ms_newPointObj();
                 $pt->setXY( $line["longitude"], $line["latitude"] );

            // create line objects
                 $ln[0] = ms_newLineObj();
                 $ln[1] = ms_newLineObj();
                 $ln[2] = ms_newLineObj();
                 $ln[3] = ms_newLineObj();

                 $ln[0]->addXY( ($pt->x - $factor), ($pt->y - $factor)
);
                 $ln[0]->addXY( ($pt->x + $factor), ($pt->y - $factor)
);
                 $ln[1]->addXY( ($pt->x + $factor), ($pt->y - $factor)
);
                 $ln[1]->addXY( ($pt->x + $factor), ($pt->y + $factor)
);
                 $ln[2]->addXY( ($pt->x + $factor), ($pt->y + $factor)
);
                 $ln[2]->addXY( ($pt->x - $factor), ($pt->y + $factor)
);
                 $ln[3]->addXY( ($pt->x - $factor), ($pt->y + $factor)
);
                 $ln[3]->addXY( ($pt->x - $factor), ($pt->y - $factor)
);

            // create shape objects
                 $shp = ms_newShapeObj(MS_SHAPE_POLYGON);
                 $shp->add( $ln[0] );
                 $shp->add( $ln[1] );
                 $shp->add( $ln[2] );
                 $shp->add( $ln[3] );
                 $shp->set('text', $line['siteid']);

            // draw objects on layers
                 $shp->draw($map, $shape_layer, $image, 0, "SHAEP");
                 $pt->draw($map, $pt_layer, $image, 0, "TEST");

}

// Closing connection
mysql_close($link);




More information about the mapserver-users mailing list