如何计算两个地方之间的距离? Google Map for iphone是否提供任何服务?
题
我想设置显示用户选择的两个地方之间的距离。
是否有可用的示例源代码/服务?
提前致谢。
解决方案
CoreLocation Framework 提供了计算两点之间距离的能力:
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
您可以使用纬度和经度初始化CLLocation
对象:
- (id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude
其他提示
如果你有两个CLLocation对象,你可以这样做:
[location1 getDistanceFrom:location2];
然而,这只是点对点。如果你想要特定路线上的距离,那么这就是另外一条鱼。
这是CLLocation框架的任务。使用2点的已知坐标,您可以创建(如果您还没有)2个CLLocation对象,并使用
找到它们之间的距离- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
方法
我不熟悉iPhone开发,但这里是使用Haversine公式计算两点之间距离的C#代码:
/// <summary>
/// Computes the distance beween two points
/// </summary>
/// <param name="P1_Latitude">Latitude of first point (in radians).</param>
/// <param name="P1_Longitude">Longitude of first point(in radians).</param>
/// <param name="P2_Latitude">Latitude of second point (in radians).</param>
/// <param name="P2_Longitude">Longitude of second point (in radians).</param>
protected double ComputeDistance(double P1_Longitude, double P1_Latitude, double P2_Longitude, double P2_Latitude, MeasurementUnit unit)
{
double dLon = P1_Longitude - P2_Longitude;
double dLat = P1_Latitude - P2_Latitude;
double a = Math.Pow(Math.Sin(dLat / 2.0), 2) +
Math.Cos(P1_Latitude) *
Math.Cos(P2_Latitude) *
Math.Pow(Math.Sin(dLon / 2.0), 2.0);
double c = 2 * Math.Asin(Math.Min(1.0, Math.Sqrt(a)));
double d = (unit == MeasurementUnit.Miles ? 3956 : 6367) * c;
return d;
}
MeasurementUnit定义为:
/// <summary>
/// Measurement units
/// </summary>
public enum MeasurementUnit
{
Miles,
Kilometers
}
这取决于你想要在两点之间产生哪种差异。在地图上我认为你不想要空中距离。然后你应该查看 http://iosboilerplate.com/
如果您仍想使用空中距离,请使用核心位置。
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
返回从接收器<!>#8217; s位置到指定位置的距离(以米为单位)。 (在iOS 3.2中不推荐使用 distanceFromLocation:
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
不隶属于 StackOverflow