[mapguide-users] How to add WMS (Transparent) layer to MapGuide?
Patrick Tsang
pt at pat.ca
Sat Jun 30 19:05:09 EDT 2007
Hi All,
I want to add WMS layer on the fly
not through MapStudio. I am able to add WMS layer on the fly but the layer
come back is not
transparent but i cannot figure out how to request the layer as
transparent... here is my code (C#):
private string formatWMSProviderXml =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
System.Environment.NewLine +
" <FeatureSource
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\";
xsi:noNamespaceSchemaLocation=\"FeatureSource-1.0.0.xsd\">" +
System.Environment.NewLine +
" <Provider>OSGeo.WMS</Provider>" +
System.Environment.NewLine +
" <Parameter>" + System.Environment.NewLine +
" <Name>FeatureServer</Name>" + System.Environment.NewLine
+
" <Value>{0}</Value>" + System.Environment.NewLine +
" </Parameter>" + System.Environment.NewLine +
" </FeatureSource>";
private string formatWMSLayerXml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?> " +
System.Environment.NewLine +
" <LayerDefinition
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\";
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\";
xsi:noNamespaceSchemaLocation=\"LayerDefinition-1.0.0.xsd\"
version=\"1.0.0\"> " + System.Environment.NewLine +
" <GridLayerDefinition> " + System.Environment.NewLine +
" <ResourceId>{0}</ResourceId> " +
System.Environment.NewLine +
" <FeatureName>WMS_Schema:{1}</FeatureName> " +
System.Environment.NewLine +
" <Geometry>Raster</Geometry> " +
System.Environment.NewLine +
" <GridScaleRange> " + System.Environment.NewLine +
" <ColorStyle> " + System.Environment.NewLine +
" <ColorRule> " + System.Environment.NewLine +
" <LegendLabel></LegendLabel> " +
System.Environment.NewLine +
" <Color> " + System.Environment.NewLine +
" <ExplicitColor>000000</ExplicitColor> " +
System.Environment.NewLine +
" </Color> " + System.Environment.NewLine +
" </ColorRule> " + System.Environment.NewLine +
" <ColorRule> " + System.Environment.NewLine +
" <LegendLabel></LegendLabel> " +
System.Environment.NewLine +
" <Color> " + System.Environment.NewLine +
" <ExplicitColor>FFFFFF</ExplicitColor> " +
System.Environment.NewLine +
" </Color> " + System.Environment.NewLine +
" </ColorRule> " + System.Environment.NewLine +
" </ColorStyle> " + System.Environment.NewLine +
" <RebuildFactor>1</RebuildFactor> " +
System.Environment.NewLine +
" </GridScaleRange> " + System.Environment.NewLine +
" </GridLayerDefinition> " + System.Environment.NewLine +
" </LayerDefinition>";
public void AddLayer(string SessionId, string ClassName, Server
Server, string MapName)
{
// Create MgSiteConnection
MgSiteConnection siteConnection = new MgSiteConnection();
siteConnection.Open(new MgUserInformation(SessionId));
//create the services we will use
MgResourceService resourceService =
siteConnection.CreateService(MgServiceType.ResourceService) as
MgResourceService;
//create the wms feature source
// NOTES: Server.URL is something like
"http://www.geographynetwork.ca/wmsconnector/com.esri.wms.Esrimap/OBM_Full_I?request=getcapabilities&service=WMS&version=1.1.1";
string formatedWmsProviderXml =
string.Format(formatWMSProviderXml, XmlEscape(Server.URL));
MgByteSource wmsFeatureSourceByteSource = new
MgByteSource(System.Text.Encoding.ASCII.GetBytes(formatedWmsProviderXml),
formatedWmsProviderXml.Length);
wmsFeatureSourceByteSource.SetMimeType(MgMimeType.Xml);
string featureSourceName =
string.Format("Session:{0}//{1}.FeatureSource", SessionId, Guid.NewGuid());
MgResourceIdentifier WmsFeatureSourceResourceIdentifier = new
MgResourceIdentifier(featureSourceName);
resourceService.SetResource(WmsFeatureSourceResourceIdentifier,
wmsFeatureSourceByteSource.GetReader(), null);
//create the wms layer
// NOTES: ClassName is the layer name user pick from a list of
layers from the Server.URL
string layerWmsName = ClassName;
string formatedWmsLayerXml = string.Format(formatWMSLayerXml,
XmlEscape(featureSourceName), XmlEscape(layerWmsName));
MgByteSource wmsLayerByteSource = new
MgByteSource(System.Text.Encoding.ASCII.GetBytes(formatedWmsLayerXml),
formatedWmsLayerXml.Length);
wmsLayerByteSource.SetMimeType(MgMimeType.Xml);
MgResourceIdentifier wmsLayerResourceIdentifier = new
MgResourceIdentifier(string.Format("Session:{0}//{1}.LayerDefinition",
SessionId, layerWmsName));
resourceService.SetResource(wmsLayerResourceIdentifier,
wmsLayerByteSource.GetReader(), null);
//get a reference to the map
MgResourceService l_oResourceService =
siteConnection.CreateService(MgServiceType.ResourceService) as
MgResourceService;
MgMap map = new MgMap();
map.Open(l_oResourceService, MapName);
// Add the new layer to the map's layer collection
MgLayer newLayer = new MgLayer(wmsLayerResourceIdentifier,
resourceService);
newLayer.SetName(layerWmsName);
newLayer.SetVisible(true);
newLayer.SetLegendLabel(layerWmsName);
newLayer.SetDisplayInLegend(true);
MgLayerCollection layerCollection = map.GetLayers();
if (!layerCollection.Contains(layerWmsName))
{
// Insert the new layer at position 0 so it is at
// the top of the drawing order
layerCollection.Insert(0, newLayer);
Server.Layers.Find(delegate(Layer l) { return l.ClassName ==
ClassName; }).IsVisible = true;
}
// Save the map back to the session repository
string mapResourceName = string.Format("Session:{0}//{1}.Map",
SessionId, MapName);
MgResourceIdentifier mapResourceID = new
MgResourceIdentifier(mapResourceName);
mapResourceID.Validate();
map.Save(resourceService, mapResourceID);
// return
//return Server;
}
There has objects not defined, try to keep it short. Sorry about it...
Thanks in advance!!!
Cheers,
Patrick
--
View this message in context: http://www.nabble.com/How-to-add-WMS-%28Transparent%29-layer-to-MapGuide--tf4006306s16610.html#a11377823
Sent from the MapGuide Users mailing list archive at Nabble.com.
More information about the mapguide-users
mailing list