الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كود لمعرفة الاتجاهات

بدأه ترختومي في 13 نوفمبر 2010 · 13 رد · 1,053 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اريد كود يحدد الاتجاهات عن طريق الاحداثيات للموقع بالمقارنة بين النقطة الحالية والنقطة السابقة ومعرفة هل النقطة الاحالية هي مثلا شمال النقطة السابقة.

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

للمعلومية : كود تحديد الاحداثيات موجود لدي , اريد كود تحديد الاتجاهات فقط ... وشكرا لكم

#2

http://www.movable-type.co.uk/scripts/latlong.html

جميع المعادلات هنا. حساب الزاوية والمسافة... إلخ. الكود هو بالجافاسكريبت ولكنه واضح جداً ويمكنك تحويله إلى أي لغة أخرى بسهولة.

#3

الذي اريده هو ان يعطيني اتجاهي مباشرة

مثلا : يعطي الاتجاه هاكذا ( شمال ) او ( شمال شرق ) وليس ان يعطي الاتجاه بالنسبة لنقطة الطول ونقطة العرض .

وذلك بسبب عدم فهمي لطريقة استنتاج الاتجاه منها وعمل المقارنة بين نقطتين... وشكرا جزيلا لك

#4

اين الشباب المختصين بهذه المواضيع ؟؟؟!!

#5

هذه الدوال تعطيك الزاوية. ويمكنك ببساطة تقسيم الـ360 درجة الدائرية إلى مناطق يمكنك تسميتها شمال، شمال شرق، شرق إلخ...

#6
System Down كتب:

هذه الدوال تعطيك الزاوية. ويمكنك ببساطة تقسيم الـ360 درجة الدائرية إلى مناطق يمكنك تسميتها شمال، شمال شرق، شرق إلخ...

ارجو منك التفضل بشرح الطريقه لاني اجدها صعبة على فهمها .

وشكرا لك على تفاعلك مع الموضوع .

شكل البيانات لدي:

latitude = 26.382505

longitude = 43.97099

easting = 397352.335

northing = 2918454.59

altitude = 631.5 and 627.1

تم تعديل هذه المشاركة بواسطة ترختومي في 14 نوفمبر 2010 في 23:32

#7

استخدم المعادلة في الموقع التي تعطي الزاوية bearing

الدائرة تتكون من 360 درجة. 0 هو الشمال. 90 هو الشرق. 180 جنوب. 270 غرب.

#8
System Down كتب:

استخدم المعادلة في الموقع التي تعطي الزاوية bearing

الدائرة تتكون من 360 درجة. 0 هو الشمال. 90 هو الشرق. 180 جنوب. 270 غرب.

المشكلة ان الموقع لم يطبق بالارقام .

ايضا شكل الاحداثيات يختلف في الموقع عن الوجود لدي :

في الموقع على الصيغة

Point 1: latitude 53 08 50N ,longitude 001 50 58W

Point 2: latitude 52 12 16N ,longitude 000 08 26E

شكل البيانات لدي:

latitude1 = 26.382505

longitude1 = 43.97099

latitude2 = 35.382505

longitude2 = 16.97099

easting = 397352.335

northing = 2918454.59

معادلة الـ Bearing :

var y = Math.sin(dLon) * Math.cos(lat2);var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);var brng = Math.atan2(y, x).toDeg();

هل يمكن ان اقوم بتعويض عن المتغيرات بالبيانات الموجوده لدي

وشكرا جزيلا لك..

تم تعديل هذه المشاركة بواسطة ترختومي في 15 نوفمبر 2010 في 13:57

#9
ترختومي كتب:

المشكلة ان الموقع لم يطبق بالارقام .

ايضا شكل الاحداثيات يختلف في الموقع عن الوجود لدي :

في الموقع على الصيغة

Point 1: latitude 53 08 50N ,longitude 001 50 58W

Point 2: latitude 52 12 16N ,longitude 000 08 26E

شكل البيانات لدي:

latitude1 = 26.382505

longitude1 = 43.97099

latitude2 = 35.382505

longitude2 = 16.97099

easting = 397352.335

northing = 2918454.59

الموقع يقبل كلا الشكلين. والكود الموجود هو للشكل الموجود لديك.

ترختومي كتب:

معادلة الـ Bearing :

var y = Math.sin(dLon) * Math.cos(lat2);var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);var brng = Math.atan2(y, x).toDeg();

هل يمكن ان اقوم بتعويض عن المتغيرات بالبيانات الموجوده لدي

وشكرا جزيلا لك..

نعم. lat هي اختصار latitude و lon هي اختصار longitude. اقرأ المقالة جيداً فهي واضحة جداً.

#10

قمت بتطبيق المعادلة في البرنامج بهذا الشكل

Dim dLat = (CarD.Latitude - CarD.Latitude_old)
        Dim dLon = (CarD.Longitude - CarD.Longitude_old)
        Dim a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(CarD.Latitude_old) * Math.Cos(CarD.Latitude) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2)
        Dim y = Math.Sin(dLon) * Math.Cos(CarD.Latitude)
        Dim x = Math.Cos(CarD.Latitude_old) * Math.Sin(CarD.Latitude) - Math.Sin(CarD.Latitude_old) * Math.Cos(CarD.Latitude) * Math.Cos(dLon)
        Dim brng = Math.Atan2(y, x)
        ListBox1.Items.Add("brng" & brng)

قمت بحذف

).toRad();

لوجود خطء ولا اعرف ماذا تعمل بالضبط

var dLat = (lat2-lat1).toRad();var dLon = (lon2-lon1).toRad();

خرجت النتائج التالية من هذا الكود :

111510101150jef7gc6rpyjb.png

http://www.m5zn.com/uploads/2010/11/15/photo/111510101150jef7gc6rpyjb.png

#11

لا تحذف ToRad. هذه تحول من الدرجات إلى الراديان. ودوال المثلثات الموجودة مع الدوت نت تأخذ الزوايا بالراديان.

http://www.vcskicks.com/csharp_net_angles.php

#12
System Down كتب:

لا تحذف ToRad. هذه تحول من الدرجات إلى الراديان. ودوال المثلثات الموجودة مع الدوت نت تأخذ الزوايا بالراديان.

http://www.vcskicks.com/csharp_net_angles.php

استاذي الفاضل System Down قمت بتعديل الكود الى :

   Dim dLat = ((CarD.Latitude - CarD.Latitude_old) * 3.14) / 180
        Dim dLon = ((CarD.Longitude - CarD.Longitude_old) * 3.14) / 180
        Dim a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(CarD.Latitude_old) * Math.Cos(CarD.Latitude) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2)
        Dim y = Math.Sin(dLon) * Math.Cos(CarD.Latitude)
        Dim x = Math.Cos(CarD.Latitude_old) * Math.Sin(CarD.Latitude) - Math.Sin(CarD.Latitude_old) * Math.Cos(CarD.Latitude) * Math.Cos(dLon)
        Dim brng = (Math.Atan2(y, x) * 180) / 3.14
        ListBox1.Items.Add("brng" & brng)

وحصلت على النتائج التالية :

1

1115101311188atnjbvebd8m.png

2

1115101311181j285yt.png

سوف اقوم بالتجربة بعد عدة ايام إن شاء الله واختبر الكود واتأكد من الزوايا والاتجاهات.

مشكور يااستاذ System Down على مجهودك معي وكل عام وانت بخير .

اذا لم يكن لديك تعليق على النتائج في الصور السابقه فسوف اخبرك بالنتائج بعد التجربه إن شاء الله .

تم تعديل هذه المشاركة بواسطة ترختومي في 16 نوفمبر 2010 في 01:35

#13

احب ان ابشركم بنجاح العملية

نجحت في عمل الكود وعملت الاختبارات وتمت بنجاح

اشكر الاخوان على تعاونهم معي

والسلام عليكم ورحمة الله وبركاته

#14

ممكن ترفق المثال للاستفادة

مواضيع مشابهة