Android在地图上找到位置

时间:2012-02-05 22:48:41

标签: android map navigation gps coordinates

以下是我的情景:

我的图像是地图。我用它作为背景图片。

图像不是方形的。它更像是一个梯形。

我有图像四个角的每个角的地理坐标以及图像的宽度和高度。

现在,当我从gps获取位置坐标时,我希望能够在地图上绘制点。由于图像的形状不是正方形,我不能用简单的比率来评估地图上gps坐标的位置。

如何绘制从gps到地图上某个位置的坐标?

更新

我正在使用自定义地图而我没有使用MapView,因为我只能使用谷歌地图这个视图(据我所知)。此外,应用程序需要能够脱机运行,我认为在使用MapView时这是不可能的(据我所知)。

2 个答案:

答案 0 :(得分:0)

我的方法,值得一提的是,您应该在显示屏上显示完整的地图,并尽可能地将其与屏幕坐标相匹配,因此在您的情况下,底部宽度可能适合显示屏的底部而顶部会更窄,可能会有一些“非映射”区域到屏幕的左侧和右侧。您需要能够将地图地理坐标转换为屏幕像素坐标(对于相对较小的区域,线性平移可能足够准确)。然后,您可以使用相同的地理坐标到像素转换,将表示用户位置的标记放在图像顶部。如果您希望用户能够向任何方向拖动地图图像或放大和缩小,则需要调整屏幕像素以相应地协调计算。

答案 1 :(得分:0)

假设没有透视,并且您有四个角的坐标,那么只需按比例缩放位置:

Point upperRightGPS; // upper right GPS coordinates
Point upperLeftGPS; // upper left GPS coordinates
Point lowerRightGPS; // lower left GPS corrdinates
Point upperRight; // upper right screen pixel value (100, 0)?
Point upperLeft; // upper left screen pixel value (0,0)?
Point lowerRight; // lower right screen pixel value (0, 200)?

public Point positionOnMap(Point gps){

    double dx = (upperRight.x - upperLeft.x)/(upperRightGPS.x - upperLeftGPS.x);
    double dy = (upperRight.y - lowerRight.y)/(upperRightGPS.y - lowerRightGPS.y);

    return new Point((int) dx * gps.x, (int) dy * gps.y);
}

这假定原点位于屏幕的左上方。

您可能需要调整上述代码以适应您的情况,但这是我最好的猜测而不会看到您的代码。