ユーザーが選択した 2 地点間の距離を表示する機能を配置したいと考えています。
そのために利用できるサンプル ソース コード/サービスはありますか?
前もって感謝します。
CoreLocation フレームワークは、2 点間の距離 (メートル単位) を算出する機能を提供します。
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
CLLocation
緯度と経度でオブジェクトを初期化できます。
- (id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude
CLLocation オブジェクトが 2 つある場合は、次のようにするだけです。
[location1 getDistanceFrom:location2];
ただし、それはポイントツーポイントにすぎません。特定のルートの距離が必要な場合は、それはまったく別のやかんです。
私は iPhone の開発に詳しくありませんが、Haversine 式を使用して 2 点間の距離を計算するための 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
}
これは CLLocation フレームワークのタスクです。2 点の既知の座標を使用して (まだ持っていない場合) 2 つの CLLocation オブジェクトを作成し、次を使用してそれらの間の距離を見つけます。
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
方法。
それは、両方のポイントの間にどのような違いを持たせたいかによって異なります。マップ上では、空中距離は必要ないと思います。次に、http://iosboilerplate.com/を確認する必要があります。
それでも空中距離を使用したい場合は、Core Location を使用してください。
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
受信者の位置から指定された位置までの距離 (メートル単位) を返します。(iOS 3.2 では廃止されました。distanceFromLocation を使用します。
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location