我有2个坐标,左上角和右下角。我想找到该地区的中心点。现在我有以下方法来计算它。中心点远离。当我用
调用方法时[self.map setRegionTopLeft: CLLocationCoordinate2DMake(21.57524, -157.984514)
bottomRight: CLLocationCoordinate2DMake(21.309766, -157.80766)
animated:YES];
它应该以美国夏威夷州的瓦胡岛为中心。我找到了这个数学here,所以我不确定它们是怎么回事。
代码A - 这是关闭的。它不会把我放在岛附近。
- (CLLocationCoordinate2D)centerPointFromRegionTopLeft:(CLLocationCoordinate2D)topLeft
bottomRight:(CLLocationCoordinate2D)bottomRight
{
CLLocationCoordinate2D centerPoint;
centerPoint.longitude = (topLeft.longitude + bottomRight.longitude) / 2;
if (fabs(bottomRight.longitude - topLeft.longitude) > 180)
{
if (centerPoint.longitude > 0)
{
centerPoint.longitude = centerPoint.longitude + 180;
} else {
centerPoint.longitude = centerPoint.longitude - 180;
}
}
centerPoint.latitude = asin((sin(bottomRight.latitude) + sin(topLeft.latitude))/2);
return centerPoint;
}
我原本也尝试过这种方法。当我想到一个矩形的中心时,它就是我脑海中浮现的东西。如果让我更接近中心应该是什么 - 我可以看到岛屿 - 但它仍然关闭。
代码B - 我试过的原始代码。这更接近我的预期,但仍然关闭。
- (CLLocationCoordinate2D)centerPointFromRegionTopLeft:(CLLocationCoordinate2D)topLeft
bottomRight:(CLLocationCoordinate2D)bottomRight
{
CLLocationCoordinate2D centerPoint;
centerPoint.latitude = ((topLeft.latitude + bottomRight.latitude) / 2);
centerPoint.longitude = ((topLeft.longitude + bottomRight.longitude) / 2);
return centerPoint;
}
所以给定一个坐标区域(topLeft,bottomRight)如何获得中心坐标?我的想法是我应该能够给出任何2个坐标并得到中心坐标。
更新* 代码B有效。我的topLeft和bottomRight错了。代码A让我非常向南,并且在我应该的位置的东边。
答案 0 :(得分:0)
你需要L(经度)和B(纬度)的中间值。对于B来说问题是在杆子周围,但是当你设置它时,你根本无法“将杆盖在杆子上”,所以,这里真的没问题。
Middle(B1,B2)=(B1+B2)/2.
但是L更糟糕。 L可以从-179跳到-179。另一个问题:(-179,+ 179)的中间应该是180,而中间(-1,+ 1)应该是0.也就是说,我们应该总是在相对点之间沿着较短的路径选择中间,而不是在整个地球周围
我们应该移动零子午线,使L1,L2之间的差值小于180,使它们正常中间,然后返回零子午线。
问题是当L2-L1 = 180时。在这种情况下,你有两个相反的经线,将地球分为两个,而中间的角色是“四分之一”子午线,向右和向左,适合。这取决于你,选择什么。