【问题标题】:Android custom GPS map applicationAndroid自定义GPS地图应用
【发布时间】:2011-07-18 02:22:03
【问题描述】:

我想构建一个应用程序,它使用 GPS 数据和我提供的建筑地图,以向用户显示他们在地图上的建筑位置。这将在我已经知道有 GPS 和手机服务的特定建筑物中完成。

起初我认为最简单的方法是看看我是否可以使用谷歌地图来绘制用户位置,然后将我的自定义建筑地图“覆盖”在谷歌地图上,这样我就不必处理了有了任何 gps 信息或映射的复杂性,我只需要缩放我的“叠加层”以正确地适合谷歌地图的顶部,以便用户显示在建筑物的正确房间中。我想知道是否有人可以向我提供有关如何执行此操作的任何信息,或者是否有更简单的方法来完成我的地图。任何信息都有帮助!

【问题讨论】:

  • 您的案子结案了吗?您会分享将地图覆盖在真实世界位置上的教程吗?看来我也想在这里的android编程上尝试一下。

标签: android google-maps maps


【解决方案1】:

你想要... Google Map View

...更具体地说,您可能需要阅读标题适当的小节:“第 2 部分:添加叠加项目”

编辑:哎呀!没关系!我误读了你的问题......只有当你想在地图上覆盖一个项目时。对不起...

【讨论】:

  • 我实际上已经看过了,但就像你说的那样,它只允许你在地图上添加一个点,而不是图像叠加层
  • 你知道马克·墨菲不久前在某个地方发表过关于这个主题的文章。他建议,像一些游戏引擎(例如 AndEngine),也许您可​​以尝试使用滚动背景和“相机”,然后在其上绘制您的 GPS 坐标。我知道你有点说你想避免这种情况,但没有获得适用于 android 的开源地图应用程序并修改其代码以满足你的需求,这似乎是一个可行的选择。这是一些en.wikipedia.org/wiki/… 的列表,希望对您有所帮助。
【解决方案2】:

不可能使用比您在标准 GMap 上(即在浏览器中)看到的更接近的缩放级别。另一个问题是谷歌使用基于基数微度的GeoPoint类来绘制叠加层,它的准确性很低。 您可以查看jGarminImg - 它是 java 库 - 不幸的是,它是为与 swing 一起使用而编写的,但让它与 android 一起使用应该相对容易。另一方面 - 你必须制作自己的地图。 您可以使用标准叠加层,也可以将地图制作为 kml 格式并使用this 示例进行显示。

【讨论】:

  • 好吧,我真的不想放大比谷歌地图更近的距离,我只想覆盖我已经拥有的建筑地图。
【解决方案3】:

您可以通过自定义视图来实现这一点,该视图显示您的建筑平面图并知道建筑物每个角落的精确坐标。

当您收到位置更新时,您可以通过以下方式将真实世界位置转换为图像中的位置,从而将标记添加到自定义视图中:

伪代码:

markerX = realWorldX - mapStartX;
markerY = realWorldY - mapStartY;

if( isOnMap( markerX, markerY ) )
{
    drawMarker( markerX, markerY );
}

【讨论】:

  • 从逻辑上讲,你的概念是正确的@ScouseChris....但是,我只是想知道,如果你能给出一个准确的代码来说明实际位置如何转换成地图?
【解决方案4】:

是的,您可以在 Google MapView 上叠加位图图像。

您所要做的就是继承 Overlay 类,重写 draw 方法,然后在画布上绘图。您必须提供一个 GeoPoint 矩形(可能是左上角和右下角)以将建筑物位图锚定在 MapView 的顶部。您使用 mapView.getProjection() 将纬度和经度转换为画布上的 xy 坐标。

我认为drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) 在这里会很有用。请记住 src 和 paint 可以为空。如果您使用的 GeoPoints 准确,则位图将自动调整为平移和缩放,但如果用户放大太多,它可能会出现像素化。

编辑:我不太相信 Google 地图会让您的建筑物在不同的缩放级别下保持在完全相同的地理点,因此您可能需要针对不同的缩放级别调整这些值

【讨论】:

    【解决方案5】:

    如果您只需要建筑物的地图,不使用谷歌地图在图像上绘制位置应该不会太难,前提是您可以将您的位置确定为建筑物内的坐标。

    您需要知道两个坐标:您正在使用的建筑地图的西北角和东南角。当您获得 GPS 位置更新时,可以根据这些角坐标轻松计算出地图图像上的正确位置。

    【讨论】:

      【解决方案6】:

      我会这样做,

      1. 在谷歌地图上放置一个标记来指示建筑物的位置

      2. 向下钻取建筑物会将您的建筑物地图加载为自定义视图。在自定义视图上绘制用户位置

      我认为在可能的情况下尝试将您的建筑地图覆盖在谷歌地图上将比通过自定义视图执行代码更复杂。

      除非你有一座巨大的建筑,否则用你的建筑地图覆盖最低的缩放级别不会给你足够的分辨率。整个街区都很小

      您可能已经考虑过的一个问题是,当设备在建筑物内时,它的位置将恢复到手机信号塔和 wifi,从而为您提供不太准确的位置修复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多