![]() |
||||
|
|
||||
[Chameleon] Item QueryPaul Spencer spencer@dmsolutions.caWed, 28 Jan 2004 08:32:14 -0500
|
||||
Rene,
unfortunately, the documentation for chameleon is still woefully
incomplete but I am working on that and hope to have a decent widget
developers guide roughed in for the next release ... which will be
coming out in a month or two.
Cheers,
Paul
Rene Teniere wrote:
> Wow, that's exactly it. I appreciate the work you put in. The guys and I
> here at work are still trying to wrap our heads around the architecture
> of Chameleon. We've been looking up the PHP MapScript documentation to
> get an idea as to variables that need to be passed to specific
> functions. Can you tell me about other resources/web sites that you guys
> have at DM Solutions or wherever that could make out lives easier for
> programming new widgets, as opposed to bugging the user's list?
>
> Thanks,
>
> RT
>
>
>>>>pagameba@magma.ca 2004-01-27 11:37:07 PM >>>
>
> Rene, it is indeed possible but I am not entirely sure that I
> understand
> exactly what you are trying to accomplish and what your inputs are.
> Let
> me try to outline what I think you are trying to do and how to solve
> the
> issue:
>
> Requirements:
>
> * you have a shapefile consisting of polygons that define the extents
> of
> provincial map sheets
> * you want the user to be able to enter a mapsheet number and be zoomed
>
> to that mapsheet's extents
>
> Unknowns:
>
> * is the shapefile included in your application? Assume no.
>
> Approach:
>
> * using a copy of the LocateWidget with all inputs removed except NTS
> MapSheet, and added a Provincial Map Sheet
>
> You need to locate the code that decides what the user wants to lookup,
>
> and supply some code to do your lookup. This is some code that looks
> roughly right, but I haven't tested it and I don't guarantee that it is
>
> without typos or erroneous function names, but I think you will get the
>
> idea.
> <?php
> dl( 'php_dbf.dll' );
> $hDB = dbase_open( 'path-to-shapefile.dbf' );
> $nRecs = dbase_numrecords( $hDB );
> $nIndex = -1; //-1 means not found
> for ($i=0; $i<$nRecs; $i++)
> {
> $aRec = dbase_get_record_with_names( $hDB, $i );
> if (strcasecmp( $aRec['fieldname'], $szUserInput ) == 0)
> {
> //found a match
> $nIndex = $i;
> break;
> }
> }
> dbase_close( $hDB );
>
> if ($nIndex >= 0)
> {
> //open shapefile using mapscript
> $oShapeFile = ms_newShapeFileObj( 'path-to-shapefile.shp',
> MS_SHP_POLYGON );
> if ($oShapeFile->numshapes < $nIndex )
> {
> //oops, not enough shapes, error
> }
> else
> {
> //get the bounding box of the shape in a RectObj
> $oRect = $oShape->getExtent( $nIndex );
> $oMap->setextent( $oRect->minx, $oRect->miny, $oRect->maxx,
> $oRect->maxy );
> }
> }
> else
> {
> //report no records
> }
> $oShapeFile->free();
> ?>
>
> Rene Teniere wrote:
>
>
>>Hi Paul,
>>
>>That's very similar to what I started off with (only I used the
>>LocateWidget and got rid of all the inputs except NTS Map Sheet, and
>>added my own - Provincial Map Sheet). The problem comes in that there
>
> is
>
>>a polygon index covering the whole province containing cells
>>representing specific mapsheets. I have to be able to get chameleon
>
> to
>
>>find the mapsheet number within the index shapefile (the MAPSHEET
>
> item
>
>>in the index's table) using the user inputted text (essentially an
>
> item
>
>>query), then once I have the map object's extents returned, I would
>
> use
>
>>the setextent object to see it. Is this at all possible? If I
>>misunderstood you, I apologize, however, I don't think I exactly
>>explained the situation properly.
>>
>>Thanks,
>>
>>Rene
>>
>>
>>
>>
>>
>>>>>pagameba@magma.ca 2004-01-27 2:36:20 PM >>>
>>
>>Rene,
>>
>>to do this in Chameleon, you create a new widget from one of the
>>existing ones that does something similar. For instance, the Scale
>>widget does something similar (it uses an input box to allow the
>
> user
>
>>to
>>type in a new scale value and then zooms to that scale. You would
>
> make
>
>>a copy of this widget and rename stuff appropriately.
>>
>>Your main work would go in the ParseURL function which is where you
>>will
>>get the FORM variables that were submitted (Scale is a good example
>
> of
>
>>this) and do something with them. In your case, you would use the
>>input
>>value to lookup the bounding box of a Map sheet and then apply those
>
>
>>extents to the map object using something like
>>$this->moMapSession->oMap->setextent( $nMinX, $nMinY, $nMaxX, $nMaxY
>>);
>>
>>That's pretty much it. Note that the Scale widget is just a
>
> container
>
>>for the value, you use an UpdateMap widget to actually submit the
>>page.
>>
>>Cheers,
>>
>>Paul
>>
>>Rene Teniere wrote:
>>
>>
>>
>>>Hi All,
>>>
>>>Been sitting down here with the office MapServer programmer, looking
>>
>>to
>>
>>
>>>create an Item Query. This goes back to the message I left yesterday
>>
>>on
>>
>>
>>>having an input box for the user to input a mapsheet number and
>>
>>return
>>
>>
>>>the result on the map display. In MapServer, you would just set the
>>>variables and send them to MapServer for processing. The question is
>>
>>how
>>
>>
>>>is this achieved through Chameleon? In fact, how does it talk to
>>>mapserver? All we need to do is be able to figure out what variables
>>
>>to
>>
>>
>>>set, and where to send them.
>>>
>>>Example: In the bounding box widget, you set the user-defined
>>
>>bounding
>>
>>
>>>coordinates to the variables and them pass them
>>>on:window.opener.applyBoundingBox( nMinX, nMinY, nMaxX, nMaxY );
>>>
>>>Is there anything that can help me out on figuring this stuff out?
>>
>>What
>>
>>
>>>about the utils in htdocs_admin?
>>>
>>>Any help would be greatly appreciated
>>>Rene
>>>
>>>Rene J.R. Teniere - BSc., D.GIS
>>>GIS Technician
>>>Nova Scotia Department of Natural Resources
>>>Forestry Division (GIS) - Truro
>>>
>>>Phone: (902) 893-5655
>>>Mobile: (902) 209-8956
>>>_______________________________________________
>>>Chameleon mailing list
>>>Chameleon@lists.maptools.org
>>>http://lists.maptools.org/mailman/listinfo/chameleon
>>>
>>
>>
>
--
-----------------------------------------------------------------
|Paul Spencer spencer@dmsolutions.ca |
|-----------------------------------------------------------------|
|Applications & Software Development |
|DM Solutions Group Inc http://www.dmsolutions.ca/|
-----------------------------------------------------------------
This archive was generated by Pipermail. |
MapTools.org -- Hosted by DM Solutions Group |