كيفية حساب المسافة بين مكانين؟ هل هناك أي خدمة توفرها جوجل خريطة للآيفون؟

StackOverflow https://stackoverflow.com/questions/1643138

  •  10-07-2019
  •  | 
  •  

سؤال

وأريد أن أضع منشأة لعرضه المسافة بين مكانين المختارة من قبل المستخدم.

هل هناك أي مصدر نموذج التعليمات البرمجية / الخدمة متاحة للقيام بذلك؟

وشكرا مقدما.

هل كانت مفيدة؟

المحلول

إطار CoreLocation يوفر القدرة على العمل على المسافة، بالأمتار، بين نقطتين:

- (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

والأسلوب.

وأنا لست على دراية التنمية فون، ولكن هنا هو C # رمز لحساب المسافة بين نقطتين باستخدام الصيغة Haversine:

/// <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

وإرجاع المسافة (متر) من موقع المتلقي إلى الموقع المحدد. (مستنكر في دائرة الرقابة الداخلية 3.2 استخدم وdistanceFromLocation:

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top