|
||||
AW: AW: [maplab-users] maplab/mapserver/PHP-mapscript function to search a objectAndreas Berweger andreas.berweger@bluewin.chTue, 8 Oct 2002 19:10:32 +0200
|
Done!! Thanks Paul!! With one limitation at the moment ... you could only zoom to objects they are in your actually picture ... Here some comments for the list ... $oMapSession->oMap->shapepath works fine when you use relative paths to your data directory. the relativ path starts in your Application directory (for example: ../../Daten/data_ww/) ok and here is our ( Paul's :) Code: /* ============================================================================ * Parzellennummer suchen * ========================================================================= */ if ( $http_form_vars["parcel-number"]) { // the parcel number to query for $szParcelNumber = $http_form_vars["parcel-number"]; // the current extents will be the default if we fail. $oExtents = $oMapSession->oMap->extent; $oldExtents=$oExtents; //first we need a handle on the layer, let's assume that we have //it's name $oParcelLayer = $oMapSession->oMap->getLayerByName( "Parzellen" ); // set up the layer for a query in ms 3.6 - in 3.7 we don't need // to do this, we can just use querybyattribute. Here we assume // that the data file associated with the layer has an attribute // called parcel_number that we are querying. $oParcelLayer->set( "filteritem", "Nummer" ); $oParcelLayer->setFilter("\"$szParcelNumber\""); // use querybyattribute to generate the result, assume a single // one for simplicity but this can be extended to multiple // results easily $oParcelLayer->queryByAttributes( MS_SINGLE ); //now check to see if there are any results? if ($oParcelLayer->getNumResults() > 0 ) { //at least one result, assume only one for this example $oResult = $oParcelLayer->getResult( 0 ); //oResult is a resultCacheMemberObj $oParcelLayer->open($oMapSession->oMap->shapepath); $oShape = $oParcelLayer->getShape( $oResult->tileindex,$oResult->shapeindex ); $oExtents = $oShape->bounds; $oShape->free(); //at this point we might add a buffer to the extents $nXBuffer = ( $oExtents->maxx - $oExtents->minx )*0.05; $nYBuffer = ( $oExtents->maxy - $oExtents->miny )*0.05; $nMinX = $oExtents->minx - $nXBuffer; $nMaxX = $oExtents->maxx + $nXBuffer; $nMinY = $oExtents->miny - $nYBuffer; $nMaxY = $oExtents->maxy + $nYBuffer; $oExtents->setextent( $nMinX, $nMinY, $nMaxX, $nMaxY ); } // now use $oMapNavigator to navigate to the parcel // location. There are two useful options now. We // can zoom to a rectangle which we have calculated or // to a point and scale. Let's assume we have calculated // a rectangle and put a buffer around it if necessary. $breite=$oMapSession->oMap->width; $hoehe=$oMapSession->oMap->height; $px1=$breite/($oldExtents->maxx-$oldExtents->minx)*($oExtents->minx-$oldExte nts->minx); $px2=$breite/($oldExtents->maxx-$oldExtents->minx)*($oExtents->maxx-$oldExte nts->minx); $py1=$hoehe/($oldExtents->maxy-$oldExtents->miny)*($oldExtents->maxy-$oExten ts->maxy); $py2=$hoehe/($oldExtents->maxy-$oldExtents->miny)*($oldExtents->maxy-$oExten ts->miny); $oMapNavigator->zoomRectangle($px1, $py2, $px2, $py1); // alternately if it's a point and a scale ... //$oMapNavigator->zoomScale( 1000, 100, 100 ); } Thanks again Andreas Berweger BHA AG > -----Ursprungliche Nachricht----- > Von: Paul Spencer [mailto:pgs@magma.ca] > Gesendet: Dienstag, 8. Oktober 2002 16:06 > An: Andreas Berweger > Betreff: Re: AW: [maplab-users] maplab/mapserver/PHP-mapscript function > to search a object > > > Andreas, glad I could help. Sorry, I didn't check the code, it was just > a rough example I threw together. I would have been very suprised if it > was right the first time :) If your layer is correctly configured, you > should have been able to access a shape in the layer using > $oLayer->getShape(). You can calculate the path to your layer's data by > getting the shapepath from the map object > ($oMapSession->oMap->shapepath) unless you use absolute paths in the > layer's data attribute. If this doesn't work, try a post on > mapserver-users, I'm sure you'll get lots of help :) > > Cheers, > > Paul > > Andreas Berweger wrote: > > Thanks for your help Paul!! > > It helps a lot and looks very easy/logical. But i have some > Problems with > > accessing Mapinfo/OGR files through the "getshape()" command. I > have used > > your syntax as you described in your mail. it works great. but > when i call > > the "getshape()" command the following php error occurs > > > > > > $oShape = > > $oParcelLayer->getShape($oResult->tileindex,$oResult->shapeindex ); > > > > -> MapServer Error in msOGRLayerNextShape(): Assertion failed: > OGR layer not > > opened!!! > > > > i have read in some posts that i have to open the layer > explicitly before > > using get shape() and close it after. Command: int open(string > shapepath) > > > > http://mapserver.gis.umn.edu/wilma/mapserver-users/0207/msg00542.html > > > > But how to open a OGR layer through php/mapscript? Whats the > shapepath for > > OGR layers ... with $map->shapepath it doesn't work ... > > > > > > Thanks a lot for you help and time paul > > > > > > P.S. i have also changed the foolowing lines because we use mapserver > > version 3.6.2 (3.7.0) > > > > $oParcelLayer->queryByAttribute( MS_SINGLE ); // > > $oParcelLayer->queryByAttributes( MS_SINGLE ) > > > > $oParcelLayer->set( "filteritem", "Nummer" ); // > "filteritem" in small > > cases > > $oParcelLayer->setFilter("\"$szParcelNumber\""); // replaces ( > > $szParcelNumber ) > > > > $oShape = > > $oParcelLayer->getShape($oResult->tileindex,$oResult->shapeindex ); > > //shapeid to shapeindex > > > > > > > >>-----Ursprungliche Nachricht----- > >>Von: maplab-users-admin@dmsolutions.ca > >>[mailto:maplab-users-admin@dmsolutions.ca]Im Auftrag von Paul Spencer > >>Gesendet: Dienstag, 8. Oktober 2002 03:59 > >>An: Andreas Berweger BHA AG; maplab-users; mapserver-users > >>Betreff: Re: [maplab-users] maplab/mapserver/PHP-mapscript function to > >>search a object > >> > >> > >>Andreas, > >> > >>cool app :) I think I can help point you in the right direction. My > >>appologies if there is too much detail here and you have already figured > >>some/all of this out. I am hoping to also help others who may not have > >>tried to customize their gmapfactory application. > >> > >>Let's assume that your application is called MyApp and is in a directory > >>called MyApp under maplab-2.0rc3/projects/gmf_apps/MyApp/. > >> > >>The main user interface file is called MyApp_contents.php. You will add > >>your new input box to this file in the appropriate location. It should > >>be easy to determine where to put it, there are comments ;) > >> > >>The next file of interest is called MyApp.php. This is the main file > >>that does all the work for navigation among other things. In here are a > >>series of if() statements that check for various modes of navigation > >>that the user could have performed. You will add an if() here something > >>like: > >> > >>if ( $http_form_vars["parcel-number"] ) > >>{ > >> // the parcel number to query for > >> $szParcelNumber = $http_form_vars["parcel-number"]; > >> > >> // the current extents will be the default if we fail. > >> $oExtents = $oMapSession->oMap->extents; > >> > >> //first we need a handle on the layer, let's assume that we have > >> //it's name > >> $oParcelLayer = $oMapSession->oMap->getLayerByName( "Parcels" ); > >> > >> // set up the layer for a query in ms 3.6 - in 3.7 we don't need > >> // to do this, we can just use querybyattribute. Here we assume > >> // that the data file associated with the layer has an attribute > >> // called parcel_number that we are querying. > >> $oParcelLayer->set( "FILTERITEM", "parcel_number" ); > >> $oParcelLayer->setFilter( $szParcelNumber ); > >> > >> // use querybyattribute to generate the result, assume a single > >> // one for simplicity but this can be extended to multiple > >> // results easily > >> $oParcelLayer->queryByAttribute( MS_SINGLE ); > >> > >> //now check to see if there are any results? > >> if ($oParcelLayer->getNumResults() > 0 ) > >> { > >> //at least one result, assume only one for this example > >> $oResult = $oParcelLayer->getResult( 0 ); > >> //oResult is a resultCacheMemberObj > >> $oShape = $oParcelLayer->getShape( $oResult->tileindex, > >> $oResult->shapeid ); > >> $oExtents = $oShape->bounds; > >> $oShape->free(); > >> > >> //at this point we might add a buffer to the extents > >> $nXBuffer = ( $oExtents->maxx - $oExtents->minx )*0.05; > >> $nYBuffer = ( $oExtents->maxy - $oExtents->miny )*0.05; > >> $nMinX = $oExtents->minx - $nXBuffer; > >> $nMaxX = $oExtents->maxx + $nXBuffer; > >> $nMinY = $oExtents->miny - $nYBuffer; > >> $nMaxY = $oExtents->maxy + $nYBuffer; > >> $oExtents->setExtents( $nMinX, $nMinY, $nMaxX, $nMaxY ); > >> } > >> > >> // now use $oMapNavigator to navigate to the parcel > >> // location. There are two useful options now. We > >> // can zoom to a rectangle which we have calculated or > >> // to a point and scale. Let's assume we have calculated > >> // a rectangle and put a buffer around it if necessary. > >> $oMapNavigator->zoomRectangle($oExtents->minx, $oExtents->miny, > >> $oExtents->maxx, $oExtents->maxy); > >> > >> // alternately if it's a point and a scale ... > >> // $oMapNavigator->zoomScale( $nScale, $nX, $nY ); > >>} > >> > >>The $oMapSession and $oMapNavigator are MapScript wrapper objects that > >>we created to make working with a map object simpler for us, they can be > >>found in the wrapper directory of your app. The documentation for > >>MapScript itself can be found at: > >> > >>http://www2.dmsolutions.ca/mapserver/php_mapscript/php_mapscript_d > >>ocs36.html. > >> > >>Daniel has also mentioned that you should get the old GMap demo and look > >>for GMapDumpQueryResults() for some related ideas to working with > >>queries. You should find it at > >>http://www2.dmsolutions.ca/mapserver/dl/gmap-ms36.zip > >> > >>For questions like this, you may get faster response by posting to the > >>mapserver-users mailing list, its very active and responsive ;) > >> > >>Cheers, > >> > >>Paul > >> > >> > >>Andreas Berweger BHA AG wrote: > >> > >>>Hello together > >>> > >>>For first excuse my english. i'm from switzerland and im speaking a bad > >>>english but well german. > >>>im working on a project for little communes and there internet-maping. > >>> > >>>- i'm using maplab v2.0-rc3, mapserver 3.6.2 with OGR support > >> > >>and PHP 4.2.2 > >> > >>>on windows > >>>- my data commes from mapinfo Ver 6.0 and im using the tab > >> > >>files with OGR > >> > >>>first i have to say that maplab and mapserver are working very > >> > >>fine on my > >> > >>>system. maplab is easy to use and understand. The application > >> > >>i've made is > >> > >>>temporaly browsable at > >>> > >>> > >> > >>http://193.246.110.38/mappub/GIS/BHA_apps/GIS_warth-weiningen/GIS_ > > > > warth-wein > > > >>ingen.phtml > >> > >>now my question: > >> > >>I have to made a textbox at the bottom of the legend. The user > could input > > > > a > > > >>parcell-number and klick on search. now (i hope it would be possible) > >>mapserver/maplab had to search for this parcell in the Layer > >>"Liegenschaften"(=parcells in german) and zoom on it. Thats all :) > >>"liegenschaften" is a polygon layer with the attributes > parcell-number and > >>area from mapinfo/OGR. You see im not so familar with PHP and mapscript. > >> > >>I hope you could help me an give me some hints. when i have forgotten > >>something or you need data to help me i could give you ... > >> > >>Thanks a lot and good night > >> > >> > >> > >> > >>_______________________________________________ > >>Maplab-users mailing list > >>Maplab-users@dmsolutions.ca > >>http://lists.dmsolutions.ca/mailman/listinfo/maplab-users > >> > > > > > > > > -- > > Paul Spencer > > Applications and Software Development > > DM Solutions Group > > > > > > _______________________________________________ > > Maplab-users mailing list > > Maplab-users@dmsolutions.ca > > http://lists.dmsolutions.ca/mailman/listinfo/maplab-users > > > > > > > -- > Paul Spencer > Applications and Software Development > DM Solutions Group > >
This archive was generated by Pipermail. |
MapTools.org -- Hosted by DM Solutions Group |