احسب موضع y من خط العرض بالدرجات على إسقاط Mercator
-
20-09-2019 - |
سؤال
أحاول حساب موضع Y على خريطة مع إسقاط Mercator نظرًا لخط العرض بالدرجات. هذا ما أحتاجه:
//mapHeight might be 600 (pixels), for example
//latitudeInDegrees ranges from -90 to 90
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
//what on earth do I do here to calculate the Y offset on the map?
return ???;
}
لقد جربت كل أنواع الأشياء التي وجدتها عبر الإنترنت (بما في ذلك ويكيبيديا و Stackoverflow) ، لكن لم ينجح أي منها. ربما أفعل شيئًا غبيًا ولكن لا يمكنني معرفة ما. هل يمكن لأي شخص أن ينقذ عقلي؟
المحلول
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
لا تتذكر المقياس y مع mapheight (يجب أن تعرف Max و Min قيمة LatitudeIndegrees لـ taht)
اقتبس من ويكيبيديا:
في خطوط العرض أعلى من 70 درجة شمالًا أو جنوبًا ، يكون إسقاط Mercator غير قابل للاستخدام عمليًا.
يجب عليك كتابة رمز مثل هذا:
private double CalculateYRelative(double latitudeInDegrees)
{
return Math.Log(Math.Tan(latitudeInDegrees / 360d * Math.PI + Math.PI / 4));
}
...
minY = CalculateYRelative(MinLatitudeInDegrees);
maxY = CalculateYRelative(MaxLatitudeInDegrees);
...
public double CalculateY(double mapHeight, double latitudeInDegrees)
{
return mapHeight*
(CalculateYRelative(latitudeInDegrees) - minY) / (maxY - minY);
}
للمزيد من المعلومات:
لا تنتمي إلى StackOverflow