[Chameleon] js api: run query
Bart van den Eijnden
BEN at Syncera-ITSolutions.NL
Fri May 27 04:58:16 EDT 2005
Hi list,
I have managed to get this running, so I thought I'd share my solution. My approach needed changes to UpdateMap.php only. Paul/Julien, are there plans for adding query highlight functionality to UpdateMap.php? Would you guys be interested in getting this in the Chameleon distro?
My approach does have an assumption: all layers which need to be query-highlighted need to have a FILTERITEM defined (using an empty FILTER "" in order to get everything rendered). I like this approach better than a client having to send the name of a column to the server.
When a node from the treeview is clicked, I run the following javascript (this is now part of my custom js file included in my app, but could become part of cwcjsapi.js in the future) :
function CWCRunQuery(layername, filter)
{
CWCDHTML_ShowLayer("ActivityLayer");
aHiddenVars = new Array(3);
aHiddenVars[0] = new Array(2);
aHiddenVars[0][0] = "LAYER_RUN_QUERY";
aHiddenVars[0][1] = "1";
aHiddenVars[1] = new Array(2);
aHiddenVars[1][0] = "LAYER_NAME";
aHiddenVars[1][1] = layername;
aHiddenVars[2] = new Array(2);
aHiddenVars[2][0] = "LAYER_FILTER";
aHiddenVars[2][1] = filter;
// we need to update the map as well
goCWCJSAPI.CallServer("goCWCJSAPI.MapExtentsUpdated()", aHiddenVars);
return true;
}
The changes I did to UpdateMap.php are (adding a selection layer dynamically which is a copy of the layer which needs to be query-highlighted, and setting the color to a selection color):
if (isset( $HTTP_FORM_VARS["LAYER_RUN_QUERY"]) &&
$HTTP_FORM_VARS["LAYER_RUN_QUERY"] != "")
{
$oMap = $oMapSession->oMap;
// if selection layer exists, delete it first
for ( $i=0; $i<$oMap->numlayers; $i++ )
{
$oTempLayer = $oMap->getlayer($i);
if ( $oTempLayer->name == 'StraGISWebSelection' )
{
$oTempLayer->set( 'status', MS_DELETE );
break;
}
}
$szLayerName = "";
if (isset($HTTP_FORM_VARS["LAYER_NAME"]))
$szLayerName = $HTTP_FORM_VARS["LAYER_NAME"];
$szFilter = "";
if (isset($HTTP_FORM_VARS["LAYER_FILTER"]))
$szFilter = $HTTP_FORM_VARS["LAYER_FILTER"];
for ($i=0; $i<$oMap->numlayers; $i++)
{
$oLayer = $oMapSession->oMap->GetLayer($i);
if ($oLayer->name == $szLayerName)
{
// copy layer
$oSelectionLayer = ms_newLayerObj( $oMap, $oLayer );
$oSelectionLayer->set( 'name', 'StraGISWebSelection' );
$oSelectionLayer->set( 'template', '' );
$oSelectionLayer->setFilter($szFilter);
// set color to selection color
for( $j=0; $j < $oSelectionLayer->numclasses; $j++)
{
$oClass = $oSelectionLayer->getClass($j);
for ($k=0;$k<$oClass->numstyles;$k++)
{
$oStyle = $oClass->getStyle($k);
$oStyle->color->setRGB( 255,255,0 );
}
}
$oSelectionLayer->set( 'status', MS_ON );
}
}
$_SESSION["gszCurrentState"] = $oMapSession->saveState();
}
Best regards,
Bart
Bart van den Eijnden
Syncera-ITSolutions
Postbus 270
2600 AG DELFT
tel.nr.: 015-7512436
email: BEN at Syncera-ITSolutions.nl
>>> "Bart van den Eijnden" <BEN at syncera-itsolutions.nl> 05/17/05 04:41pm >>>
Hi list,
I am faced with the following problem:
I have a treeview next to my MapDHTML. When a node in the treeview is clicked, I need to highlight the item in the map. I do know how to do this with PHP/Mapscript (savequery etc.), but I don't know how to do this from the js api mode.
I can't see any place in the JS API to pass a query and request for an updated map.
Would this require changes to the UpdateMap.php file as well as the cwcjsapi.js file? Or am I missing something? What would be the best approach for this?
Best regards,
Bart
Bart van den Eijnden
Syncera-ITSolutions
Postbus 270
2600 AG DELFT
tel.nr.: 015-7512436
email: BEN at Syncera-ITSolutions.nl
_______________________________________________
Chameleon mailing list
Chameleon at lists.maptools.org
http://lists.maptools.org/mailman/listinfo/chameleon
More information about the Chameleon
mailing list