纬度:22.744812,经度:75.892578
以上将被视为我的中心点。
现在我需要确定从中心点向外 1000 米到每个 NSWE 角落的经纬度点。所以我会有一个中央长/纬度,N,S,E和W长/纬度..
所以我最终会得到 4 个额外的纬度/经度对。
我要解决的是一个公式,最好可以在标准计算器上完成,以根据中心点确定这 4 个 NSWE 点。
纬度:22.744812,经度:75.892578
以上将被视为我的中心点。
现在我需要确定从中心点向外 1000 米到每个 NSWE 角落的经纬度点。所以我会有一个中央长/纬度,N,S,E和W长/纬度..
所以我最终会得到 4 个额外的纬度/经度对。
我要解决的是一个公式,最好可以在标准计算器上完成,以根据中心点确定这 4 个 NSWE 点。
您可以为此使用 MapKit:
- (CLLocationCoordinate2D *) calculateSquareCoordinates:(CLLocation*)center withRadius:(float)radius{
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(center.coordinate, radius*2, radius*2);
CLLocationCoordinate2D points[4];
points[0] = CLLocationCoordinate2DMake(region.center.latitude - region.span.latitudeDelta/2, region.center.longitude - region.span.longitudeDelta/2);
points[1] = CLLocationCoordinate2DMake(region.center.latitude + region.span.latitudeDelta/2, region.center.longitude - region.span.longitudeDelta/2);
points[2] = CLLocationCoordinate2DMake(region.center.latitude + region.span.latitudeDelta/2, region.center.longitude + region.span.longitudeDelta/2);
points[3] = CLLocationCoordinate2DMake(region.center.latitude - region.span.latitudeDelta/2, region.center.longitude + region.span.longitudeDelta/2);
return points;
}
然后打电话
CLLocationCoordinate2D *fourPoints = [self calculateSquareCoordinates:center withRadius:1000];
在你的代码上。
您将不得不使用Haversine 公式根据与起始 Lat/Long 的距离来计算 Lat/Long。看看这个链接
地球的平均半径约为637.1万米。这意味着
1个纬度相当于6371000*PI/180米
(注意:PI = 3.14159... 等)。但是,1 度经度取决于您所在的纬度。在赤道,经度 1 度与纬度 1 度对应的距离以米为单位。但是,在北极和南极,所有经度值都是同一点(即极点本身),因此极点处的 1 度经度为零米。经度的公式是
1度经度相当于637100 * PI / 180 * COS(纬度)
其中 COS 是三角余弦函数。如果您进行这些转换,那么您可以在标准计算器上进行计算。但是,请注意,这些近似值在短距离(例如不到几百公里)上效果很好,但在长距离上(例如数千公里),它们变得越来越不准确。