رفتن به مطلب
  • 0

محاسبه فاصله دو نقطه جغرافیایی (فاصله خط مستقیم)


mobah

سوال

عرض ادب واحترام

تو سایت اصلی دنبال یک فرمول میگشتم که بشه  با اون فرمول  ،  فاصله دو نقطه جغرافیایی  را محاسبه کنم.

distances-driving.max-1300x1300.png

 

این کد  خوبه تو سایت اصلی دیدم ولی وقتی موقعیت رو عوض میکنی   بازم همون موقعیت قبلی رو نشون میده انگار فیکس کرده......

 

 

Sub distance(lat1 As Double, lon1 As Double, lat2 As Double, lon2 As Double) As Double
	Dim dist As Double
	
	Dim theta As Double
	theta = lon1 - lon2
	dist = Sin(deg2rad(lat1)) * Sin(deg2rad(lat2)) + Cos(deg2rad(lat1)) * Cos(deg2rad(lat2)) * Cos(deg2rad(theta))
	dist = ACos(dist)
	
	dist = rad2deg(dist)
	dist = dist * 1000
	
	
	Return dist * 60 * 1.1515

End Sub

Sub deg2rad(Deg As Double) As Double
	Dim pi As Double= 3.14159265358979
	Return Deg * pi / 180
End Sub

Sub rad2deg(Rad As Double) As Double
	Dim pi As Double= 3.14159265358979
	Return Rad * 180 / pi
End Sub

 

 

 

یک فرمول هست که این رو هم تست کردم   عالیه 

عیبش اینه که بار اول یک موقعیت بهش میدی جواب میده بعد عوض میکنی موقعیت رو بازم همون جواب اولی رو بهت میده

میشه راهنمایی کنید....

 

این هم فرمول دومی

dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2( sqrt(a), sqrt(1-a) )
d = R * c (where R is the radius of the Earth) 


	'شعاع زمین
	' Radius As Int = 6372.795477598
	' Radius As Int = 6371

 

اگر هستند کسی که کتابخانه براش بسازه یا فرمی بسازه که بعد از اولین محاسبه فیکس نکنه عالیه میشه.

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 6 ساعت قبل، Bahmanm گفته است :

 

سورس رو براتون ویرایش کردم.

gps.zip

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 4 دقیقه قبل، Bahmanm گفته است :

عرض ادب واحترام

تو سایت اصلی دنبال یک فرمول میگشتم که بشه  با اون فرمول  ،  فاصله دو نقطه جغرافیایی  را محاسبه کنم.

distances-driving.max-1300x1300.png

 

این کد  خوبه تو سایت اصلی دیدم ولی وقتی موقعیت رو عوض میکنی   بازم همون موقعیت قبلی رو نشون میده انگار فیکس کرده......

 

 


Sub distance(lat1 As Double, lon1 As Double, lat2 As Double, lon2 As Double) As Double
	Dim dist As Double
	
	Dim theta As Double
	theta = lon1 - lon2
	dist = Sin(deg2rad(lat1)) * Sin(deg2rad(lat2)) + Cos(deg2rad(lat1)) * Cos(deg2rad(lat2)) * Cos(deg2rad(theta))
	dist = ACos(dist)
	
	dist = rad2deg(dist)
	dist = dist * 1000
	
	
	Return dist * 60 * 1.1515

End Sub

Sub deg2rad(Deg As Double) As Double
	Dim pi As Double= 3.14159265358979
	Return Deg * pi / 180
End Sub

Sub rad2deg(Rad As Double) As Double
	Dim pi As Double= 3.14159265358979
	Return Rad * 180 / pi
End Sub

 

 

 

یک فرمول هست که این رو هم تست کردم   عالیه 

عیبش اینه که بار اول یک موقعیت بهش میدی جواب میده بعد عوض میکنی موقعیت رو بازم همون جواب اولی رو بهت میده

میشه راهنمایی کنید....

 

این هم فرمول دومی


dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2( sqrt(a), sqrt(1-a) )
d = R * c (where R is the radius of the Earth) 


	'شعاع زمین
	' Radius As Int = 6372.795477598
	' Radius As Int = 6371

 

اگر هستند کسی که کتابخانه براش بسازه یا فرمی بسازه که بعد از اولین محاسبه فیکس نکنه عالیه میشه.

 

 

دلیلی نداره که جوابها یکسان باشه مگه اینکه متغیرها رو سراسری تعریف کرده باشید.

شما یه کلاس بسازید و همه متغیرا رو لوکال تعریف کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

داخل فرمول اولی که تو سایت دیدم خوب جواب گرفتم تغییری ندادم ، فقط مشکلش اینه که وقتی متغییر طول و عرض جغرافیایی تغییر میکنه  جواب من تو برنامه تغییر نمیکنه

یعنی   برای هر متغییر  جدا جدا تعریف کنم
a = 
c = 
d =


سه متغییر تعریف کنم؟

 

راجع ساخت کلاس میشه راهنمایی کنید....  بلد نیستم.

 

این سایت  میاد محاسبه میکنه که من فرمولش رو داخل پست اول هم گذاشتم.

https://andrew.hedges.name/experiments/haversine/

یک فرم داخل این وب هست که مبنای من شده و چند ین بار تست کردم.....

 

 

دانلود کنید

یک نمونه سورس

http://s6.picofile.com/file/8383954318/2_noghte_to_GPS.zip.html

 

لطفا راهنمایی کنید

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 21 ساعت قبل، محمدرضا شاهپیری گفته است :

سورس رو براتون ویرایش کردم.

خیلی خیلی ممنونم

عالیه

برای دقتش چیزی پیدا نکردم ،  تو سایتش هم ندیدم ولی اکر داخل کلاس تو ساب   "calculate"   کد را عوض کنید بهتر میشه

Return dist * 60 * 1.1515 * 0.0281

آقای  شاهپیری  از زحماتتان ممنونم   کارتون نامبر وان    هست." تشکر"

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببخشید

فقط یک سوال

تو حالت عادی با  اکتیویتی   عالیه....

 

من یک سرویس ساختم و کلاس و کد ها رو استفاده کردم.

مشکلم اینجاست که چند بار اول همه چیز خوبه ولی بعد از چند بار تغییر موقعیت جغرافیایی      دیگه جواب صحیح نمیده.

انگار  هنگ کرده باشه و دیگه محاسبات نمیکنه.

 

میشه تو این موضوع کمک کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...