【问题标题】:I want to make an Android app with a map that provides directions, but not Google Maps我想制作一个带有地图的 Android 应用程序,它提供方向,但不是谷歌地图
【发布时间】:2012-01-19 16:43:47
【问题描述】:

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

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

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

有人知道我该怎么做吗?

【问题讨论】:

  • 希望您能得到答案。但我相信这是硬件限制。这意味着 gps 并不能真正在室内工作。如此短的在wifi或蓝牙aps之间进行手动三角测量是不可能的。但就像我说的,我希望你得到不同的答案,但我错了。
  • wiki.openstreetmap.org/wiki/Indoor_Mapping也许你可以从那里得到想法。

标签: java android map directions


【解决方案1】:

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

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

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

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

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

我可以说你已经在 TomTom 工作多年了。

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

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

过去我发现非常好的一本书是“通过示例编程游戏 AI”。国际标准书号 1-55622-078-2。第 8 章是关于寻路的,并且在 A* 上有非常精彩的部分。

祝你好运。 :)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的回复。但这是一个大学项目,我已经从头开始学习 Java,我认为这足以现在尝试学习,而不必学习 A*。但它可能仍然有帮助。再次感谢。如果我最终使用它,我会告诉你的。
    【解决方案3】:

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

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

    Google DID 但是最近更新了 Google 地图应用程序以包括室内地图和导航。他们提供了一个您可以访问的站点和您建筑物的submit a floor plan,因此可以将其添加到官方应用程序中。

    正式添加平面图后,您只需启动官方应用程序即可使用 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);
    

    【讨论】:

      【解决方案4】:

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

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

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

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

      一切顺利。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        • 2022-06-15
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多