ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
195 visibility
موضوع: آفیس توسط:

مایک مقادیر طول و عرض جغرافیایی را در یک کاربرگ اکسل ردیابی می کند. از آنجایی که اینها اساساً نقاط روی یک شبکه هستند، مایک می‌خواهد فاصله بین هر دو نقطه طول و عرض جغرافیایی معین را محاسبه کند.

اگر جفت طول و عرض جغرافیایی واقعاً فقط نقاط روی یک شبکه بودند، محاسبه فاصله بین آنها آسان خواهد بود. مشکل این است که آنها واقعاً نقاط روی یک کره هستند، به این معنی که شما نمی توانید از محاسبات شبکه مسطح برای تعیین فاصله استفاده کنید. علاوه بر این، راه‌های زیادی وجود دارد که می‌توانید فاصله‌ها را محاسبه کنید: کوتاه‌ترین فاصله سطحی، مسیر پرواز بهینه ("همانطور که کلاغ پرواز می‌کند")، فاصله از طریق زمین، مسافت رانندگی و غیره.

بدیهی است که این می تواند یک سوال پیچیده باشد. در فضای موجود، چند روش برای تعیین فاصله دایره بزرگ ("همانطور که کلاغ پرواز می کند") را بررسی می کنم، و سپس برخی از مراجع را برای اطلاعات بیشتر در مورد انواع دیگر محاسبات ارائه می کنم.

اولین چیزی که باید بدانید این است که طول و عرض جغرافیایی هر نقطه در اکسل چگونه نمایش داده می شود. راه های مختلفی وجود دارد که می توان آن را نشان داد. به عنوان مثال، می توانید درجات، دقیقه ها و ثانیه ها را در سلول های جداگانه وارد کنید. یا، می توانید آنها را در یک سلول به عنوان 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
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

610 دیدگاه

10.1k کاربر

107 نفر آنلاین
0 عضو و 107 مهمان در سایت حاضرند
بازدید امروز: 400
بازدید دیروز: 22304
بازدید کل: 17122326
...