سؤال

لقد حصلت على قاعدة بيانات للرموز البريدية وخطوط الطول/خطوط العرض الخاصة بها، وما إلى ذلك من هذاهذه الصفحة.وقد حصلت على الحقول التالية:

الرمز البريدي، خط العرض، الطول، المدينة، الولاية، المقاطعة، ZIP_CLASS

كانت البيانات في ملف نصي ولكني قمت بإدراجها في جدول MySQL.سؤالي الآن هو، كيف يمكنني استخدام الحقول أعلاه لحساب المسافة بين رمزين بريديين يمكن للمستخدم إدخالهما على موقع الويب؟سيكون موضع تقدير رمز العمل في PHP

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

المحلول

ويمكنك أيضا محاولة ضرب إحدى خدمات الويب للاحسب المسافة. السماح لشخص آخر القيام رفع الأحمال الثقيلة.

https://www.zipcodeapi.com/API#distance

نصائح أخرى

هذه إجابة مايك مع بعض التعليقات التوضيحية لـ أرقام سحرية.يبدو أنه يعمل بشكل جيد بالنسبة لي بعض بيانات الاختبار:

function calc_distance($point1, $point2)
{
    $radius      = 3958;      // Earth's radius (miles)
    $deg_per_rad = 57.29578;  // Number of degrees/radian (for conversion)

    $distance = ($radius * pi() * sqrt(
                ($point1['lat'] - $point2['lat'])
                * ($point1['lat'] - $point2['lat'])
                + cos($point1['lat'] / $deg_per_rad)  // Convert these to
                * cos($point2['lat'] / $deg_per_rad)  // radians for cos()
                * ($point1['long'] - $point2['long'])
                * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;  // Returned using the units used for $radius.
}

ويمكن ان يتم ذلك مع الرياضيات فقط ...

function calc_distance($point1, $point2)
{
    $distance = (3958 * 3.1415926 * sqrt(
            ($point1['lat'] - $point2['lat'])
            * ($point1['lat'] - $point2['lat'])
            + cos($point1['lat'] / 57.29578)
            * cos($point2['lat'] / 57.29578)
            * ($point1['long'] - $point2['long'])
            * ($point1['long'] - $point2['long'])
        ) / 180);

    return $distance;
}

تفحص ال صيغة هافيرسين لحساب مسافات الدائرة الكبرى بين نقطتين.يمكن العثور على بعض المزيد من العينات هنا

صيغة هافرسين:

  • R = نصف قطر الأرض (متوسط ​​نصف القطر = 6,371 كم)
  • Δlat = lat2− lat1
  • Δطويل = طويل2− طويل1
  • ا = الخطيئة²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
  • ج = 2.atan2(√a, √(1−a))
  • د = آر سي

(لاحظ أن الزوايا يجب أن تكون بالراديان لتمريرها إلى الدوال المثلثية).

في الجدول البريدي الخاص بك تحتاج إلى الاستيلاء على الإحداثيات (خطوط الطول، طويلة) لمدة النقاط التي كنت ترغب في الحصول على المسافة.

ويمكنك بعد ذلك إما حساب الحق عن بعد في SQL أو مع PHP. وترد كلتا الطريقتين في هذا المنصب:

HTTP : //dev.strategystar.net/2011/10/mysql-php-get-distance-between-two-coordinates-in-miles-kilometers/

ويتم احتساب في المثال على صيغة نوقشت في هذا الموضوع. ويوفر نصف قطر للأرض في كل من الأميال والكيلومترات لذلك سوف يسمح لك للحصول على المسافة بين نقطتين في كل وحدة.

والوصلة أعلاه هو عظيم لأنه لا يتضمن طريقة لحساب أي أرقام سحرية، فقط نصف قطر الأرض!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top