[Mapserver-users] Which is better: PHPMapScript query engine or PHP dBase functions?

Eduardo Patto Kanegae eduardo at consultoria.eti.br
Wed May 5 09:38:17 PDT 2004


Thanks for all replies. 

By this time I decided to use the MapScript query engine because of portability: today my geodatabase is ShapeFiles, but tomorrow it could be PostGIS, MyGIS, ... so, I prefered Mapscript because I will be able to write only one code and query routines will be same.

best.

Eduardo Patto Kanegae
http://www.consultoria.eti.br
UIN: 303747254

I Encontro Nacional de Usuários MapServer - http://mapserver.cttmar.univali.br/encontro2004
Projeto MapServer Brasil - http://mapserver.cttmar.univali.br

***Fim da Mensagem / End of Message ***





On Wed, 5 May 2004 09:02:39 -0700, "Ryan, Adam" <ARyan at co.linn.or.us> escreveu:

> De: "Ryan, Adam" <ARyan at co.linn.or.us>
> Data: Wed, 5 May 2004 09:02:39 -0700
> Para: norbert.thieme at ilmenau.baw.de, eduardo at consultoria.eti.br
> Assunto: RE: [Mapserver-users] Which is better: PHPMapScript query engine 	or PHP dBase functions?
> 
> 
> Norbert writes...
> 
> >//this first part is a separate form but it should work also in one
> >
> >$recs = dbase_numrecords($dbi);//opened dbf
> >
> >$q_index_array = array();//save the indexes from the .dbf in this array
> >
> >for ($i = 1; $i < $recs; $i++)
> >{
> >   $s_field = dbase_get_record_with_names($dbi, ($i + 1));
> >
> >   if (!(strpos(strtolower($s_field[$qitem]), strtolower($qstring))) === 
> >false))
> >   {
> >     $q_index_array[] = $i;
> >   }
> >}
> 
> This is too slow and limited.  You should try the ODBC functions in PHP.
> You can run SQL queries on a dbf file by regarding the directory in which
> the file resides as the database.  This gives you all the flexibility of SQL
> statements. 
> 
> >for ($i = 0; $i < count($q_index_array); $i++)
> >{
> >   if (@$map->queryByIndex($qlayer->index, 0, $q_index_array[$i], 
> >MS_FALSE) == MS_SUCCESS)
> >   {
> >     $q_img  = $map->drawquery();
> >     $q_path = $q_img->savewebimage();
> >     echo "<img src=".$q_path.">";
> >   }
> >}
> 
> I'm not sure I get this code.  Seems like your stepping through a list of
> index numbers, setting them with queryByIndex, but then drawing the map
> after every index?  I don't get it.  The map should be drawn after iterating
> through the whole array, no?  
> 
> Anyway, I think the two routines above are flawed in that the index values
> in the shapefile and in the dBase file and not be assumed to be equal.  If
> I'm wrong about this I hope someone will correct me.  They usually are the
> same, but the whole point of the *.shx file is to reconcile differences in
> the indexing.  So you're taking the indexing from the dBase and applying
> this to the shapefile and I think on careful examination on some of larger
> file sets you'll find that what you're displaying textually and graphically
> don't match.
> 
> By the way, I've found that queryByIndex is way too slow.  It works fine for
> a small set of records, but with large selection sets I've found it's too
> slow.  I use save and load query as much as I can.
> 
> Adam
> 
> 
> -----Original Message-----
> From: Norbert Thieme [mailto:norbert.thieme at ilmenau.baw.de] 
> Sent: Tuesday, May 04, 2004 1:20 AM
> To: Ryan, Adam; eduardo at consultoria.eti.br
> Cc: mapserver-users at lists.gis.umn.edu
> Subject: Re: [Mapserver-users] Which is better: PHPMapScript query engine or
> PHP dBase functions?
> 
> 
> Ryan, Adam schrieb:
> > Eduardo,
> > 
> > I might be off track but...
> > 
> > I thought about this myself.  In order to display the result shapes 
> > you need to have a query result either from doing the query in 
> > mapscript or loading a saved query file.  The former defeats the point 
> > of querying the dBase since you're duplicating your steps, and the 
> > later requires you to manually build a query file but you can't do 
> > that unless you can get at the dBase record - shapefile index 
> > relationship which I don't know how to do.
> > 
> > Again, I may be off track, but querying the dBase file may not be 
> > feasible.
> > 
> > Adam
> > 
> > -----Original Message-----
> > From: Eduardo Patto Kanegae [mailto:eduardo at consultoria.eti.br]
> > Sent: Monday, May 03, 2004 11:06 AM
> > To: mapserver-users at lists.gis.umn.edu
> > Subject: [Mapserver-users] Which is better: PHPMapScript query engine or
> PHP
> > dBase functions?
> > 
> > 
> > I have a mapserver+php+mapscript that will query on a shapefile 
> > database on a single layer, through its atributes.
> > 
> > The system will give as result a set of items on a result list as a 
> > first step. Then as a second step a map displaying these results 
> > should be given.
> > 
> > my doubt is: to create this result list which will be best strategy:
> > - use PHPMapScript to query against the mapfile ?
> > or
> > - simply use PHP dBase functions to query against dBase files of the
> > mapfile?
> > 
> > which one is the best/fastest alternative?
> > 
> > best regards.
> > 
> > Eduardo Patto Kanegae
> > http://www.consultoria.eti.br
> > UIN: 303747254
> > 
> > I Encontro Nacional de Usuários MapServer - 
> > http://mapserver.cttmar.univali.br/encontro2004
> > Projeto MapServer Brasil - http://mapserver.cttmar.univali.br
> > 
> > ***Fim da Mensagem / End of Message ***
> > 
> > 
> > 
> > 
> > _______________________________________________
> > Mapserver-users mailing list Mapserver-users at lists.gis.umn.edu
> > http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
> > 
> > _______________________________________________
> > Mapserver-users mailing list Mapserver-users at lists.gis.umn.edu
> > http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
> > 
> > 
> 
> 
> Hi,
> 
> I think you can use both. If you use querybyattributes then you use the 
> ability of the mapserver to search only in your current extent. But you 
> have the problem that the qstring must be exactly the same (case 
> sensitive). If anyone knows a way (without much own code) to search with 
> the mapserver after only parts of words and case ignoring it would be 
> great if he shares it. Because that would work with all kinds of types 
> of data not only for shapes.
> 
> For the other case I use the following code to search the way described 
> above - I cut it a bit:
> 
> //this first part is a seperate form but it should work also in one
> 
> $recs = dbase_numrecords($dbi);//opened dbf
> 
> $q_index_array = array();//save the indexes from the .dbf in this array
> 
> for ($i = 1; $i < $recs; $i++)
> {
>    $s_field = dbase_get_record_with_names($dbi, ($i + 1));
> 
>    if (!(strpos(strtolower($s_field[$qitem]), strtolower($qstring))) === 
> false))
>    {
>      $q_index_array[] = $i;
>    }
> }
> 
> //second part - map
> 
> for ($i = 0; $i < count($q_index_array); $i++)
> {
>    if (@$map->queryByIndex($qlayer->index, 0, $q_index_array[$i], 
> MS_FALSE) == MS_SUCCESS)
>    {
>      $q_img  = $map->drawquery();
>      $q_path = $q_img->savewebimage();
>      echo "<img src=".$q_path.">";
>    }
> }
> 
> Regards,
> Norbert
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
> 
> 
> 



More information about the MapServer-users mailing list