Brad L,您好!

        Thanks for your help,Brad!

        Actually, My used the DOM-processing method the create the layer 
definition exactly like the code you provided, they run well and created the 
MgLayer object successfully, but the following steps (step 4 ,as I mentioned 
first mail)  ,the map.Save(resourceService) will raise the 
MgNotImplementedException, So I changed to the string-processing way to create 
layerdefinition. Both XML-processing and string-processing can create the 
layerdefiniton and create the MgLayer object successfully ,and both of them get 
the same exception in the following step---map.Save(...).



======= 2007-09-29 03:19:42 您在来信中写道:=======

>Try this
>
>public MgLayer CreateTrackLineLayer(String rootPath, MgResourceService
>resService, MgResourceIdentifier TrackResId, String sessionId)
>    {
>        // Load the TrackLinelayerdefinition template into
>        // an ASPX XML object, find the "ResourceId" element, and
>        // modify it's content to reference the feature source.
>
>        XmlDocument doc = new XmlDocument();
>        doc.PreserveWhitespace = true;
>        doc.Load(rootPath + @"\Template\TrackLineLayerDefinition2.xml");
>        XmlNode featureSourceNode =
>doc.GetElementsByTagName("ResourceId").Item(0);
>        XmlNode resContent = doc.CreateTextNode(TrackResId.ToString());
>        featureSourceNode.AppendChild(resContent);
>
>        // Get the updated layer definition from the DOM object
>        // and save it to the repository using the
>        // ResourceService object.
>
>        MemoryStream xmlStream = new MemoryStream();
>        doc.Save(xmlStream);
>        byte[] layerDefinition = xmlStream.ToArray();
>        Encoding utf8 = Encoding.UTF8;
>        String layerDefStr = new String(utf8.GetChars(layerDefinition));
>        layerDefinition = new byte[layerDefStr.Length - 1];
>        int byteCount = utf8.GetBytes(layerDefStr, 1, layerDefStr.Length -
>1, layerDefinition, 0);
>        MgByteSource byteSource = new MgByteSource(layerDefinition,
>layerDefinition.Length);
>        byteSource.SetMimeType(MgMimeType.Xml);
>        
>        //this stores it to the session but you could pass your
>MgResourceIdentifier as you did in your code
>        MgResourceIdentifier tempLayerResId = new
>MgResourceIdentifier("Session:" + sessionId +
>"//TrackLineLayer.LayerDefinition");
>
>        resService.SetResource(tempLayerResId, byteSource.GetReader(),
>null);
>
>        // Create an MgLayer object based on the new layer definition
>        // and return it to the caller.
>
>        MgLayer newLayer = new MgLayer(tempLayerResId, resService);
>
>        return newLayer;
>    }
>
>I didn't debug this but it should get you in the ball park.
>
>Brad Leighninger
>Mathews & Associates, Inc
>417-869-6009
>
>
>
>Champin wrote:
>> 
>> How to Create a layerDefinition programmtically , using xml?  
>> ---------------------------------------
>> 
>> 
>> Here is my steps, but something wrong happened, MgNotImplementedException
>> raised when added the layer to the map and Map.Save()
>> 
>> 
>> 1.Using MapGuide Studio, Open an LayerDefinition , File --> Save as xml;
>>    in fact, I want to create temp layer the same as the existing layer ,so
>> , the temp layers' layerDefinition should be the same as the existing
>> layer,except the <ResourceID>.....</ResourceID>
>> 
>> 2. Change the resourceId to the replace flage ,such as <ResourceID>
>> %resourceID</ResourceID> and save the xml as  layerDefinitionTemplate.xml
>> 
>> 3.Create the Layer
>> 
>>  public MgLayerBase CreateTrackLineLayer(String rootPath,
>> MgResourceService resService, String featureSourceName,
>> MgResourceIdentifier LayerId)
>>     {
>>         MgLayerBase newLayer = null;
>> 
>>         //字符串方法
>>         string layerDefinition = File.ReadAllText(rootPath +
>> @"\Template\TrackLineLayerDefinition2.xml");
>>         layerDefinition = layerDefinition.Replace("%resourId",
>> featureSourceName);
>> 
>>         MgByteReader reader = new MgByteReader(layerDefinition,
>> "text/xml");
>>         resService.SetResource(LayerId, reader, null);
>> 
>>         newLayer = new MgLayerBase(LayerId, resService);
>>         return newLayer;
>>     }
>> 
>>    these code goes well while debuging
>> 
>>  4. Added the layer to the map and save .
>> 
>> 
>>             MgLayerBase TrackLineLayer =  CreateTrackLineLayer(.......);
>>              // 设置层属性
>>             TrackLineLayer.SetName("TrackLineLayer");
>>             TrackLineLayer.SetDisplayInLegend(true);
>>             TrackLineLayer.SetLegendLabel("航迹");
>>             TrackLineLayer.SetVisible(true);
>>             TrackLineLayer.ForceRefresh();
>>             map.GetLayers().Insert(0, TrackLineLayer);
>> 
>>         // add some feature to the layer feature source
>>       MgPropertyCollection props =BuildeNewPropCollection(.......);  
>>         MgFeatureCommandCollection commands = new
>> MgFeatureCommandCollection();
>>         commands.Add(new MgInsertFeatures(featureName, props));
>>         featureService.UpdateFeatures(TrackLineFeatureSourceID, commands,
>> false);
>> 
>>        //Save the map 
>>          TrackLineLayer.SetVisible(true);
>>         TrackLineLayer.SetSelectable(true);
>>         TrackLineLayer.ForceRefresh();
>>     
>>          map.Save(resService);  //**** ERROR 
>>          here raise the Exception  " MgNotImplementedException "
>> 
>> 
>> 
>> Can you tell me what am I doing wrong?  I have been blocked here for a
>> whole day, any suggestion will be very appreciate .
>> Thank you !
>> 
>> My envionment :
>> Windows XP SP2 
>> VS2005 .net 2.0  + MapGuide Open Source 1.2
>> 
>> 
>> 
>
>-- 
>View this message in context: 
>http://www.nabble.com/How-to-Create-a-layerDefinition-programmtically-%2C-using-xml--tf4514122s16610.html#a12946832
>Sent from the MapGuide Users mailing list archive at Nabble.com.
>
>_______________________________________________
>mapguide-users mailing list
>[email protected]
>http://lists.osgeo.org/mailman/listinfo/mapguide-users

= = = = = = = = = = = = = = = = = = = =
                        

        致
礼!
 
                                 
        champingfor
[EMAIL PROTECTED]
          2007-09-29
---------------------------------
MapGuide Developer Network(China)
http://www.mgdn.com.cn

_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

Reply via email to