[mapguide-users] Regarding Linking of Layers with Map at run time

ravinder.singh at BIRLASOFT.COM ravinder.singh at BIRLASOFT.COM
Sat Feb 14 08:37:15 EST 2009


Thanks Kenneth I used the MaestroAPI. Now I am able to change my layer
at run time in the map.

But I want to confirm whether the same API's work with fusion? Because I
will be making fusion application finally.

 

Regards,

Ravinder 

 

________________________________

From: mapguide-users-bounces at lists.osgeo.org
[mailto:mapguide-users-bounces at lists.osgeo.org] On Behalf Of Kenneth
Skovhede, GEOGRAF A/S
Sent: Saturday, February 14, 2009 5:21 PM
To: MapGuide Users Mail List
Subject: Re: [mapguide-users] Regarding Linking of Layers with Map at
run time

 

I can't guess what you are trying to achieve with the code.
MaestroAPI is not the only way, you can use the native API like you do, 
but you have to handle all the quirks yourself, which is not a trivial
task.

This line is not valid C#:
        MgResourceIdentifier webLayoutId = new
MgResourceIdentifier("Library:// Samples/ Sheboygan
/Layouts\BasicLayout.WebLayout");

\B is not a valid string escape sequence, and there seems to be some
spaces, which may come from the mail program.

I think you can get a better understanding of the MaestroAPI from these
two examples:
http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/samples/AddInitia
lLayer
http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/samples/Customize
dZoomWithWebLayout



This piece of code seems to ovewrite the runtime map, with the
Sheboygan:

        MgMap map = new MgMap();

        MgResourceIdentifier resId = new

 
MgResourceIdentifier("Library://Samples/Sheboygan/Maps/Sheboygan.MapDefi
nition");

        String mapName = resId.GetName();

        map.Create(resourceSrvc, resId, mapName);

        MgResourceIdentifier mapStateId = new
MgResourceIdentifier("Session:" + sessionId + "//" + mapName + "." +
MgResourceType.Map);

        map.Save(resourceSrvc, mapStateId);


This code seems to set the startup map in the library weblayout to the
sheboygan map:

        MgResourceIdentifier webLayoutId = new
MgResourceIdentifier("Library:// Samples/ Sheboygan
/Layouts\BasicLayout.WebLayout");

        MgByteReader byteReader =
resourceSrvc.GetResourceContent(webLayoutId);        

        XmlDocument doc = new XmlDocument();

        String xmlLayoutDef = byteReader.ToString();        

        doc.LoadXml(xmlLayoutDef);

        XmlNode parentNode =
doc.GetElementsByTagName("ResourceId").Item(0);

        if (parentNode != null)

        {

            XmlNode mapRessource =
doc.SelectSingleNode("/WebLayout/Map/ResourceId");

            if (mapRessource != null)

            {

                mapRessource.InnerText = "Library://Samples/Sheboygan/"
+ "Maps/Sheboygan" + ".MapDefinition";


                String string1= doc.DocumentElement.OuterXml;

                resourceSrvc.SetResource(webLayoutId, new
MgByteReader(string1, "text/xml"), null);                

            }

        }      


You cannot overwrite the runtime map, because the AJAX viewer always
overwrites the
runtime map at startup, so the first segment of code has no effect.
The last part seems correct, but the exception states that the xml is
broken in some way.
I have seen others complain about the same problem, but I don't know
what happens.
It seems that the SetResource or MgByteReader breaks the data in some
way.






Regards, Kenneth Skovhede, GEOGRAF A/S



ravinder.singh at BIRLASOFT.COM skrev: 

I have written the following code also, it uses xml and infact when this
code runs it runs perfectally without any problem, it does what I wanted
to do, it changes the map definition  in web layout, and it runs
perfectally if I run from maestro,  but when I try to run from my .net
page

 

<frame id="viewerFrame" frameborder="no" marginwidth="0"
marginheight="0" scrolling="no"
src="../mapviewernet/ajaxviewer.aspx?SESSION=<%=sessionId%>&WEBLAYOUT=<%
=webLayout%>">

 

Then the problem comes. And it says the following error. 

 

Type 'OSGeo.MapGuide.MgNullArgumentException' in Assembly
'MapGuideDotNetApi, Version=2.0.0.2716, Culture=neutral,
PublicKeyToken=null' is not marked as serializable.

 

If I save the map once in maestro then the viewer also runs. I have also
tried to read the header of xml and passing in resourceSrvc.SetResource
as third parameter, the problem remains the same.

 

So I just want to confirm whether maestro API you suggested would be the
final and last way to do this thing, or some other way ? Because I am
not aware of using maestro api.

 

 

//Here is my code

 

MgUserInformation userInfo_new = new MgUserInformation(sessionId);

        MgSiteConnection siteConnection = new MgSiteConnection();

        siteConnection.Open(userInfo_new);

        MgResourceService resourceSrvc =
(MgResourceService)siteConnection.CreateService(MgServiceType.ResourceSe
rvice);

        MgMap map = new MgMap();

        MgResourceIdentifier resId = new

 
MgResourceIdentifier("Library://Samples/Sheboygan/Maps/Sheboygan.MapDefi
nition");

        String mapName = resId.GetName();

        map.Create(resourceSrvc, resId, mapName);

        MgResourceIdentifier mapStateId = new
MgResourceIdentifier("Session:" + sessionId + "//" + mapName + "." +
MgResourceType.Map);

        map.Save(resourceSrvc, mapStateId);

        MgResourceIdentifier webLayoutId = new
MgResourceIdentifier("Library:// Samples/ Sheboygan
/Layouts\BasicLayout.WebLayout");

        MgByteReader byteReader =
resourceSrvc.GetResourceContent(webLayoutId);        

        XmlDocument doc = new XmlDocument();

        String xmlLayoutDef = byteReader.ToString();        

        doc.LoadXml(xmlLayoutDef);

        XmlNode parentNode =
doc.GetElementsByTagName("ResourceId").Item(0);

        if (parentNode != null)

        {

            XmlNode mapRessource =
doc.SelectSingleNode("/WebLayout/Map/ResourceId");

            if (mapRessource != null)

            {

                mapRessource.InnerText = "Library://Samples/Sheboygan/"
+ "Maps/Sheboygan" + ".MapDefinition";


                String string1= doc.DocumentElement.OuterXml;

                resourceSrvc.SetResource(webLayoutId, new
MgByteReader(string1, "text/xml"), null);                

            }

        }      

 

 

Regards,

Ravinder 

________________________________

From: mapguide-users-bounces at lists.osgeo.org
[mailto:mapguide-users-bounces at lists.osgeo.org] On Behalf Of Kenneth
Skovhede, GEOGRAF A/S
Sent: Saturday, February 14, 2009 4:33 PM
To: MapGuide Users Mail List
Subject: Re: [mapguide-users] Regarding Linking of Layers with Map at
run time

 

The MgMap class represents a runtime map, not a MapDefinition.
There is no such class a a MgMapDefinition, so you have to read/write
the xml.
If you wish to use the standard viewer, you have to do this.
I was very annoyed by this, so I created the MaestroAPI that has classes
for all the Xml documents,
including the MapDefinition:
http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI

If you start the viewer with an empty map, you can access the MgMap
object,
and add layers as runtime layers, using the MgMap.Layers.Add method.





Regards, Kenneth Skovhede, GEOGRAF A/S



ravinder.singh at BIRLASOFT.COM skrev: 

Hi Stefan,

 

I put the way you said but it gives the following error now.

 

Type 'OSGeo.MapGuide.MgXmlParserException' in Assembly
'MapGuideDotNetApi, Version=2.0.0.2716, Culture=neutral,
PublicKeyToken=null' is not marked as serializable.

 

Regards,

Ravinder Singh

________________________________

From: mapguide-users-bounces at lists.osgeo.org
[mailto:mapguide-users-bounces at lists.osgeo.org] On Behalf Of Stefan
Dalakov
Sent: Friday, February 13, 2009 11:10 PM
To: MapGuide Users Mail List
Subject: Re: [mapguide-users] Regarding Linking of Layers with Map at
run time

 

Try 
MgResourceIdentifier mapName = new MgResourceIdentifier("Session:" +
sessionId + "//Sheboygan.MapDefinition");


Stefan Dalakov

ravinder.singh at BIRLASOFT.COM wrote: 

Hi All,

 

I have created the map definition in maestro and also created a web
layout, and I have hundreds of Maps, and each map will have a single
layer, but I don't want to create the hundreds of maps for each single
layer. For that purpose I though I will just make a single map and will
associate the layer at run time to that map. So I wrote the following
set of code for Sheboygan sample

 

But when I reach to map.Save(resourceSrvc, mapName) 

 

it gives me the error 

 

MgXmlParserException {"An exception occurred in the XML parser."}

 

And also I tried with Map.Open and then the following error comes

 

Resource was not found:
Session:b275c3b6-ffff-ffff-8000-001a4bb4a756_en_7F0000010AFC0AFB0AFA//Sa
mples/Sheboygan/Sheboygan.MapDefinition

 

I have written the following code

 

MgUserInformation userInfo = new MgUserInformation(defaultUser,
defaultPassword);

      MgSite site = new MgSite();

      site.Open(userInfo);

      sessionId = site.CreateSession();

MgUserInformation userInfo_new = new MgUserInformation(sessionId);

      MgSiteConnection siteConnection = new MgSiteConnection();

      siteConnection.Open(userInfo_new);

MgResourceService resourceSrvc =
(MgResourceService)siteConnection.CreateService(MgServiceType.ResourceSe
rvice);        

MgResourceIdentifier mapName = new MgResourceIdentifier("Session:" +
sessionId + "//Samples/Sheboygan/Sheboygan.MapDefinition");

      MgMap map = new MgMap();

      map.Open(resourceSrvc, mapName); // Here the problem comes

      map.Save(resourceSrvc, mapName); // Here the problem comes

 

I am using .net aspx with map guide 2.0

 

Thanks & Regards,

Ravinder Singh

 

************************************************************************
************************************************************************
*********************
"This message and any attachments are solely for the intended recipient
and may contain Birlasoft confidential or privileged information. If you
are not the intended recipient,any disclosure,copying, use, or
distribution of the information included in this message and any
attachments is 
prohibited. If you have received this communication in error, please
notify us by reply e-mail at (administrator at birlasoft.com) and
permanently delete this message and any attachments. Thank you."
************************************************************************
************************************************************************
*********************

 
 
 
 
 



________________________________



 
 
 
 
 
_______________________________________________
mapguide-users mailing list
mapguide-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-users
  

 

************************************************************************
************************************************************************
*********************
"This message and any attachments are solely for the intended recipient
and may contain Birlasoft confidential or privileged information. If you
are not the intended recipient,any disclosure,copying, use, or
distribution of the information included in this message and any
attachments is 
prohibited. If you have received this communication in error, please
notify us by reply e-mail at (administrator at birlasoft.com) and
permanently delete this message and any attachments. Thank you."
************************************************************************
************************************************************************
*********************

 
 
 



________________________________



 
 
 
_______________________________________________
mapguide-users mailing list
mapguide-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-users
  
************************************************************************
************************************************************************
*********************
"This message and any attachments are solely for the intended recipient
and may contain Birlasoft confidential or privileged information. If you
are not the intended recipient,any disclosure,copying, use, or
distribution of the information included in this message and any
attachments is 
prohibited. If you have received this communication in error, please
notify us by reply e-mail at (administrator at birlasoft.com) and
permanently delete this message and any attachments. Thank you."
************************************************************************
************************************************************************
*********************

 



________________________________



 
_______________________________________________
mapguide-users mailing list
mapguide-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-users
  


*********************************************************************************************************************************************************************
"This message and any attachments are solely for the intended recipient and may contain Birlasoft confidential or privileged information. If you are not the intended recipient,any disclosure,copying, use, or distribution of the information included in this message and any attachments is 
prohibited. If you have received this communication in error, please notify us by reply e-mail at (administrator at birlasoft.com) and permanently delete this message and any attachments. Thank you."
*********************************************************************************************************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapguide-users/attachments/20090214/1f022958/attachment.html


More information about the mapguide-users mailing list