【问题标题】:Android finding position on a mapAndroid 在地图上查找位置
【发布时间】:2012-02-27 13:22:00
【问题描述】:

这是我的场景:

我有一张图片,它是一张地图。我用它作为背景图片。

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

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

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

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

更新:

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

【问题讨论】:

  • 听起来你没有使用 MapActivity,对吗?
  • 约翰,我更新了帖子。不,我没有使用 mapactivity。
  • 由于您使用的是梯形,这是否包括某种 3D 透视?如果是这样,您是否使用 opengles 功能将您的地图(希望是矩形)转换为梯形?
  • 没有。你有错误的想法。我使用的地图是 2d 地图(只有宽度和高度,没有深度)。就像 2d 版的谷歌地图(顶视图)。但这是一张覆盖一小块区域的地图,从顶视图看,该区域呈斜方形/梯形。实际上,底部宽度比顶部宽度略长。
  • 这应该会有所帮助:stackoverflow.com/questions/15399453/…

标签: android map navigation gps coordinates


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    假设没有透视图并且你有四个角的坐标,它只是一个缩放位置的问题,如下所示:

    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);
    }
    

    这假设原点位于屏幕的左上角。

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

    【讨论】:

    • 感谢您的回复,约翰。但是根据我从您的算法中了解到的情况,仅当覆盖区域是正方形时才有效吗?
    猜你喜欢
    • 2013-11-21
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多