[ka-Map-users] Searching using kaMap

Paul Spencer pspencer at dmsolutions.ca
Fri Apr 21 09:29:30 EDT 2006


Thanks, Pēteris, I've added this to the wiki.

Cheers

Paul

On 21-Apr-06, at 9:09 AM, Pēteris Brūns wrote:

> Here is simple serch code for ka-map!
>
>
> <?
> include_once( '../include/config.php' );
>
> if (!extension_loaded('MapScript'))
> {
>     dl( $szPHPMapScriptModule );
> }
>
> $results = array();
> $oMap = ms_newMapObj($szMapFile);
> //$map=$oMap; //jus for test
> $aLayers = $oMap->getAllLayerNames(); //get all layers in map file
> $tot = $oMap->numlayers; // total layers-count
> //-------------------------------------------------------------------- 
> ----------
>
>     foreach($aLayers AS $layer) {
>
>         $oLayer = $oMap->getLayerByName($layer);
>
> /* detect if group should be searchable  In yor mapfile sercahable  
> layer will be detected just like "queryable" "true" but her use  
> "searchfield" "field_name"*/
>         $szSearchfield = $oLayer->getMetaData('searchfield');
>         if ($oLayer->getMetaData( "searchfield" ) != "") {
>               $szSearchfield = $szSearchfield;
>             //----------------------------------------------------
> //postgis connect (NOT TESTED IF is possible to test it culd be  
> nice to know works it or not)
>             if($oLayer->connectiontype == MS_POSTGIS){
>                 $searchstring = $szSearchfield . ' ~* \'' .  
> $searchstring .'\'  ';
>               } else {  // Shapefile
>                 $numclasses = $oLayer->numclasses;
>                 for($i = 1 ; $i < $numclasses; $i++){
>                 }
>                 // Second HACK: it work
>                 if($numclasses > 1){
>                   $class = $oLayer->getClass(0);
>                   // Match all
>                   $class->setExpression('/.*/');
>                 }
>               }
>              
> #--------------------------------------------------------------------- 
> -------------------------
>               if(@$oLayer->queryByAttributes($szSearchfield,  
> $searchstring, MS_MULTIPLE) == MS_SUCCESS ){ //MS_SUCCESS
>                 $oLayer->open();
>                 // Add element to results array for each result row
>                 for ($j=0; $j < $oLayer->getNumResults(); $j++)
>                 {
>                     // get next shape row
>                     $result = $oLayer->getResult($j);
>                     $shape  = $oLayer->getShape($result->tileindex,  
> $result->shapeindex);
>                     //var_dump($shape);
>                     // push the row array onto the results array
>                     $aTmp = $shape->values;
>                     //Calculate centroid
>                     $x_c = ($shape->bounds->minx + $shape->bounds- 
> >maxx) / 2; //get x average value
>                     $y_c = ($shape->bounds->miny + $shape->bounds- 
> >maxy) / 2; //get y average value
>                     //$aTmp = array_merge( $aTmp ,  array('x' =>  
> $x,'y' => $y, 'id' => $result->shapeindex));
>                     $xmin = $shape->bounds->minx;
>                       $xmax = $shape->bounds->maxx;
>                     $ymin = $shape->bounds->miny;
>                       $ymax = $shape->bounds->maxy;
>                     $aTmp = array_merge( $aTmp ,  array('xmin' =>  
> $xmin,'xmax' => $xmin,'ymin' => $ymin,'ymax' => $ymax,'x_c'=> 
> $x_c,'y_c'=>$y_c, 'id' => $result->shapeindex));
>                     $results[$layername][] =  $aTmp;
>                 // end for loop
>               }
>               //echo implode
>               printer($results,$szSearchfield,$layer); //printing
>               }
>               else{
>                 print('No results returned!<br> Searched string:' .  
> "\n" . $searchstring);
>               }
>               $oLayer->close();
>             //----------------------------------------------------
>
>             $results=flush($results);
>         }
>         else{
>         $szSearchfield = "Not defined searchfield";
>         }
>  }
>
> function search($szSearchfield,$searchstring){
> //----------------------------------------------------
>
> }
> //-------------------------------------create print  
> -----------------------------
> function printer($results,$szSearchfield,$layer){
> foreach($results as $key_val => $value) {
>     echo "<br>Returned results for layer:<b>".$layer."</b><br>"; //  
> top for each layer
>   foreach($value as $key_val => $v) {
>   $m = iconv("latin1", "UTF-8", $v[strtoupper($szSearchfield)]);
>   $field=$v[strtoupper($szSearchfield)];
> //In $m place you can use $v[strtoupper($szSearchfield)] this is  
> used for iconv etc..
>   print "<a href=# onClick=\"myKaMap.zoomToExtents(".$v["xmin"].",". 
> $v["ymin"].",".$v["xmax"].",".$v["ymax"].")\" onMouseOver=\"  
> toolTip.moveGeo(".$v["x_c"].",".$v["y_c"]."), toolTip.setText('". 
> $m."')\" onMouseOut=\"toolTip.move()\">".$m."</a><br>\n";
> }
> }
> }
> ?>
>
>
> links to working examples:
> http://85.234.167.38/js/ka-map/htdocs/index_tooltip_search.html
> and http://85.234.167.38/js/ka-map/htdocs/index_search.html
>
> On 4/21/06, Paul Spencer <pspencer at dmsolutions.ca > wrote:Ramesh,
>
> the bounds of the shape should be a RectObj.  This means you can use
> the project() function to reproject it.
>
> see: http://mapserver.gis.umn.edu/docs/reference/phpmapscript-class/
> classes/rectobj
>
> You would need to do something like:
>
> $shp->bounds->project($oLayer->getProjection(),$oMap->getProjection 
> ());
>
> I'm not sure if you can actually do this to a rectObj that is part of
> a shape.  To be safe, you can do this:
>
> $rect = ms_newRectObj();
> $rect->setExtent($shp->bounds->minx,$shp->bounds->miny,$shp->bounds-
> >maxx,$shp->bounds->maxy);
>
> $rect->project($oLayer->getProjection(),$oMap->getProjection());
>
> Cheers
>
> Paul
>
> On 20-Apr-06, at 10:36 PM, ramesh karra wrote:
>
> > Hi paul,
> >
> > Hope it is OK to send  this mail directly to you. If
> > not, let me know, I will send this to mapservers list.
> >
> > I made some progress in writing in the php script to
> > retrieve data from the dbf file. The data in the dbf
> > file is in lat+long projection and I am different
> > output projection to display the lines/points
> > correctly. How do I get the data retrieved from the
> > dbf file converted to  my output projection?
> >
> >    $oMap = ms_newMapObj($szMapFile);
> >
> >
> >    $oLayer = $oMap->getLayerByName("mylayer");
> >    $oLayer->queryByAttributes("Name", "xxxx",
> > MS_SINGLE);
> >
> >    if ($oLayer->getNumResults() > 0) {
> >       $r = $oLayer->getResult(0);
> >       $oLayer->open();
> >       $shp = $oLayer->getShape($r->tileindex,
> > $r->shapeindex);
> >       $ext = $shp->bounds;
> >       $shp->free();
> >       $oLayer->close();
> >
> >       print $ext->minx;
> >    }
> >
> > Basically, the above script works and prints the value
> > but it is in lat+long projection (like 71.231789), I
> > need to convert this to my output projection. I am
> > hoping that there some function to do this because
> > mapserver is already doing it while displaying my map.
> >
> > Thanks
> > Ramesh
> >
> >
> > --- Paul Spencer <pspencer at dmsolutions.ca> wrote:
> >
> >> Ramesh, there are soooo many!  I don't even know
> >> where to start.  Try
> >> googling php ajax and see what you get :)
> >>
> >> Cheers
> >>
> >> Paul
> >>
> >> On 13-Apr-06, at 7:00 PM, ramesh karra wrote:
> >>
> >>> Thanks for the quick reply paul!
> >>>
> >>> I am relatively new to both PHP and AJAX. To
> >> achieve
> >>> what you suggested, could you also suggest some
> >> online
> >>> tutorial/examples or books?
> >>>
> >>> Thanks again,
> >>> Ramesh
> >>>
> >>> --- Paul Spencer < pspencer at dmsolutions.ca> wrote:
> >>>
> >>>> Ramesh,
> >>>>
> >>>> I would write a small php script to do the
> >>>> interaction with the dbf
> >>>> file and call it from my page using ajax.
> >> Actually,
> >>>> I'd use postgis
> >>>> but that's another discussion ;)
> >>>>
> >>>> Cheers
> >>>>
> >>>> Paul
> >>>>
> >>>> On 13-Apr-06, at 6:47 PM, ramesh karra wrote:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> I have 100s of points in shapefiles(.shp,.shx
> >> and
> >>>>> .dbf).
> >>>>> that I use with my maps to show a place and
> >> label
> >>>> it.
> >>>>> Is it possible to access the .dbf file in kaMap?
> >>>>> I would like to implement a feature to search
> >> for
> >>>> a
> >>>>> point and when a point of interest is found,
> >> zoom
> >>>> to
> >>>>> that place. Is it possible to do this in kaMap
> >>>> without
> >>>>> having to create an XML file from .dbf file?
> >>>>>
> >>>>> Thanks
> >>>>> Ramesh
> >>>>>
> >>>>>
> >> __________________________________________________
> >>>>> Do You Yahoo!?
> >>>>> Tired of spam?  Yahoo! Mail has the best spam
> >>>> protection around
> >>>>> http://mail.yahoo.com
> >>>>> _______________________________________________
> >>>>> ka-Map-users mailing list
> >>>>> ka-Map-users at lists.maptools.org
> >>>>>
> >>>>
> >>>
> >>
> > http://lists.maptools.org/mailman/listinfo/ka-map-users
> >>>>
> >>>>
> >>>
> >>
> > +-----------------------------------------------------------------+
> >>>> |Paul Spencer
> >>>> pspencer at dmsolutions.ca   |
> >>>>
> >>>
> >>
> > +-----------------------------------------------------------------+
> >>>> |Applications & Software Development
> >>>>              |
> >>>> |DM Solutions Group Inc
> >>>> http://www.dmsolutions.ca/|
> >>>>
> >>>
> >>
> > +-----------------------------------------------------------------+
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>> __________________________________________________
> >>> Do You Yahoo!?
> >>> Tired of spam?  Yahoo! Mail has the best spam
> >> protection around
> >>> http://mail.yahoo.com
> >>
> >>
> > +-----------------------------------------------------------------+
> >> |Paul Spencer
> >> pspencer at dmsolutions.ca   |
> >>
> > +-----------------------------------------------------------------+
> >> |Applications & Software Development
> >>              |
> >> |DM Solutions Group Inc
> >> http://www.dmsolutions.ca/|
> >>
> > +-----------------------------------------------------------------+
> >>
> >>
> >>
> >>
> >>
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam?  Yahoo! Mail has the best spam protection around
> > http://mail.yahoo.com
>
> +-----------------------------------------------------------------+
> |Paul Spencer                           pspencer at dmsolutions.ca   |
> +-----------------------------------------------------------------+
> |Applications & Software Development                              |
> |DM Solutions Group Inc                 http://www.dmsolutions.ca/|
> +-----------------------------------------------------------------+
>
>
>
>
> _______________________________________________
> ka-Map-users mailing list
> ka-Map-users at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/ka-map-users
>
>
>
> -- 
> pb
> _______________________________________________
> ka-Map-users mailing list
> ka-Map-users at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/ka-map-users

+-----------------------------------------------------------------+
|Paul Spencer                           pspencer at dmsolutions.ca   |
+-----------------------------------------------------------------+
|Applications & Software Development                              |
|DM Solutions Group Inc                 http://www.dmsolutions.ca/|
+-----------------------------------------------------------------+







More information about the ka-Map-users mailing list