6

この形式の緯度経度座標でいっぱいのベクトルがあります

82.0000000, -180.0000000

私は、このコードを使用してそれらを X 座標と Y 座標に変換してマップにプロットしようとしていますが、これは私が見る限り正しいです...

バツ:

double testClass::getX(double lon)
{
    // Convert long to X coordinate (2043 = map width)
    double x =  lon;
    // Scale
    x =         x * 2043.0 / 360.0;
    // Center
    x +=        2043.0/2.0;
    return x;
}

よ:

double testClass::getY(double lat)
{
    // Convert lat to Y coordinate (1730 = map height)
    double y =  -1 * lat;
    // Scale
    y =         y * 1730.0 / 180.0;
    // Center
    y +=        1730.0/2.0;
    return y;
}

ただし、マップにプロットすると、ポイントが世界地図に似ていることがわかりますが、それらはすべてx量だけずれており、スケーリングに関係していると思います

何か案は?

4

1 に答える 1

7

わかりました、私はこれに対する答えを見つけました

double testClass::getX(double lon, int width)
{
    // width is map width
    double x = fmod((width*(180+lon)/360), (width +(width/2)));

    return x;
}

double testClass::getY(double lat, int height, int width)
{
    // height and width are map height and width
    double PI = 3.14159265359;
    double latRad = lat*PI/180;

    // get y value
    double mercN = log(tan((PI/4)+(latRad/2)));
    double y     = (height/2)-(width*mercN/(2*PI));
    return y;
}

そうそう、これはメルカトル図法を使用する場合に完全に機能します

于 2013-04-18T12:46:21.077 に答える