[mapguide-users] Adding a point to a map... PLZ Help!!! (.NET - C#)

Galois amihalas at yahoo.gr
Wed Oct 15 10:15:27 EDT 2008


Maybe I'm stupid....

I cannot do it work. I have reconstruct the whole thing, but the new Layer
doesn't appear in the page.

I followed the Dev's Guide in order to create a Layer and add it in the map
but nothing.

Basically, I added these three functions. I really would appreciate if u
could give me some help..


public MgLayer addLayerRsc2Map(MgResourceIdentifier layerResId,
MgResourceService resourceSrvc, string layerName, string layerLegendLabel,
MgMap map)
    {
        //MgLayer newLayer = new MgLayer(layerResId, resourceSrvc);
        MgLayer newLayer = new MgLayer(layerResId , resourceSrvc);

        //Add the new layer to the map's layer collection
        newLayer.SetName(layerName);
        newLayer.SetVisible(true);
        newLayer.SetLegendLabel(layerLegendLabel);
        newLayer.SetDisplayInLegend(true);
        MgLayerCollection layerCollection = map.GetLayers();
        if( !layerCollection.Contains(layerName) )
        {
            //Insert the new layer to position 0 so it is at
            //the top of the drawing order
            layerCollection.Insert(0,newLayer);
        }
        MgLayerGroupCollection skata = map.GetLayerGroups();
        return newLayer;
    }

    
    public MgLayer addLayerDef2Map(string layerDefinition, string layerName,
string layerLegendLabel, string sessionId, MgResourceService resourceSrvc,
MgMap map )
    {
        // Adds the layer definition (XML) to the map.
        // Returns the layer.

        //Validate the XML.
        XmlDocument domDocument = new XmlDocument();
        domDocument.LoadXml(layerDefinition);
        domDocument.PreserveWhitespace = true;
        MemoryStream stream = new System.IO.MemoryStream();
        domDocument.Save(stream);

        Byte[] byteArray = stream.ToArray();
        string outerXml = System.Text.Encoding.UTF8.GetString(byteArray, 0,
byteArray.Length);
        byteArray = System.Text.Encoding.UTF8.GetBytes(outerXml);

        //Save the new layer definition to the Session.
        MgByteSource byteSource = new MgByteSource(byteArray ,
byteArray.Length);
        byteSource.SetMimeType(MgMimeType.Xml);
        MgResourceIdentifier resourseId = new
MgResourceIdentifier("Session:" + map.SessionId + "//" + layerName + "." +
MgResourceType.LayerDefinition);
        
        // Set the map with the new resource
        resourceSrvc.SetResource(resourseId, byteSource.GetReader(), null);
        

        MgLayer newLayer = addLayerRsc2Map(resourseId, resourceSrvc,
layerName, layerLegendLabel, map);
        return newLayer;
    }


    
    public void addLayer2Group(MgLayer layer, string layerGroupName, string
layerGroupLegendLabel, MgMap map)
    // Adds a layer to a layer group. If necessary, it creates
    // the layer group.
    {
        //Get the layer group
        MgLayerGroup layerGroup;
        MgLayerGroupCollection layerGroupCollection = map.GetLayerGroups();
        if( layerGroupCollection.Contains(layerGroupName) )
        {
            layerGroup = layerGroupCollection.GetItem(layerGroupName);
        }
        else
        {
            //It does not exist, so create it.
            layerGroup = new MgLayerGroup(layerGroupName);
            layerGroup.SetVisible(true);
            layerGroup.SetDisplayInLegend(true);
            layerGroup.SetLegendLabel(layerGroupLegendLabel);
            layerGroupCollection.Add(layerGroup);
        }
        //Add the layer to the group.
        layer.SetGroup(layerGroup);
    }




Kenneth Skovhede, GEOGRAF A/S wrote:
> 
> Did you look at the buffer sample code in the AJAX viewer?
> It does exactly what is required, besides inserting your points.
> 
> About your code:
> You do not use the "resourceIdentifier" variable, which means your layer 
> might reference something else.
> You save the layers to the regular repository, which is fine, but each 
> use will overwrite the previous copy, making
> it impossible to reliably serve more than one user.
> You do not add the layer to the runtime map, and you do not save the 
> runtime map.
> 
> You write: "I just want to display them".
> Well, MapGuide works by displaying data from a FeatureSource, styled 
> through a LayerDefinition.
> You cannot insert data in the LayerDefinition, it must be in a 
> FeatureSource.
> 
> If you insert the data in an existing FeatureSource, with an existing 
> layer, that is fine too, but I cannot guess that is what you want.
> 
> You did not mention an Xml file with points before, just a single point.
> 
> Depending on your data, you may want to insert them into a database 
> (like Sqlite or Access), or into an SDF file.
> If you choose the database version, your FeatureSource can be of type
> ODBC.
> 
> If you use a database, you can insert the points using regular SQL 
> queries against the database.
> If the points are persistent (that is, not tied to a particular users 
> map, like session values),
> you can just create a FeatureSource + Layer through Maestro or Studio 
> without requirering any code.
> 
> If you are looking to create something similar to "Points of interrest" 
> with a nice little flag, you might
> consider using OpenLayers instead of the AJAX viewer:
> http://www.openlayers.org/
> http://www.openlayers.org/dev/examples/georss-markers.html
> (OpenLayers also supports MapGuide as the backend server)
> 
> 
> Regards, Kenneth Skovhede, GEOGRAF A/S
> 
> 
> 
> Galois skrev:
>> First of all, thank u fro your reply.
>>
>> I don't get why should I create a temp layer.
>> I have some coordinates in an XML file, and I just want to display them
>> on
>> an existing layer.
>>
>> Though I tried to create a new layer, it does not appear in my maps
>> layers.
>>
>> That's what I did...
>>
>>
>>
>> MgResourceIdentifier resourceIdentifier = new
>> MgResourceIdentifier("Library://GoSpatial/Data/airports.FeatureSource");
>>         MgResourceIdentifier layerResId = new
>> MgResourceIdentifier("Library://GoSpatial/Layers/TmpLayer.LayerDefinition");
>>
>>
>>         string layerDefinition =
>> File.ReadAllText("C:/Inetpub/wwwroot/iwaygis/TmpLayer.LayerDefinition.xml");
>>
>>
>>         MgByteReader reader = new MgByteReader(layerDefinition,
>> "text/xml");
>>
>>         resourceSrvc.SetResource(layerResId, reader, null);
>>
>>
>>         tmpLayer = new MgLayer(layerResId, resourceSrvc);
>>         tmpLayer.SetName("TempLayer");
>>         tmpLayer.SetLegendLabel("TempLayer");
>>         tmpLayer.SetDisplayInLegend(true);
>>         tmpLayer.SetSelectable(true);
>>
>>         MgLayerCollection layers = map.GetLayers();
>>         layers.Insert(0, tmpLayer);
>>         tmpLayer.SetVisible(true);
>>         tmpLayer.ForceRefresh();
>>
>> Thx!
>>
>>
>>
>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>   
>>> A few steps are involved:
>>>
>>> 1. Create a temporary featuresource
>>> 2. Create a temporary layer to display the features
>>> 3. Insert the temporary layer into the runtime map
>>>
>>> The buffer files in the MapGuide viewer has template code for all three
>>> steps.
>>> All steps are explained in the Developer Guide (PDF version at least).
>>>
>>> You might also want to look here:
>>> http://trac.osgeo.org/mapguide/wiki/CodeSamples/ASP.Net/ScribbleApp
>>>
>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>
>>>
>>>
>>> Galois skrev:
>>>     
>>>> Hello,
>>>>
>>>> I´m trying to add a point to a map but I have no idea how to it.
>>>>
>>>> I have declare the map object, and also I create a point with it's
>>>> coordinates.
>>>>
>>>> But I don't know what is the next step that I have to do...
>>>>
>>>> The code follows....
>>>>
>>>>
>>>> public partial class _Default : System.Web.UI.Page
>>>> {
>>>>     public string sessionId;
>>>>     public string webLayout;
>>>>
>>>>     protected void Page_Load(object sender, EventArgs e)
>>>>     {
>>>>         string physicalPath = @"C:\Program
>>>> Files\MapGuideOpenSource\WebServerExtensions\www\webconfig.ini";
>>>>
>>>>         try
>>>>         {
>>>>             MapGuideApi.MgInitializeWebTier(physicalPath);
>>>>
>>>>
>>>>             passAndSession();
>>>>
>>>>             //Associate a session ID with the MgSiteConnection Object
>>>>             MgUserInformation userInfo_new = new
>>>> MgUserInformation(sessionId);
>>>>
>>>>             MgSiteConnection siteConnection = new MgSiteConnection();
>>>>
>>>>             siteConnection.Open(userInfo_new);
>>>>
>>>>             MgResourceService resourceSrvc =
>>>> (MgResourceService)siteConnection.CreateService(MgServiceType.ResourceService);
>>>>
>>>>
>>>>             MgMap map = new MgMap(siteConnection);
>>>>
>>>>             webLayout =
>>>> "Library://GoSpatial/Web+Layouts/Autostrada+Brescia+Padova+Map.WebLayout";
>>>>
>>>>             MgResourceIdentifier resId = new
>>>> MgResourceIdentifier("Library://GoSpatial/Maps/Italy
>>>> Map.MapDefinition");
>>>>
>>>>             String mapName = resId.GetName();
>>>>
>>>>             MgResourceIdentifier mapStateId = new
>>>> MgResourceIdentifier("Session:" + sessionId + "//" + mapName + "." +
>>>> MgResourceType.Map);
>>>>
>>>>             map.Create(resourceSrvc, resId, mapName);
>>>>
>>>>             map.Save(resourceSrvc, mapStateId);
>>>>
>>>>             map.Open(resourceSrvc, mapName);
>>>>
>>>>             createPoint();
>>>>
>>>>            
>>>>         }
>>>>         catch (Exception ex)
>>>>         {
>>>>             throw (ex);
>>>>         }
>>>>     }
>>>>
>>>>
>>>>
>>>>
>>>>     public string passAndSession()
>>>>     {
>>>>         MgUserInformation userInfo = new
>>>> MgUserInformation("Administrator",
>>>> "admin");
>>>>
>>>>         MgSite site = new MgSite();
>>>>
>>>>         site.Open(userInfo);
>>>>
>>>>         sessionId = site.CreateSession();
>>>>         return sessionId;
>>>>     }
>>>>
>>>>     public MgPoint createPoint()
>>>>     {
>>>>         MgGeometryFactory geometryFactory = new MgGeometryFactory();
>>>>
>>>>         MgCoordinateXY coordinate = (MgCoordinateXY)
>>>> geometryFactory.CreateCoordinateXY(10.913161, 45.408046);
>>>>
>>>>         MgPoint point = geometryFactory.CreatePoint(coordinate);
>>>>         return point;
>>>>     }
>>>> }
>>>>
>>>>   
>>>>       
>>> _______________________________________________
>>> mapguide-users mailing list
>>> mapguide-users at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>
>>>
>>>     
>>
>>   
> 
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
> 
> 

-- 
View this message in context: http://www.nabble.com/Adding-a-point-to-a-map...-PLZ-Help%21%21%21-%28.NET---C-%29-tp19954532p19994399.html
Sent from the MapGuide Users mailing list archive at Nabble.com.



More information about the mapguide-users mailing list