سؤال

أحاول حساب موضع 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);
}

للمزيد من المعلومات:

ويكيبيديا

نفس السؤال

نفس السؤال 2

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top