2010-09-30 67 views
0

我试图把一个注解当前可见的地图区域的左下角一个MapView关闭的左下角,虽然下面的代码坐标几个像素

CLLocationCoordinate2D origin = getOriginOfRegion(mapView.region); 
[[[SimpleAnnotation alloc] initWithCoords:origin] autorelease]; 
... 
extern CLLocationCoordinate2D getOriginOfRegion(MKCoordinateRegion region){ 
    return CLLocationCoordinate2DMake(region.center.latitude-region.span.latitudeDelta/2, 
            region.center.longitude-region.span.longitudeDelta/2); 
} 

其中SimpleAnnotation是它很简单,把针点几度离实际的弯道:

在右侧缩放级别更高,因为你可以看到的错误是显著更小。

我试着做一些数学来对付它,考虑到这个错误可能与椭圆坐标投影到飞机上有关,但没有提出任何有用的东西。

有没有人解决过这个问题?我注意到mapView上的纬度值不是'线性的',我需要一些提示来理解如何转换它们。

回答

2

我不知道这是否可行,但我建议你试着让地图视图转换视图坐标到地图坐标convertPoint:toCoordinateFromView:

例如:

CGPoint bottomLeftPoint = CGPointMake(CGRectGetMinX(map.bounds), CGRectGetMaxY(map.bounds)); 
CLLocationCoordinate2D bottomLeftCoord = [map convertPoint:bottomLeftPoint toCoordinateFromView:map]; 
+0

我相信这会工作,但我试图了解它背后的数学。 – Pyetras 2010-09-30 20:15:46

+0

我无法解释它。根据维基百科,纬度和纬度之间的一度纬度的长度只有很小的变化(约1%)。 – 2010-09-30 20:47:03