安卓自定义GPS地图应用程序

3
我想开发一个应用程序,利用我提供的建筑地图和GPS数据向用户显示他们在地图上所处的位置。这将在一个已知可以获取GPS和蜂窝服务的特定建筑物内完成。
起初,我认为最简单的方法是查看是否可以使用Google地图来绘制用户位置,然后只需将我的自定义建筑地图“叠加”在Google地图之上,这样我就不必处理任何GPS信息或映射的复杂性,只需适当缩放我的“叠加”,使用户在建筑物的正确房间中显示即可。我想知道是否有人能够提供我如何实现此目标的任何信息,或者是否有更简单的方法来完成我的地图。任何信息都有帮助!

你的案例已经解决了吗?你能分享一下制作地图覆盖在真实世界位置上的教程吗?似乎我也想在安卓编程中尝试一下这个。 - gumuruh
6个回答

1

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

当您接收到位置更新时,您可以通过将现实世界的位置转换为图像中的位置来向自定义视图添加标记,使用类似以下的伪代码:

伪代码:

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

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

从逻辑上讲,@ScouseChris,你的概念是正确的......但我还是想知道,是否可以给出一个精确的代码来将真实世界的位置转换为地图? - gumuruh

1

无法使用比标准GMap(即浏览器中看到的)更接近的缩放级别。另一个问题是谷歌使用基于基本微度数的GeoPoint类来绘制覆盖层,其精度太低。 您可以查看jGarminImg - 这是Java库 - 不幸的是针对使用Swing编写,但应该相对容易使它能够与Android一起使用。 另一方面-你必须制作自己的地图。 您可以使用标准覆盖层,也可以使用kml格式制作地图并使用this示例进行显示。


我并不想比Google地图更进一步放大,我只是想叠加我已经拥有的建筑地图。 - Peter

1

您想要... Google地图视图

...更具体地说,您可能会希望阅读适当命名为"第2部分:添加叠加项"的子部分。

编辑:糟糕!对不起,我误读了你的问题...如果您想在地图上叠加项目,那么您需要阅读这一部分。抱歉...


我确实看过那个,但像你说的那样,它只允许你在地图上添加一个点,而不能添加图像覆盖。 - Peter
你知道不久前Mark Murphy在某个地方发布了关于这个主题的帖子。他建议,就像一些游戏引擎(例如AndEngine)那样,也许你可以尝试使用滚动背景和“相机”,然后在其上绘制GPS坐标。我知道你有点说你想避免这种情况,但除了获取Android的开源映射应用程序并修改其代码以适应你的需求之外,似乎还是一个可行的选择。这是一些开源的Android应用程序列表:http://en.wikipedia.org/wiki/List_of_open_source_Android_applications#Location.2FMapping.2FNavigation.2FRouting 希望对你有所帮助。 - rf43

0

可以在Google MapView上叠加位图图像。

你只需要子类化Overlay类,重写draw方法,并在画布上绘制。你需要提供一个GeoPoints的矩形(可能是左上角和右下角),以便将建筑位图锚定在MapView的顶部。你可以使用mapView.getProjection()将纬度和经度转化为画布上的xy坐标。

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

编辑:我不确定Google地图在不同的缩放级别下是否会保持建筑物在完全相同的GeoPoints上,所以你可能需要为不同的缩放级别调整这些值。


0
如果您只需要建筑物的地图,那么在不使用Google Maps的情况下,在图像上绘制位置应该不会太困难,前提是您可以确定自己在建筑物内的坐标。
您需要知道两个坐标:建筑物地图的西北角和东南角。当您获取GPS位置更新时,可以根据这些角落坐标轻松计算出地图图像上的正确位置。

0

我会这样做:

  1. 在谷歌地图上放置标记以指示建筑物的位置。

  2. 点击建筑物后,将您的建筑物地图作为自定义视图加载。在自定义视图上绘制用户位置。

我认为尝试在谷歌地图上叠加您的建筑物地图虽然可能是可行的,但比通过自定义视图实现更复杂。

此外,在最低缩放级别上叠加您的建筑物地图不会给您足够的分辨率,除非您有一个非常大的建筑物。整个街区相当小。

您可能已经考虑过的一个问题是,当设备在建筑物内部时,它会恢复到使用蜂窝塔和WiFi来定位,从而给您提供不太准确的位置修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接