رفتن به مطلب

بایگانی شده

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

  • 0
Bahmanm

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

سوال

Bahmanm    125

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

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

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 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

در 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

 

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

 

 

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

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

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


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

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

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


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

 

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

 

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

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

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

 

 

دانلود کنید

یک نمونه سورس

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

 

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

 

 

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


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

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

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

عالیه

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

Return dist * 60 * 1.1515 * 0.0281

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

 

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


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

ببخشید

فقط یک سوال

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

 

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

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

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

 

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

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


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

×
×
  • جدید...