ThinkGeo.com    |     Documentation    |     Premium Support

GetLineOnLine Problem

Hello,


I create a LineShape by as follows coordinates


LineShape  lineShape;


X: 121.4995; Y: 25.0003 


X: 121.4994; Y: 25.0002


X: 121.4993; Y: 25.0000 


Now, I want to use two coordinates to calculate the distances of two top point.


 PointShape FnodePointShape = lineShape.GetPointOnALine(StartingPoint.FirstPoint, 0);

PointShape TnodePointShape = lineShape.GetPointOnALine(StartingPoint.LastPoint, 0);

PointShape GisPointShape = new PointShape(dGisX, dGisY);

double FnodeLength = (lineShape.GetLineOnALine(FnodePointShape, GisPointShape)).GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Meter);


double TnodeLength = (lineShape.GetLineOnALine(TnodePointShape, GisPointShape)).GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Meter);


It is strange. I don't know why it always error by  PointShape GisPointShape = new PointShape(121.48, 25).


error message is 'The shape you provided does not pass our simple validation.'


I try to test other coordinates, all are correct.


ex. 121.5, 25    121.49,25    121.475, 25   121.485 25




          



Carol, 
  
 I can reproduce your problem at my machine, I will let you know if I find the reason. 
  
 Thanks 
 James

Carol,


Thanks for your post and interesting question.
 
I tried your sample data and I don’t agree it is working correctly for other coordinates as you said, take a try on the following code snippet:
 

LineShape lineShape = new LineShape();
lineShape.Vertices.Add(new Vertex(121.4995, 25.0003 ));
lineShape.Vertices.Add(new Vertex(121.4994, 25.0002 ));
lineShape.Vertices.Add(new Vertex(121.4993, 25.0000 ));
 
//double dGisX = 121.48;
//double dGisY = 25;
 
double dGisX = 121.5;
double dGisY = 25;
 
PointShape FnodePointShape = lineShape.GetPointOnALine(StartingPoint.FirstPoint, 0);
PointShape TnodePointShape = lineShape.GetPointOnALine(StartingPoint.LastPoint, 0);
PointShape GisPointShape = new PointShape(dGisX, dGisY);
double FnodeLength = (lineShape.GetLineOnALine(FnodePointShape, GisPointShape)).GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Meter);
 
double TnodeLength = (lineShape.GetLineOnALine(TnodePointShape, GisPointShape)).GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Meter);

 
I think this problem is happening because the GetLineOnALine API returns back an invalid lineshape , for example, it does not contains any points in it. I did some investigations on the logic of GetLineOnALine API and found that this will always be happening if the passed in two points referred to the same closest point shape in the lineShape.
 
Any more questions or concerns please do not hesitate to let me know, and Happy New Year 2011!
 
Thanks.
 
Yale

Thanks for your reply, Yale 
 Sorry, I still don’t understand clearly. 
 please you explain more.And I how to do it? 
 If I’d like to calculate the distance of two points in the line.

Carol, 
  
 I think Yale’s reply said that the result of lineShape.GetLineOnALine(TnodePointShape, GisPointShape) is a empty lineShape, so you can not get length from it, the reason is that your orginal lineshape is two small, all the input points will find the same vertex, so like you pass in two points which the same coordinate, obviously the result is empty line.  
  
 You can enlarge your line shape and try again, you can understand what Yale said. 
  
 Thanks 
 James