[mapguide-internals] Problem with programatic changes of layers

Jonathon McIntyre johnniegis at gmail.com
Wed Jun 2 00:57:45 EDT 2010


Based on what I understand you to be saying, the code you included and the
work I have done with MG, it appears that you are missing a ForceRefresh()
function after the following section:

 $newLayer = new MgLayer($sessResId,$resourceService);
 $newLayer->SetName($layerName);
 $newLayer->SetVisible(true);
 $newLayer->SetLegendLabel($layerName);
 $newLayer->SetDisplayInLegend(false);

However, I am not an expert coder so hopefully someone else will speak up if
this is not the case.

Regards,
Jonathon

On Tue, Jun 1, 2010 at 9:20 PM, VOLZ Mark (FN) <Mark.Volz at ergon.com.au>wrote:

> Folks,
>
> I'm using the MGE 2010 (using a basic web layout) and I am having some
> problems when I modifiy a layer via a piece of php (and I'm not getting
> much joy from ADSK).
>
> The scenerio;
>
> 1) From another app the user launches a mapguide session via a url call
> which contains a unique id for the particualar piece of plant they wish
> to view i.e.
> http://<server_name>/mapguide2010/feederstat/navnet-switchzone.php?Paren
> tId=60005615
> 2) The navnet-switchzone.php creates and logs into a mapguide session.
> 3) This page then calls another page passing the ParentID, session id, &
> mapname variables.
> 4) The second page has 2 functions firstly to set a layer filter and
> secondly to make that layer invisible in the layer legend.
> 5) The first page then zooms to the extents as calculated via an mbr
> query on Oracle spatial.
>
> Simple enough.
>
> My problem is the second action of the second php page i.e. setting the
> layer to invisible in the layer legend. It does do it after the user
> performs a zoom or pan command but it is in the layer legend when the
> page first loads which I don't want.
>
> Things I have tried;
>
> 1) Adding the layer to the library map with the filter set to -1 and
> turning off the layer legend visiblity. - no luck
> 2) doing a second zoom when the page is first loaded i.e. log into the
> seession zoom to a scale of (truescale * 1.1) modify the layer then zoom
> to true scale. - no luck
>
> Any ideas?
>
> Below is the code i am using to modify the layer.
>
> Any help would be greatly appreciated.
>
> Mark
>
> // change  HV_isol_dev_parent layer
>  $resId = new
> MgResourceIdentifier('Library://FeederStat/Layers/HV_isol_dev_parent.Lay
> erDefinition');
>  $byteReader = $resourceService->GetResourceContent($resId);
>  $layerXML = $byteReader->ToString();
>  $doc = DOMDocument::loadXML($layerXML);
>  $GridNode = $doc->getElementsByTagName('GridLayerDefinitionType');
>  $FilterNode = $doc->getElementsByTagName('Filter');
>  $FilterNode->item(0)->nodeValue = "ECORP_ASSET_ID = ".$parentId;
>
>  $LayerDefinition = $doc->saveXML();
>  $byteSource = new MgByteSource($LayerDefinition,
> strlen($LayerDefinition));
>  $byteSource->SetMimeType(MgMimeType::Xml);
>
>  $layerName="HV_isol_dev_parent";
>  $sessionLayer =
> "Session:".$sessionId."//".$layerName.".LayerDefinition";
>  $sessResId = new  MgResourceIdentifier($sessionLayer);
>  $resourceService->SetResource($sessResId, $byteSource->GetReader(),
> null);
>
>  $newLayer = new MgLayer($sessResId,$resourceService);
>  $newLayer->SetName($layerName);
>  $newLayer->SetVisible(true);
>  $newLayer->SetLegendLabel($layerName);
>  $newLayer->SetDisplayInLegend(false);
>
>  $layerCollection = $map->GetLayers();
>  $layerCount = $layerCollection->GetCount();
>  $modelLayerIndex = $layerCount-2;
>  if ($layerCollection->Contains("HV_isol_dev_parent"))
>  {
>    $selLayerIndex = $layerCollection->IndexOf("HV_isol_dev_parent");
>    $modelLayerIndex = $selLayerIndex;
>    $layerCollection->RemoveAt($selLayerIndex);
>  }
>  // Add Model layer to collection
>  if (! $layerCollection->Contains($layerName))
>  {
>  $layerCollection->Insert($modelLayerIndex,$newLayer);
>  // $layerCollection->Insert($layerCount-2,$newLayer);
>  }
>
>
>
>
> *************************************************************************
> This e-mail (including any attachments) may contain confidential or
> privileged information and is intended for the sole use of the person(s) to
> whom it is addressed. If you are not the intended recipient, or the person
> responsible for delivering this message to the intended recipient, please
> notify the sender of the message or send an e-mail to
> mailto:help.desk at ergon.com.au immediately, and delete all copies. Any
> unauthorised review, use, alteration, disclosure or distribution of this
> e-mail by an unintended recipient is prohibited. Ergon Energy accepts no
> responsibility for the content of any e-mail sent by an employee which is
> of
> a personal nature.
>
> Ergon Energy Corporation Limited      ABN 50 087 646 062
> *************************************************************************
> _______________________________________________
> mapguide-internals mailing list
> mapguide-internals at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>


More information about the mapguide-internals mailing list