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
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users