从世界坐标转换为平铺位置

时间:2014-04-24 03:29:56

标签: google-maps-android-api-2 tile coordinate-transformation

我和一个朋友正在尝试为使用谷歌地图的课程构建一个Android应用程序,我们已经花了好几天才出现这个错误。

理想情况下,应用会接收用户位置的更新,存储它们并绘制任何存储的坐标。事实证明这是一个噩梦,所以现在我们只是试图在整个图块上绘制,如果该图块包含用户访问过的坐标。然而,我们认为从坐标到平铺位置的转换有问题,因为缩放越高,我们绘制的图块越向北移动,从实际坐标向西移动。

private boolean isCoordInTileForZoom(int tileX, int tileY, int zoom)
{
    //coordinate to check if they are in the current tile
    float lon = WILF_TEST_COOR.x;
    float lat = WILF_TEST_COOR.y;

    //coordinates in terms of map length and map height
    float mapX = lon + 180;
    float mapY = (lat * -1) + 150;

    //number of tiles in a row or column (2^zoom)
    int tiles = (int) Math.pow(2,zoom);

    //the height and width of a single tile
    double tileWidth = 360.0/tiles;
    double tileHeight = 180.0/tiles;

    int mapCol = (int) (mapX/tileWidth);
    int mapRow = (int) (mapY/tileHeight);

    Log.d("Minimap.mapGridDetails","    \n" + "Zoom level: " + zoom + "\nMap Rows: " + tiles + "\nTile Width: " + tileWidth + "\nTile Height: " + tileHeight);

    if (mapCol == tileX && mapRow == tileY) 
    {
        return true;
    }
    else
    {
        return false;
    }
}

现在我们假设世界是360度高度和180度高,这意味着,在缩放级别2,每个图块应该是90x45(4x4网格)。它适用于变焦2,我认为3但是在变焦4和超出绘制的瓷砖跳过预期位置以北。

我的感觉是问题在于我们假设坐标转换是如何工作的(我们假设Google的世界地图是一个布置得很好的平面,这可能是我们特别天真)或者谷歌地图实际上比180度。无论哪种方式,这件事将在几天后到期,所以我们提前感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

你见过这个:https://developers.google.com/maps/documentation/javascript/examples/map-coordinates? 虽然它的JavaScript,但它显示了正确坐标转换的原理。

您也可以查看我对此SO question的回答。我在那里提供的TileProjection类应该回答你的问题。你可以,例如使用它的方法getTileBounds来检查你的坐标是否在tile中,或者你可以使用latLngToPoint方法并检查该点的x和y是否都在0-TILE_SIZE范围内。