since i can't find way to edit the vertex using built-in function, i decided
to allow user to draw multiple polygons. the selected polygons can later be
used to be combined, or clear polygons that it overlaps with.


here's the sample code:

<html>

<head>  
        
</head>

<body class="AppFrame" onLoad="InitDocument()">
<%              
                bool mapUpdated = false;
                string returnStat = "";
                
                string mgSessionId = GetParameters()["SESSION"];
                
                Uri MyUrl = Request.Url;
                Response.Write("URL: " + MyUrl.AbsoluteUri+ "<br><br>");
                
                try
                {
                string selXml = GetParameters()["selXml"];
                string selCmd = GetParameters()["command"];
                        
                        Response.Write(selCmd + "<br>");
                        Response.Write(selXml);
                        
                        if(selCmd=="remove")
                                ClearPolygon(selXml, mgSessionId);
                        if(selCmd=="combine")
                                returnStat = CombinePolygon(selXml, 
mgSessionId);
                        if(selCmd=="removeall")
                                ClearPolygon(mgSessionId);
                        if(selCmd=="combineall")
                                returnStat = CombinePolygon(mgSessionId);
                        
                        if(returnStat=="")
                                mapUpdated = true;
                }
                
                catch (MgException mge)
        {
            Response.Write(mge.GetExceptionMessage());
            Response.Write(mge.GetDetails());
        }
%>
</body>



</html>

<script language="c#" runat="server">

void ClearPolygon(string mgSessionId)
{
        Clear("ID > 0", mgSessionId);
}

void ClearPolygon(string selectionXml, string mgSessionId)
{
        MgUserInformation userInfo = new MgUserInformation(mgSessionId);
        MgSiteConnection siteConnection = new MgSiteConnection();
        siteConnection.Open(userInfo);
        
        MgMap map = new MgMap(siteConnection);
        map.Open(WORLD_MAP);
        
        MgLayer polyLayer = GetLayerByName(map, "PolyMarker");
        MgSelection selection = new MgSelection (map, selectionXml);
        Clear(selection.GenerateFilter(polyLayer,"PolyMarker"), mgSessionId);
}

void Clear(string selectionFilter, string mgSessionId)
{               
        try
        {                       
                InitializeWebTier ();

                MgUserInformation userInfo = new MgUserInformation(mgSessionId);
                MgSiteConnection siteConnection = new MgSiteConnection();
                siteConnection.Open(userInfo);
                
                MgResourceService resourceService =
siteConnection.CreateService(MgServiceType.ResourceService) as
MgResourceService;
                MgFeatureService featureService =
siteConnection.CreateService(MgServiceType.FeatureService) as
MgFeatureService;
                
                MgResourceIdentifier FeatureSourceId = new 
MgResourceIdentifier("Session:"
+ mgSessionId  + "//PolyMarker.FeatureSource");
                MgFeatureCommandCollection Commands = new 
MgFeatureCommandCollection();
                
                MgMap map = new MgMap(siteConnection);
                map.Open(WORLD_MAP);
                
                MgLayer polyLayer = GetLayerByName(map, "PolyMarker");
                
                if (polyLayer != null)
                {
                        Response.Write("<br/>" + selectionFilter);
                        
                        Commands.Add(new MgDeleteFeatures("PolyMarker", 
selectionFilter));
                        
                        //featureService.UpdateFeatures(FeatureSourceId, 
Commands, false);
                        
ReleaseReader(featureService.UpdateFeatures(FeatureSourceId, Commands,
false), Commands);

                        polyLayer.SetVisible(true);
                        polyLayer.ForceRefresh();

                        map.Save(resourceService);
                }
        }
        
        catch (MgException mge)
        {
                Response.Write(mge.GetExceptionMessage());
                Response.Write(mge.GetDetails());
        }
}

string CombinePolygon(string mgSessionId)
{
        return Combine("ID > 0", mgSessionId);
}

string CombinePolygon(string selectionXml, string mgSessionId)
{
        MgUserInformation userInfo = new MgUserInformation(mgSessionId);
        MgSiteConnection siteConnection = new MgSiteConnection();
        siteConnection.Open(userInfo);
        
        MgMap map = new MgMap(siteConnection);
        map.Open(WORLD_MAP);
        
        MgLayer polyLayer = GetLayerByName(map, "PolyMarker");
        MgSelection selection = new MgSelection (map, selectionXml);
        return Combine(selection.GenerateFilter(polyLayer,"PolyMarker"),
mgSessionId);
}

string Combine(string selectionFilter,string mgSessionId)
{
        bool flag = true;
        DateTime startTime = DateTime.Now;
        
        try
        {
                InitializeWebTier ();

                MgUserInformation userInfo = new MgUserInformation(mgSessionId);
                MgSiteConnection siteConnection = new MgSiteConnection();
                siteConnection.Open(userInfo);
                
                MgResourceService resourceService =
siteConnection.CreateService(MgServiceType.ResourceService) as
MgResourceService;
                MgFeatureService featureService =
siteConnection.CreateService(MgServiceType.FeatureService) as
MgFeatureService;
                
                MgResourceIdentifier FeatureSourceId = new 
MgResourceIdentifier("Session:"
+ mgSessionId  + "//PolyMarker.FeatureSource");
                MgFeatureCommandCollection Commands = new 
MgFeatureCommandCollection();
                
                MgMap map = new MgMap(siteConnection);
                map.Open(WORLD_MAP);
                
                MgLayer polyLayer = GetLayerByName(map, "PolyMarker");
                
                if (polyLayer != null)
                {                       
                        Response.Write("<br/>" + selectionFilter);
                        
                        MgFeatureQueryOptions selQuery = new 
MgFeatureQueryOptions();
                        selQuery.SetFilter(selectionFilter);
                        
                        MgFeatureReader featureReader = 
polyLayer.SelectFeatures(selQuery);
                        
                        MgGeometryCollection geometries = new 
MgGeometryCollection();
                        MgAgfReaderWriter geometryReaderWriter = new 
MgAgfReaderWriter();
                        MgGeometryFactory geometryFactory = new 
MgGeometryFactory();
                        MgPolygon newPolygon;
                                                        
                        while(featureReader.ReadNext())
                        {
                                MgByteReader temp = 
featureReader.GetGeometry("GEOM");
                                
                                MgGeometry tempGeo = 
geometryReaderWriter.Read(temp);
                                
                                geometries.Add(tempGeo);
                        }
                        
                        for(int i=0; i<geometries.GetCount(); i++)      // 
check if geometries
intersects with each other
                        {
                                bool onceIntersect = false;
                                for(int j=0; j<geometries.GetCount(); j++)
                                {
                                        if(i!=j)
                                                
if(geometries.GetItem(i).Intersects(geometries.GetItem(j)))
                                                        onceIntersect = true;
                                }
                                if(!onceIntersect)
                                {
                                        flag = false;
                                        return "Not all polygon intersects with 
each other";
                                }
                        }
                        
                        if(flag)
                        {
                                MgGeometry newGeometry = geometries.GetItem(0);
                                
                                for(int i=1; i<geometries.GetCount(); i++)      
// combine the geometries
                                {
                                        newGeometry = 
newGeometry.Union(geometries.GetItem(i));
                                }

                                MgByteReader geom = 
geometryReaderWriter.Write(newGeometry);
                                
                                MgPropertyCollection properties = new 
MgPropertyCollection();
                                
                                properties.Add(new MgGeometryProperty("GEOM", 
geom));
                                properties.Add(new MgStringProperty("Text", 
""));
                                
                                Commands.Add(new MgDeleteFeatures("PolyMarker", 
selectionFilter));
                                Commands.Add(new MgInsertFeatures("PolyMarker", 
properties));
                                
                                
//featureService.UpdateFeatures(FeatureSourceId, Commands, false);
                                
ReleaseReader(featureService.UpdateFeatures(FeatureSourceId, Commands,
false), Commands);
                                
                                map.Save(resourceService);
                                polyLayer.SetVisible(true);
                                polyLayer.ForceRefresh();
                        }
                }
        }
        
        catch (MgException mge)
        {
                Response.Write(mge.GetExceptionMessage());
                Response.Write(mge.GetDetails());
        }
        
        return "";
}



--
View this message in context: 
http://osgeo-org.1560.n6.nabble.com/Edit-polygon-tp4183861p5005108.html
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

Reply via email to