7

我想制作一个 Android 应用程序来加载我在建筑物内部创建的地图。我希望它提供一个房间到另一个房间之间的方向。如果可能的话,在楼层之间。

我希望地图可以缩放,也可以点击。即你可以点击你在哪里,你想去哪里,应用程序将提供方向。或者,您在文本框中输入您所在的房间以及您想去的地方,然后再次提供路线。

我确实偶然发现了一些允许您使用开源地图并将您自己的节点添加到每个角落或参考位置的东西。但经过一个小时的谷歌搜索,我再也找不到该网站了。

有谁知道我该怎么做?

4

4 回答 4

3

这是其中一个想法听起来很简单但实际上并非如此的例子。您需要解决许多任务,其中一些已经讨论过。

1)如何对办公室进行建模。这需要完成,以便您轻松建模,但文件很小。它必须采用您的寻路算法可以理解的格式。这意味着当您开发路径查找时,您将对数据进行更改。

2) 位置查找/输入。由硬件完成(gps 不会削减它)或用户说他们在哪里。可以使用 NFC 和放置在办公室周围的标签来完成,这不是一个理想的解决方案,标签必须是可见的。用户可以输入他们的位置,但他们可能会迷路并且不知道他们在哪里。

3)如何呈现数据,您可以编写一个神奇的 3D 应用程序,展示一个不可能完成的任务的建筑布局。这将是六个月的工作!请记住,您的地图是 3D 的,而路线图往往是 2D 的。(有一些飞越......)

4) 进度跟踪。该应用程序确实需要知道您是如何做的,如果您偏离路线,它会告诉您返回。这在室内也很难实现。进度跟踪是 PND(个人导航设备)制造商花费时间的一个领域,因为它确实影响了用户对软件的信心。

在 TomTom 工作过,我只能说你可以在这工作多年。

由于这是一个拼贴项目,我可以建议一个更简单的项目吗?

使用 2D 地图,简单的基于网格的地图,有点像迷宫问题中的经典鼠标。为路径查找实现 A*。完成后,如果您有时间为您的原始计划延长它,您可以这样做。

过去我发现非常好的一本书是“Programming Game AI by example”。国际标准书号 1-55622-078-2。第 8 章是关于寻路的,并且对 A* 有非常好的部分。

祝你好运。:)

于 2011-12-13T21:24:59.920 回答
2

虽然这可能不是您正在寻找的答案:

您总是可以编写一个执行此操作的应用程序。如果您已经愿意在地图上定位节点,您可以假设编写一个使用(主要使用的)游戏路径算法(例如 A*)的程序,并从那里找出一条路线。这会很棘手,但我认为通过放置节点并使用与向量相关的成本(可能以英尺/米或类似的东西测量)对它们进行向量映射,您也许可以使用 A* 进行设置。 ..

很难说。我尝试了一个快速的谷歌搜索结果也是空的。

于 2011-12-13T20:39:44.970 回答
1

您可以创建一个MapActivity,然后它可以容纳一个MapViewMapView 不能嵌入任何其他 Activity),这是一个诚实的交互式地图,但它的功能并不完全。

MapView 主要用于显示带有自定义叠加层的特定区域的地图。您可以设置地图的焦点、缩放级别、是否显示交通数据以及其他一些次要选项。但除此之外,您还必须自己构建路线的叠加层。而且没有转弯方向功能或任何东西。它们只是“愚蠢”的覆盖物。

然而,谷歌DID最近更新了谷歌地图应用程序以包括室内地图和导航。他们提供了一个站点,您可以访问该站点并提交建筑物的平面图,以便将其添加到官方应用程序中。

正式添加平面图后,您只需启动官方应用程序即可使用如下 Intent 为您导航:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
于 2011-12-13T21:00:04.670 回答
1

在我的硕士项目中,我也遇到过同样的问题。但是,我的解决方案并不完整,但这就是我计划的方式。由于各种限制,我无论如何都无法完全实现它。这听起来可能很复杂,但我不确定如何表达。

  1. 静态而不是动态地存储地图——我的意思是,当有人想从一个房间到另一个房间或从一层到另一层时,会弹出图片/照片。动态路由有点困难。事先存储图片,以便它们弹出。

  2. 设计类似于 Dijkstra 算法的最短路径算法。您将获得用于执行该算法的现成 Java 程序。使用它,您可以获得路线。一旦地图可用,使其可点击并添加缩放选项应该不是什么大问题。

以某种方式结合这两个步骤(抱歉,这里没有代码,因为我自己想不出一个)。正如 Richard 上面所说的,我想到了 NFC 来实现它(我的整个项目都基于此)。NFC 基本上是一种 RFID 技术,因此是无线的。您可以使用 802.11 b/g/n 来实现它的网络端。如果您需要更多帮助,请告诉我。我能帮上多少忙。

一切顺利。

于 2011-12-14T07:39:52.050 回答