ThinkGeo.com    |     Documentation    |     Premium Support

Feature tag disappears when adding vertex in editoverlay

I've come upon some strange
behaviour, possibly a bug.


 


I have a feature (multipolygon or
multilinestring) 'feat' in my map's TrackOverlay TrackShapeLayer. feat.Tag has
been assigned a string that's useful to me. 


 


I want the user to be able to edit
this feature, so after the user presses a 'edit feature' button I do the
following:


 


map.TrackOverlay.TrackShapeLayer.InternalFeatures.Remove(feat);


map.EditOverlay.EditShapesLayer.InternalFeatures.Add(feat);


 


At this point, feat still has its
Tag. 


 


The user can now move the feature
around, rotate, resize, etc. Then when pressing the 'edit feature' button again,
the feature is put back into the TrackShapeLayer.


 


Feature feat = map.EditOverlay.EditShapesLayer.InternalFeatures[0];


map.TrackOverlay.TrackShapeLayer.InternalFeatures.Add(feat);


map.EditOverlay.EditShapesLayer.InternalFeatures.Clear();


 


In most cases, feat still has its Tag when I
add it to the TrackShapeLayer. However, if the user has at some point while editing
added a vertex by clicking on the line between two existing vertices, feat.Tag
is set to null. 


 


Why is this, and how can I stop my Tag
from getting lost?



Hello, 
  
 I guess you are right. It was a bug in EditOverlay and thanks for reporting the issue. 
 Now, it have been fixed in latest version(7.0.0.144 or 7.0.144.0). (PS: The latest version is still packaging, please waiting several hours.) 
  
 If the issue persists, please let us know. 
 Thank, 
 Johnny 


I’m really glad you responded so quickly, and would like to accept your answer to this and my other question, but the latest version in my portal is still DesktopEditionFull7.0.0.142DllPackage.zip. Am I looking in the wrong place?

Hi, 
  
 There is a mistake on our daily build server and now it should be ok. 
 Would you please try again? 
  
 Thanks, 
 Johnny

I tried with DesktopEditionFull7.0.0.151DllPackage and noticed no change in behavior.

Hello, 
  
 Sorry we just modified in the development version. Now, please get the 7.0.0.156 or 7.0.156.0 to fix it. 
 PS: Recently, the new dll package might be delayed, would you please wait for another days? 
  
 thanks for the understanding. 
 Regards, 
 Johnny

Until now I thought the fix was complete, but I’ve just discovered that the Tag still gets lost when the user re-sizes a rectangle object. 



The code I use for letting the user edit rectangles comes directly from the example: wiki.thinkgeo.com/wiki/Source_Code_DesktopEditionSample_EditingRectangles_CS_100204.zip (apart from the fact that I also override the CalculateRotateControlPointsCore)

Hi, 
  
 Yes we can find the tag missing with the codes in the CustomEditInteractiveOverlay class, please following the below codes on the ResizeFeatureCore method: 
  
protected override Feature ResizeFeatureCore(Feature sourceFeature, PointShape sourceControlPoint, PointShape targetControlPoint)
        {
            // Override the base method and modify the logic for resizing if the shape is the "custom"
            if (sourceFeature.ColumnValues.ContainsKey("Edit") && sourceFeature.ColumnValues["Edit"] == "rectangle")
            {
                PolygonShape polygonShape = sourceFeature.GetShape() as PolygonShape;

                if (polygonShape != null)
                {
                    // If the rectangle is horizontal or vertical, it will use the custom method.
                    if (string.Equals(polygonShape.GetBoundingBox().GetWellKnownText(), polygonShape.GetWellKnownText()))
                    {
                        int fixedPointIndex = GetFixedPointIndex(polygonShape, sourceControlPoint);

                        PointShape fixedPointShape = new PointShape(polygonShape.OuterRing.Vertices[fixedPointIndex]);

                        RectangleShape newRectangleShape = new LineShape(new Vertex[] { new Vertex(fixedPointShape), new Vertex(targetControlPoint) }).GetBoundingBox();

                        Feature resultFeature = new Feature(newRectangleShape.GetWellKnownBinary(), sourceFeature.Id, sourceFeature.ColumnValues);
                        resultFeature.Tag = sourceFeature.Tag;
                        return resultFeature;
                    }
                }
            }

            return base.ResizeFeatureCore(sourceFeature, sourceControlPoint, targetControlPoint);
        }

 
 Hope it works for you. 
 Regards, 
 Troy

It does :D 
 Thanks!

Hi, 
  
 Good to hear it works. 
  
 Regards, 
 Troy