الحصول على خريطة الموقف عندما WGS-84 lat/lon عندما الأيسر العلوي و السفلي الأيمن الزوايا' lat/lon تعطى
سؤال
لنفترض لدي خريطة ، على سبيل المثال من 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