الحصول على خريطة الموقف عندما WGS-84 lat/lon عندما الأيسر العلوي و السفلي الأيمن الزوايا' lat/lon تعطى

StackOverflow https://stackoverflow.com/questions/1415375

  •  06-07-2019
  •  | 
  •  

سؤال

لنفترض لدي خريطة ، على سبيل المثال من openstreetmaps.org.أنا أعرف WGS-84 lat/lon من الجانب الأيسر العلوي و السفلي الأيسر من الخريطة.كيف يمكنني العثور على مواقع أخرى على الخريطة من إعطاء WGS-84 خطوط الطول/العرض الإحداثيات ؟

هل كانت مفيدة؟

المحلول

إذا كانت الخريطة تقريبا الشوارع/مستوى المدينة ، يستخدم إسقاط مركاتور (كما openstreetmap.org يبدو أن) و ليست قريبة جدا من القطبين ، الاستيفاء الخطي قد تكون دقيقة بما فيه الكفاية.على افتراض التالية:

  • TL = lat/lon من أعلى الزاوية اليسرى
  • BR = lat/lon من أسفل الزاوية اليمنى
  • P = lat/lon من النقطة التي تريد تحديد موقع على الخريطة
  • (ث ، ح) = الطول والعرض على الخريطة لديك (بكسل؟)
  • أصل صورة الخريطة, (0,0), في أعلى الزاوية اليسرى

, يمكننا أن أقحم (x,y) موقف المقابلة ف النحو التالي:

x = w * (P.lon - TL.lon) / (BR.lon - TL.lon)
y = h * (P.lat - TL.lat) / (BR.lat - TL.lat)

مسكتك المشتركة هي:

  • Lat/lon التدوين الاتفاقية قوائم العرض الأول و خط الطول الثانية ، أي"العمودي" قبل "أفقي".هذا هو عكس الشائع x,y تدوين صورة الإحداثيات.

  • العرض القيم الزيادة عند الذهاب في شمال وارد الاتجاه ("حتى") ، في حين y إحداثيات في الخريطة صورة قد تكون زيادة عند القيام إلى أسفل.

  • إذا كانت خريطة تغطي مساحة أكبر ، الخطية لن تكون دقيقة على خطوط العرض.الخريطة التي تمتد درجة واحدة من خط العرض و هو في الأرض للسكن المناطق (على سبيل المثالمنطقة الخليج) ، مركز خط العرض سيتم إيقاف بنسبة 0.2 ٪ أو نحو ذلك ، والتي من المرجح أن أقل من بكسل (اعتمادا على حجم)

إذا كان هذا هو دقيقة بما يكفي لتلبية الاحتياجات الخاصة بك ، يمكنك التوقف هنا!

أكثر دقة الرياضيات على من ف العرض إلى بكسل y الموقف ستبدأ مع ميركاتور الرياضيات.ونحن نعلم أن العرض P. اللات ، Y الموقف على إسقاط بدءا من خط الاستواء سيكون على النحو التالي (سوف تستخدم رأس المال Y كما عكس قيمة y نبحث عنه Y يبدأ عند خط الاستواء و يزيد نحو الشمال):

Y = k * ln((1 + sin(P.lat)) / (1 - sin(P.lat)))

المستمر k يعتمد على التوسع الرأسي من الخريطة التي قد لا نعرف.لحسن الحظ, يمكن استنتاج مشيرة إلى أنه y(TL) ص(BR) = ساعة.أن يحصل لنا:

k = h / (ln((1 + sin(TL.lat)) / (1 - sin(TL.lat))) - ln((1 + sin(BR.lat)) / (1 - sin(BR.lat))))

(ياه!أن هناك أربعة مستويات من الأقواس!) مع k من المعروف لدينا الآن صيغة لمعرفة Y موقف من أي خط العرض.نحن بحاجة فقط لتصحيح:(1) لدينا قيمة y يبدأ في ليرة تركية.اللات وليس خط الاستواء و (2) y ينمو نحو الجنوب بدلا من الشمال.هذا يحصل لنا:

Y(TL.lat) = k * ln((1 + sin(TL.lat)) / (1 - sin(TL.lat)))
Y(P.lat)  = k * ln((1 + sin(P.lat )) / (1 - sin(P.lat )))
y(P.lat)  = -(Y(P.lat) - Y(TL.lat))

لذلك هذا يحصل لك:

x = w * (P.lon - TL.lon) / (BR.lon - TL.lon) // like before
y = -(Y(P.lat) - Y(TL.lat))                  // where Y(anything) depends just on h, TL.lat and BR.lat 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top