ThinkGeo.com    |     Documentation    |     Premium Support

Dynamic TrackShapes Display problem

Hi, I've been playing around with the Dynamic TrackShapes application from the code community, to try and modify it to do something a little different than what the original one did.


What I am trying to do is dynamically report the length of the last line segment being tracked so the distance between the last vertex actually clicked and the tracking of the mouse point.


The way I try to do this is something like this:



int idx = (areaBaseShape as PolygonShape).OuterRing.Vertices.Count;
Vertex v1 = (areaBaseShape as PolygonShape).OuterRing.Vertices[idx-2];
Vertex v2 = e.MovedVertex;
            
LineShape ls = new LineShape(new Vertex[]{v1,v2});
Perimeter = ls.GetLength( winformsMap1.MapUnit, DistanceUnit.Kilometer );


where areaBaseShape is the shape being tracked


but when tracking around i get very strange numbers, ranging from 10 to upwards of the thousands by only moving the mouse a small bit.  Is there something wrong with the way i am calculating this distance? or is there a better way to accomplish what i am attempting to do?


thanks in advance,


-- Andy



I believe i found my problem for the strange numbers.  using the e.MovedVertex and the vertex at position -2 from the end only gives the distance from where the mouse was to where the mouse moved to.


But i do have another question. 


How does the GetPerimeter function actually calculate the perimeter.  Because when i have a shape that has only 2 defined vertices i use the GetPerimeter() on the shape. But if there are 3 or more vertices I Create a new LineShape with the last clicked vertex and the current mouse point.  What is strange is that if I make an initial line that is 10,000km long on the example application ( ie. only clicked 2 vertex points). And then if i try to measure my accuracy by calculating the last line segment, by moving my mouse over to the original point, i get a value that is almost exactly half of what my original line was.


Does get perimeter just calculate the distance between all of the vertices in a polygon shape and sum them together?



Andy, 
  
 Thanks for your post and sharing. 
  
 For the polygon shape, its calculating perimeter logic is to get all the perimeters of Rings contained in the polygon, including the OutRing and InnnerRings if it has. 
  
 For each Ring, as you already thought, just get the distance between all of the vertices and sum them together. While one thing I want to point out is that the distance logic between DecimalDegrees and Meter(or Feet) are quite different, so when you verify the result, just pay some attention to the unit you are using . 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Thanks for the response Yale,  
  
 That clears things up for me quite well.

Andy, 
  
 Thanks for your feedback. 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale