【问题标题】:How to go about creating an interactive map in Android如何在 Android 中创建交互式地图
【发布时间】:2012-07-16 22:13:37
【问题描述】:

我需要在我的应用程序中创建一个包含大约 10 座建筑物的正方形区域的交互式地图。您必须能够单击建筑物并接收有关它的一些信息。我知道有几种方法可以解决这个问题,但我希望有这方面背景的人能给我一些建议。

以下是我可以考虑的一些方法。

谷歌地图

我已经实现了 Google Maps API,它运行良好,但并没有真正达到我想要的效果。谷歌地图需要互联网连接,让您可以访问整个地图。我需要将它锁定在一个区域内。

网页浏览量

这似乎是一个不错的选择。我确信我可以制作一个简单的图像地图,当您单击某个建筑物时,它会为您提供更多信息。唯一的问题是您还需要互联网连接。

OpenGL?

我从未真正对此进行过深入研究,但我听说实施起来既困难又痛苦。它可以在本地运行,但值得吗?

还有其他方法可以开发交互式地图吗?需要记住的是,我还想有一天将其移植到 iOS(如果有人也有这方面的经验的话)

【问题讨论】:

  • 您不需要互联网连接来填充 WebView。您可以将 html 文件保存在 /assets/ 目录中并在运行时加载。
  • 有趣...作为答案发布,我也会采取其他答案,并比较哪种方法“更好”,然后奖励赏金。感谢您的洞察力。
  • Android Maps API 服务条款禁止在 Google 地图上使用缓存(请参阅第 8.2 节)。 #justsayin

标签: java android google-maps opengl-es android-webview


【解决方案1】:

谷歌地图

  • 会有你想要的效果(自定义位置,不能移动,不能放大缩小)
  • 但不允许离线内容

这是怎么做的(我做到了,它有效):

  1. 您以要限制区域的 GPS 坐标为中心
  2. 您调整缩放级别以限制区域
  3. 您禁用多点触控事件以防止放大或缩小
  4. 您禁用拖动以防止移动
  5. 您处理点击您为处理操作而创建的ItimizedOverlays

对于这些步骤中的每一个,StackOverflow 上都有很好的答案。

【讨论】:

    【解决方案2】:

    如果您想要完全控制并且习惯使用 html 和 javascript,我强烈建议您使用开源 OpenLayers 库。您可以创建一个 html 页面,将其保存在资产中并在设备上本地运行。您可以创建自己的一组地图图块,甚至使用单个 jpeg 文件,然后在其上“映射”您想要的建筑物,然后使用简单但广泛的 OpenLayers API 来允许建筑物选择和信息显示。它甚至还内置了用于平移和缩放的多点触控功能。在移动设备上和非移动设备上都能很好地工作。

    您可以查看示例列表here。对任何示例进行简单的查看源代码将使您非常清楚地了解它们在做什么。您还可以查看this example,它在地图区域上绘制了一堆图像缩略图,可以点击查看更多详细信息。此示例使用在线提要,但您可以轻松使用本地提要.. 甚至是 passed in from the app to the webview

    ps。除了在我的项目中积极使用 OpenLayers 之外,我与 OpenLayers 没有任何关系。

    【讨论】:

    • 很多很棒的答案。最适合我的需要。谢谢
    【解决方案3】:

    从一开始就回答您的问题可能需要 10 页。

    1. 我们先看这里:https://developers.google.com/maps/documentation/android/hello-mapview

    2. 在你能够使用 MapView 之后,你只需要创建你的 ItemizedOverlay 类。

    在教程中用 HelloItemizedOverlay 替换这个类。

    public class GooglerMapItemizedOverlay extends ItemizedOverlay {
    
        private ArrayList<OverlayItem> mOverlayItems = new ArrayList<OverlayItem>();
        private Context mContext;
        private Paint rectPaint, textPaint;
    
        public GooglerMapItemizedOverlay(Drawable defaultMarker, Context context) {
            super(boundCenterBottom(defaultMarker));
    
            mContext = context;
            populate(); 
        }
    
        @Override
        protected OverlayItem createItem(int i) {
            return mOverlayItems.get(i);
        }
    
        public void addOverlayItem(OverlayItem overlay) {
            mOverlayItems.add(overlay);
            populate();
        }
    
        @Override
        public int size() {
            return mOverlayItems.size();
        }
    
        public void clear(){
            mOverlayItems.clear();
            populate(); 
        }
    
        @Override
        protected boolean onTap(int index) {
            // information goes here
          OverlayItem item = mOverlayItems.get(index);
          AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
          dialog.setTitle(item.getTitle());
          dialog.setMessage(item.getSnippet());
          dialog.show();
          return true;
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 为什么没有?他询问如何绘制大约 10 座建筑物并进行互动。谷歌地图为您提供了足够的绘图位置,使用您的自定义图标(是的,也是您的建筑图标),并且可以通过使用我包含在我的代码中的 onTab 进行交互。如果您足够了解,它可以使相机视图使 3D 看起来像,甚至不使用 openGL :]
    【解决方案4】:

    如果您需要始终显示相同的地图,您可以将地图显示为布局背景(制作地图图像)并处理触摸位置以显示某些建筑物的弹出窗口。

    或使用评论中所述的 webview 并处理 touch x,y 以映射建筑物的位置。

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多