أكثر

خوارزمية لتعويض خط الطول / العرض بمقدار معين من الأمتار

خوارزمية لتعويض خط الطول / العرض بمقدار معين من الأمتار


أنا أبحث عن خوارزمية والتي عند إعطائها زوجًا من خطوط الطول والعرض وترجمة متجهية بالأمتار في الإحداثيات الديكارتية (س ، ص) ستعطيني إحداثيًا جديدًا. نوع من مثل Haversine العكسي. يمكنني أيضًا العمل مع مسافة وتحويل في العنوان ، ولكن من المحتمل أن يكون هذا أبطأ وليس دقيقًا. من الناحية المثالية ، يجب أن تكون الخوارزمية سريعة أثناء عملي على نظام مضمن. الدقة ليست حرجة ، في حدود 10 أمتار ستكون جيدة.


إذا لم تكن إزاحاتك كبيرة جدًا (أقل من بضعة كيلومترات) ولم تكن على حق في القطبين ، فاستخدم التقدير السريع والقذر بأن 111،111 مترًا (111.111 كم) في الاتجاه y هو درجة واحدة (من خط العرض) و 111111 * cos (خطوط العرض) مترًا في الاتجاه x هو 1 درجة (من خط الطول).


كما يقول ليدمان في إجابته ، تعد معادلات ويليامز للطيران مصدرًا لا يقدر بثمن ، وللحفاظ على الدقة في حدود 10 أمتار لعمليات النزوح التي تصل إلى كيلومتر واحد ، فربما تحتاج إلى استخدام أكثرها تعقيدًا.

ولكن إذا كنت على استعداد لقبول الأخطاء التي تزيد عن 10 أمتار للنقاط التي تعوض أكثر من 200 متر تقريبًا ، فيمكنك استخدام حساب مبسط للأرض المسطحة. أعتقد أن الأخطاء ستظل أقل من 50 مترًا للتعويضات التي تصل إلى كيلومتر واحد.

// الموضع ، الدرجات العشرية lat = 51.0 lon = 0.0 // نصف قطر الأرض ، المجال R = 6378137 // الإزاحات بالأمتار dn = 100 de = 100 // تنسيق الإزاحات بالراديان dLat = dn / R dLon = de / (R * Cos (Pi * lat / 180)) // OffsetPosition ، درجات عشرية latO = lat + dLat * 180 / Pi lonO = lon + dLon * 180 / Pi

يجب أن يعود هذا:

خط العرض = 51،00089832 lonO = 0،001427437

أجد أن كتيب الطيران ، هنا رائع لهذه الأنواع من الصيغ والخوارزميات. بالنسبة لمشكلتك ، تحقق من "خط العرض / الطول المعطى نصف القطر والمسافة": هنا

لاحظ أن هذه الخوارزمية قد تكون معقدة بعض الشيء لاستخدامك ، إذا كنت ترغب في الحفاظ على انخفاض استخدام وظائف حساب المثلثات ، وما إلى ذلك.


قد يكون من المنطقي عرض النقطة أولاً. يمكنك عمل شيء مثل هذا الرمز الزائف:

falt_coordinate = latlon_to_utm (original_koordinate) new_flat_coordinate = flat_coordinate + (x، y) result_coordinate = utm_to_latlon (new_flat_coordinate)

حيث (س ، ص) هو الإزاحة المرغوبة.

لا تحتاج إلى استخدام UTM ، أي نظام إحداثيات مسطح يكون منطقيًا في منطقتك.

ما هو البرنامج الذي تعمل به؟


لقد قمت بإنشاء خريطة مخصصة بسيطة على خرائط Google توضح خوارزمية التقدير المذكورة في الإجابة المقبولة (1/111111 == متر واحد). لا تتردد في رؤيتها واللعب بها هنا:

https://drive.google.com/open؟id=1XWlZ8BM00PIZ4qk43DieoJjcXjK4z7xe&usp=sharing


هذا هو رمز Python لإجابة Whuber

من cos استيراد الرياضيات ، راديان def meter_to_lat_lon_displacement (m، origin_latitude): lat = m / 111111 lon = m / (111111 * cos (radians (origin_latitude))) إرجاع خطوط العرض ، lon

يجب أن تؤدي صيغة فينسنتي المباشرة المهمة.


شاهد الفيديو: حل درس خطوط الطول ودوائر العرض اجتماعيات اول متوسط ف1 - الدرس الثامن