مایک مقادیر طول و عرض جغرافیایی را در یک کاربرگ اکسل ردیابی می کند. از آنجایی که اینها اساساً نقاط روی یک شبکه هستند، مایک میخواهد فاصله بین هر دو نقطه طول و عرض جغرافیایی معین را محاسبه کند.
اگر جفت طول و عرض جغرافیایی واقعاً فقط نقاط روی یک شبکه بودند، محاسبه فاصله بین آنها آسان خواهد بود. مشکل این است که آنها واقعاً نقاط روی یک کره هستند، به این معنی که شما نمی توانید از محاسبات شبکه مسطح برای تعیین فاصله استفاده کنید. علاوه بر این، راههای زیادی وجود دارد که میتوانید فاصلهها را محاسبه کنید: کوتاهترین فاصله سطحی، مسیر پرواز بهینه ("همانطور که کلاغ پرواز میکند")، فاصله از طریق زمین، مسافت رانندگی و غیره.
بدیهی است که این می تواند یک سوال پیچیده باشد. در فضای موجود، چند روش برای تعیین فاصله دایره بزرگ ("همانطور که کلاغ پرواز می کند") را بررسی می کنم، و سپس برخی از مراجع را برای اطلاعات بیشتر در مورد انواع دیگر محاسبات ارائه می کنم.
اولین چیزی که باید بدانید این است که طول و عرض جغرافیایی هر نقطه در اکسل چگونه نمایش داده می شود. راه های مختلفی وجود دارد که می توان آن را نشان داد. به عنوان مثال، می توانید درجات، دقیقه ها و ثانیه ها را در سلول های جداگانه وارد کنید. یا، می توانید آنها را در یک سلول به عنوان DD:MM:SS داشته باشید. هر دو روش قابل قبول است، اما باید در فرمول های شما به گونه ای متفاوت با آنها رفتار شود. چرا؟ زیرا اگر طول و عرض جغرافیایی را به صورت DD:MM:SS وارد کنید، اکسل آنها را به صورت داخلی به مقدار زمانی تبدیل می کند و فقط باید این تبدیل را در نظر بگیرید.
کاری که باید انجام دهید، مهم نیست که چه کاری انجام دهید، این است که طول و عرض جغرافیایی خود را به یک مقدار اعشاری بر حسب رادیان تبدیل کنید. اگر یک مختصات در سه خانه جداگانه (درجه، دقیقه و ثانیه) دارید، می توانید از فرمول زیر برای تبدیل به یک مقدار اعشاری بر حسب رادیان استفاده کنید:
=RADIANS((Degrees*3600+Minutes*60+Seconds)/3600)
این فرمول از محدوده های نامگذاری شده برای درجات، دقیقه ها و ثانیه های شما استفاده می کند. این سه مقدار را به یک مقدار تبدیل می کند که مجموع درجه را نشان می دهد و سپس از تابع RADIANS برای تبدیل آن به رادیان استفاده می کند. اگر با مقدار 32 درجه، 48 دقیقه و 0 ثانیه شروع کنید، فرمول به شکل زیر در می آید:
=RADIANS((32*3600+48*60+0)/3600)
=RADIANS((115200+2880+0)/3600)
=RADIANS(118080/3600)
=RADIANS(32.8)
=0.572467995
اگر مختصات خود را در قالب DD:MM:SS در یک سلول ذخیره می کنید (در این مثال، سلول E12)، می توانید از فرمول زیر برای تبدیل به یک مقدار اعشاری در رادیان استفاده کنید:
=RADIANS((DAY(E12)*86400+HOUR(E12)*3600+MINUTE(E12)*60+SECOND(E12))/3600)
با فرض اینکه سلول E12 حاوی 32:48:00 باشد، فرمول به شکل زیر در می آید:
=RADIANS((1*86400+8*3600+48*60+0)/3600)
=RADIANS((86400+28800+2880+0)/3600)
=RADIANS(118080/3600)
=RADIANS(32.8)
=0.572467995
با مختصات خود در رادیان، می توانید از یک فرمول مثلثاتی برای محاسبه فاصله در امتداد سطح یک کره استفاده کنید. بسیاری از این فرمول ها وجود دارد که می توان از آنها استفاده کرد. فرمول زیر برای اهداف ما کافی است:
=ACOS(SIN(Lat1)*SIN(Lat2)+COS(Lat1)*COS(Lat2)*COS(Lon2-Lon1))*180/PI()*60
در این فرمول، هر یک از مختصات عرض جغرافیایی (Lat1 و Lat2) و طول جغرافیایی (Lon1 و Lon2) باید یک مقدار اعشاری، بر حسب رادیان باشد، همانطور که قبلاً بحث شد. فرمول مقداری را بر حسب مایل دریایی برمیگرداند که میتوانید فرمولهای مختلفی را برای تبدیل به واحدهای اندازهگیری دیگر، به دلخواه، اعمال کنید.
باید توجه داشته باشید که مقادیری که با استفاده از هر فرمولی که فاصله روی سطح یک کره را محاسبه می کند به دست می آورید، نتایج کمی اشتباه خواهد داشت. چرا؟ زیرا زمین یک کره کامل نیست. بنابراین، فاصله ها را فقط باید تقریبی در نظر گرفت. اگر می خواهید کمی دقیق تر شوید، می توانید از فرمول زیر برای تعیین مایل دریایی خود استفاده کنید:
=ACOS(SIN(Lat1)*SIN(Lat2)+COS(Lat1)*COS(Lat2)*COS(Lon2-Lon1))*3443.89849
این فرمول شعاع زمین (3443.89849 مایل دریایی) را جایگزین شعاع یک کره (180/PI()*60 یا 3437.746771 میکند. در هر صورت، پاسخ را باید تقریبی در نظر گرفت.
همانطور که می توانید بگویید، فرمول محاسبه فاصله بسیار طولانی است. ممکن است برای شما آسان تر باشد که عملکرد تعریف شده توسط کاربر خود را توسعه دهید که محاسبه را برای شما انجام دهد. تابع زیر چهار مقدار (دو جفت طول و عرض جغرافیایی، بر حسب درجه) می گیرد و سپس نتیجه را بر حسب مایل دریایی برمی گرداند:
Function CrowFlies(dlat1, dlon1, dlat2, dlon2)
Pi = Application.Pi()
earthradius = 3443.89849 nautical miles
lat1 = dlat1 * Pi / 180
lat2 = dlat2 * Pi / 180
lon1 = dlon1 * Pi / 180
lon2 = dlon2 * Pi / 180
cosX = Sin(lat1) * Sin(lat2) + Cos(lat1) _
* Cos(lat2) * Cos(lon1 - lon2)
CrowFlies = earthradius * Application.Acos(cosX)
End Function
اگر میخواهید بحث عمیقتری در مورد طول و عرض جغرافیایی و ریاضیات مربوط به آن ببینید، میتوانید مجموعه خوبی از مقالات را در این سایت پیدا کنید:
http://mathforum.org/library/drmath/sets/select/dm_lat_long.html
با ریاضیات زیر کمربند خود، می توانید شروع به بررسی فرمول های مختلفی کنید که می توانید استفاده کنید. یک مورد جالب در VBA در این صفحه وب وجود دارد:
http://www.freevbcode.com/ShowCode.asp?ID=5532
یک بحث عمومی خوب را نیز می توان در سایت Chip Pearsons در اینجا یافت:
http://www.cpearson.com/excel/LatLong.aspx