[mapguide-users] Load Layer Definition XML

Kenneth Skovhede, GEOGRAF A/S ks at geograf.dk
Tue Mar 3 02:42:33 EST 2009


Yes, I run it with MGE 2009.

Regards, Kenneth Skovhede, GEOGRAF A/S



clarkie342 skrev:
> Hi,
>
> Does MaestroAPI work with Mapguide Enterprise?
> Thanks.
>
>
> wordsy wrote:
>   
>> Thanks for the quick response.  It was exactly what I needed.
>>
>> Cheers!
>>
>>
>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>     
>>> If you want to modify the layer xml, you just read the xml like this:
>>>
>>> MgByteReader rd = resourceSrvc.GetResource(new 
>>> MgResourceIdentifier("Library://layer.LayerDefinition"));
>>>
>>> If you want to work seriously with layerdefinitions (and the MapGuide 
>>> xml), I have created the MaestroAPI,
>>> which lets you manipulate classes instead of xml:
>>> http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI
>>>
>>> Using the MaestroAPI, you can just do:
>>> LayerDefinition ldef = 
>>> con.GetLayerDefinition("Library://layer.LayerDefinition");
>>> VectorLayerDefinition vldef = ldef.Item as VectorLayerDefinition;
>>> foreach(VectorScaleRangeType vsr in vldef.ScaleRanges)
>>>     foreach(object o in vsr.Item)
>>>        if (o is PointTypeStyleType)
>>>           ; //Layer has points
>>>        else if (o is LineTypeStyleType)
>>>           ; //Layer has lines
>>>        else if (o is AreaTypeStyleType)
>>>           ; //Layer has polygons
>>>
>>>
>>> Also, changing a style is easy, eg:
>>> PointTypeStyleType point = vldef.ScaleRanges[0].Item[0] as 
>>> PointTypeStyleType;
>>> p.PointRule[0].Label.BackgroundColor = System.Drawing.Color.Red;
>>>
>>> Then save:
>>> con.SaveResource(ldef);
>>>
>>> All is fully intellisense supported in VS.
>>>
>>>
>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>
>>>
>>>
>>> wordsy skrev:
>>>       
>>>> Hey Everyone;
>>>>
>>>> Fairly new to MGOS.
>>>>
>>>> Here is what I am trying to do.  
>>>>
>>>> I have a map with many Layers.  One of my requirements is to allow users
>>>> to
>>>> be able to change the layer styles via a web wizard.  The user will be
>>>> able
>>>> to adjust certain styles for line/point/polygon (surface).  Ie font,
>>>> symbol,
>>>> line thickness, color etc.
>>>>
>>>> Already my site allows a user to select the layer they want to change,
>>>> then
>>>> change the styles for a point only.  The changing doesn't seem to be a
>>>> problem right now.
>>>>
>>>> The problem I have:
>>>>
>>>> Once a user selects the layer they want to load.  How would I get the
>>>> layer
>>>> and use XML document or XPATH or something to allow the users edit XML
>>>> nodes.
>>>>
>>>> Here is my code that checks to see what layer type I have when the user
>>>> selects the layer.  I have 3 different user controls (one for line, one
>>>> for
>>>> poly, one for line).  What I really want, is to load the layer and
>>>> populate
>>>> the appropriate controls inside the user control.
>>>>
>>>>  MgSiteConnection conn = InitializeGisWebTier();
>>>>             string resource = "Library://MUNICIPALITIES/" + Municipality
>>>> +
>>>> "/2_DATA/" + LayerName + ".FeatureSource";
>>>>
>>>>             MgResourceService svc =
>>>> (MgResourceService)conn.CreateService(MgServiceType.ResourceService );
>>>>
>>>>             // Populate some values that we will need.
>>>>             MgResourceIdentifier resourceId = new
>>>> MgResourceIdentifier(resource);              
>>>>             MgFeatureReader featureReader =
>>>> LayerDefinitionFactory.MakeAFeatureReader(conn, resourceId);                        
>>>>             
>>>>             // Find out what type of Geometric property the
>>>> FeatureSource we
>>>> uploaded has.
>>>>             string geometricPropertyType =
>>>> LayerDefinitionFactory.GetFeatureSourceGeometricPropertyType(featureReader);
>>>>
>>>>             switch (geometricPropertyType)
>>>>             {
>>>>                 case "SURFACE":
>>>>                     // We load the Polygon usercontrol
>>>>                     this.phStylizeLayerControl.Controls.Add(new
>>>> PolygonStyleBuilder());
>>>>                     break;
>>>>                 case "POINT":
>>>>                     // we load the point usercontrol
>>>>                     //this.phStylizeLayerControl.Controls.Add(new
>>>> PointStyleBuilder());
>>>>                     PointStyleBuilder control =
>>>> (PointStyleBuilder)LoadControl("~/Pages/Controls/PointStyleBuilder.ascx");
>>>>                     this.phStylizeLayerControl.Controls.Add(control);
>>>>                     txtSymbol.Enabled = true;
>>>>                     txtSymbolSize.Enabled = true;
>>>>                     break;
>>>>                 case "CURVE":
>>>>                     // we load the line user control
>>>>                     this.phStylizeLayerControl.Controls.Add(new
>>>> LineStyleBuilder());
>>>>                     break;
>>>>             }
>>>>
>>>> Thanks for any help in advance.
>>>>   
>>>>         
>>> _______________________________________________
>>> mapguide-users mailing list
>>> mapguide-users at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>
>>>
>>>       
>>     
>
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapguide-users/attachments/20090303/c548b5d6/attachment.html


More information about the mapguide-users mailing list