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

Galois amihalas at yahoo.gr
Thu Oct 16 05:48:38 EDT 2008


I have a DB with coordinates, but how am I going to put these coordinates in
a layer. Even from AutoDesk...?





Kenneth Skovhede, GEOGRAF A/S wrote:
> 
> I still can't tell which of the two scenarios you are aiming at.
> 
> So you have a highway, and some points on the highway.
> 
> I'm thinking that the points should be created before the user starts to 
> do anything.
> Does it make sense to convert the data into a database with X and Y 
> columns, before even thinking about what MapGuide does?
> You can make a little batch job that updates the database if you prefer, 
> still without use of MapGuide.
> 
> Once you have such a database, set it up in Studio or Maestro like a 
> regular layer.
> Add the layer to the map, but make it invisible if you only want to show 
> it in some cases.
> 
> Now, during runtime, you can create a copy of the LayerDefinition, and 
> insert a "filter" on the layer.
> This will allow you to control what points a specific user sees.
> Now save this copy of the LayerDefinition to the Session store.
> The update the layer in the runtime map to point to the Session based 
> LayerDefinition, and set the layer visible.
> Now save the runtime map, and issue a refresh on the client.
> 
> I can't tell from your code fragments what goes wrong, but there is no 
> map.Save(...) call present, which is
> how you would save the changes to the map. There is no 
> "getMap().Refresh()" call present, which must be issued
> on the client in Javascript.
> 
> Regards, Kenneth Skovhede, GEOGRAF A/S
> 
> 
> 
> Galois skrev:
>> You are wright about the confusion...
>>
>> Anyway, the scenario is the following:
>>
>> I have a map with the Highway of two Italian Cities.
>> Firstly, I would like to display some points of interest on that map.
>> Those points I have them in an XML file.
>>
>> So, my problem till now, is that I add a new layer on my map ( I see in
>> debug mode that my map's Layers has increased ) but this layer doesn't
>> appear in the page.
>> If I solve this thing I'll try to add the points to this layer.
>> Also, keep in mind that these points of interest, there might be static
>> or
>> not.
>> This means that there is no point to create all this from Autodesk
>> manually...
>>
>> Thank you (both) for the help!
>>
>>
>>
>>
>>
>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>   
>>> I agree with Maksim, there seems to be some confusion as to what you 
>>> want to do.
>>> There are two basic scenarios:
>>>
>>> 1. You want to display some points based on context.
>>> An example would be searching for hotels in a certain price interval, 
>>> and the opening a map with the hotels shown.
>>>
>>> 2. You want to display a number of points, but the data changes more or 
>>> less frequently.
>>> An example of this would be position of vehicles.
>>>
>>> A combination would be to show the position of vehicles that are using 
>>> diesel engines.
>>>
>>> Could you elaborate on what your scenario is like?
>>>
>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>
>>>
>>>
>>> Maksim Sestic skrev:
>>>     
>>>> Hmm, if you're attending to batch-process large number of points (along
>>>> with
>>>> attached data) then web service calling FDO directly will do it much
>>>> more
>>>> efficiently, since you can preset it on server side to poke exact
>>>> datastore/schema (thus skipping enumeration). Especially if you're
>>>> planning
>>>> to parse some client-side file holding actual information. Other way
>>>> round
>>>> you'll be making too many client-server roundtrips.Of couse, it all
>>>> depends
>>>> on the overall setup...
>>>>
>>>> -----Original Message-----
>>>> From: mapguide-users-bounces at lists.osgeo.org
>>>> [mailto:mapguide-users-bounces at lists.osgeo.org] On Behalf Of Galois
>>>> Sent: Wednesday, October 15, 2008 16:29
>>>> To: mapguide-users at lists.osgeo.org
>>>> Subject: RE: [mapguide-users] Adding a point to a map... PLZ Help!!!
>>>> (.NET
>>>> -C#)
>>>>
>>>>
>>>> This is not a solution, cause at the feature, I'll have lot of XML
>>>> files
>>>> and
>>>> the code will have to work in order to put all the interest points
>>>> automatic
>>>> on the map....
>>>>
>>>> ThanX anyway :-D
>>>>
>>>>
>>>>
>>>> Maksim Sestic wrote:
>>>>   
>>>>       
>>>>> If the MG->Datastore approach is making you headaches, why don't you 
>>>>> directly access the datastore (i.e. via FDO if it's managed after all) 
>>>>> and store the point there "manually"? Of course, if you're poking it 
>>>>> from a client you'll have to establish a web service to do the job on 
>>>>> the server side. And don't forget to call MG refresh method from 
>>>>> JavaScript once you have that point within a datastore.
>>>>>
>>>>> Regards,
>>>>> Maksim Sestic
>>>>>
>>>>> -----Original Message-----
>>>>> From: mapguide-users-bounces at lists.osgeo.org
>>>>> [mailto:mapguide-users-bounces at lists.osgeo.org] On Behalf Of Galois
>>>>> Sent: Wednesday, October 15, 2008 16:15
>>>>> To: mapguide-users at lists.osgeo.org
>>>>> Subject: Re: [mapguide-users] Adding a point to a map... PLZ Help!!! 
>>>>> (.NET
>>>>> -C#)
>>>>>
>>>>>
>>>>> 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.LayerDefin
>>>>>>> i
>>>>>>> tion");
>>>>>>>
>>>>>>>
>>>>>>>         string layerDefinition =
>>>>>>> File.ReadAllText("C:/Inetpub/wwwroot/iwaygis/TmpLayer.LayerDefinitio
>>>>>>> n
>>>>>>> .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.Reso
>>>>>>>>> u
>>>>>>>>> rceService);
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>             MgMap map = new MgMap(siteConnection);
>>>>>>>>>
>>>>>>>>>             webLayout =
>>>>>>>>> "Library://GoSpatial/Web+Layouts/Autostrada+Brescia+Padova+Map.Web
>>>>>>>>> L
>>>>>>>>> ayout";
>>>>>>>>>
>>>>>>>>>             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.
>>>>>
>>>>> _______________________________________________
>>>>> mapguide-users mailing list
>>>>> mapguide-users at lists.osgeo.org
>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>
>>>>> __________ Information from ESET NOD32 Antivirus, version of virus 
>>>>> signature database 3523 (20081015) __________
>>>>>
>>>>> The message was checked by ESET NOD32 Antivirus.
>>>>>
>>>>> http://www.eset.com
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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-tp19954532p19994711.html
>>>> Sent from the MapGuide Users mailing list archive at Nabble.com.
>>>>
>>>> _______________________________________________
>>>> mapguide-users mailing list
>>>> mapguide-users at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>
>>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>>> signature
>>>> database 3523 (20081015) __________
>>>>
>>>> The message was checked by ESET NOD32 Antivirus.
>>>>
>>>> http://www.eset.com
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>>
>>>
>>>     
>>
>>   
> 
> _______________________________________________
> 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-tp19954532p20010407.html
Sent from the MapGuide Users mailing list archive at Nabble.com.



More information about the mapguide-users mailing list