8

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

以下是我可以考虑实现这一目标的一些方法。

谷歌地图

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

网页浏览量

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

OpenGL?

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

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

4

4 回答 4

7

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

您可以在此处查看示例列表。对任何示例进行简单的查看源代码将使您非常清楚地了解它们在做什么。您还可以查看此示例,该示例在地图区域上绘制了一堆图像缩略图,并能够单击以获取更多详细信息。此示例使用在线提要,但您可以轻松使用本地提要.. 甚至是从应用程序传递到 webview 的提要

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

于 2012-08-08T17:13:51.463 回答
5

从一开始就可能需要 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;
    }
}

希望这可以帮助。

于 2012-08-04T20:15:51.300 回答
2

谷歌地图

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

这是如何做到的(我做到了并且有效):

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

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

于 2012-08-07T09:25:39.353 回答
0

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

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

于 2012-08-02T09:01:34.087 回答