将经度/纬度坐标转换为MKMapView上的笛卡尔坐标

时间:2014-12-22 11:28:59

标签: objective-c mkmapview cgpoint

我有三个点A,B和P,它们都是由它们的经度/纬度坐标定义的。

现在我试图实现一个算法(另见http://lukagabric.com/distance-from-point-to-line-segment/#comment-60758),以计算点P和AB线之间的最短距离:

CLLocationCoordinate2D a;
CLLocationCoordinate2D b;
CLLocationCoordinate2D p;
a.latitude = 3;
a.longitude = 3;
b.latitude = 3.01;
b.longitude = 3.01;
p.latitude = 11;
p.longitude = 11;

CGPoint A = [mapView convertCoordinate:a toPointToView:mapView];
CGPoint B = [mapView convertCoordinate:b toPointToView:mapView];
CGPoint P = [mapView convertCoordinate:p toPointToView:mapView];    

if ((P.x - A.x) * (B.x - A.x) + (P.y - A.y) * (B.y - A.y) < 0) {
    return sqrt(pow((P.x - A.x), 2) + pow((P.y - A.y), 2));
}
else if((P.x - B.x) * (A.x - B.x) + (P.y - B.y) * (A.y - B.y) < 0) {
    return sqrt(pow(P.x - B.x, 2) + pow(P.y - B.y, 2));
}
else {return ABS((P.x * (A.y - B.y) + P.y * (B.x - A.x) + (A.x * B.y - B.x * A.y)) / sqrt(pow(B.x - A.x, 2) + pow(B.y - A.y, 2)));
}

算法应该没问题。但可能我从经度/纬度到笛卡尔坐标的转换是错误的。我的代码使用内置的objective-c函数:

(CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate
           toPointToView:(NSView *)view

这种方法似乎不对,因为结果(48)与预期距离(约1252000米)非常不同。有谁知道我从经度/纬度到笛卡尔坐标的转换是错误的?可能需要按比例放大转换后的笛卡尔坐标。

0 个答案:

没有答案