[mapguide-users] Highlight selections problem
Joanne Cook
j.cook at oxfordarch.co.uk
Thu Aug 6 09:19:01 EDT 2009
Dear All,
I have the fairly common problem of wanting to pick a feature from a database and have the map automatically zoom to the correct location and highlight the feature. I am doing this in php and javascript (MGOS 2.1 with bundled apache configuration), following some extremely helpful code snippets I found in the forum. Thanks!
I have now got stuck at the point where a lot of other people seem to get stuck, namely that the map zooms to the correct location and shows in the status bar that one feature is selected, but the feature doesn't show up as highlighted. I understand, from trawling the forum, that I need to save and refresh in order to highlight the feature.
The only problem is that I have tried many combinations of map save and selection save, and have looked in the api documentation, and tried figuring out where in my code it needs to go, and nothing seems to work, and now I'm horribly confused as to which of these I am supposed to be using. Am I saving a selection, or saving a map?
This is the relevant section of php:
$resourceSrvc = $siteConn->CreateService(MgServiceType::ResourceService);
$map = new MgMap();
$resId = new MgResourceIdentifier("Library://maps/map1.MapDefinition");
$mapName = $resId->GetName();
$map->Create($resourceSrvc, $resId, $mapName);
$layers = $map->GetLayers();
$selLayer = $layers->GetItem($SMAlayer);
$featureResourceId = new MgResourceIdentifier($selLayer->GetFeatureSourceId());
$featureClassName = $selLayer->GetFeatureClassName();
$filter = "site_code = '$SMAlocation'";
$queryOptions = new MgFeatureQueryOptions();
$queryOptions->SetFilter($filter);
$featureSrvc = $siteConn->CreateService(MgServiceType::FeatureService);
$featureReader = $featureSrvc->SelectFeatures($featureResourceId, $featureClassName, $queryOptions);
$selection = new MgSelection($map);
$selection->AddFeatures($selLayer, $featureReader, 1);
$selectionXml = $selection->ToXml();
$selection->Save($resourceSrvc, $mapName);
Then this is the javascript
<SCRIPT LANGUAGE="JavaScript">
var initTimer;
function InitDocument()
{
//wait for map to be fully initialized
//then call the initial function
initTimer = setInterval(DelayedInit, 200);
}
function DelayedInit() {
try {
if(parent.ViewerFrame.mapFrame.mapInit) {
clearInterval(initTimer);
parent.ViewerFrame.mapFrame.ZoomToView(<?php echo $centerX; ?>, <?php echo $centerY; ?>, 2000, true);
var selectionXml = '<?php echo $selectionXml; ?>';
parent.ViewerFrame.mapFrame.SetSelectionXML(selectionXml);
parent.ViewerFrame.mapFrame.ExecuteMapAction(1);
parent.ViewerFrame.mapFrame.Refresh();
}
}
catch(e) {}
}
</SCRIPT>
</HEAD>
<BODY onLoad="InitDocument()">
</BODY>
</HTML>
This doesn't work, but doesn't seem to throw up any errors. Any help would be very much appreciated! To reiterate, I have searched the documentation and forums, but remain confused...
Thanks
Jo
--
-----------------------------------------------------
Joanne Cook
Senior IT Support and Development
Oxford Archaeology (North)
01524 880212
http://thehumanjourney.net
------
Files attached to this email may be in ISO 26300 format (OASIS Open Document Format). If you have difficulty opening them, please visit http://iso26300.info for more information.
More information about the mapguide-users
mailing list