我需要我的应用程序的一部分,以获得由大约10栋建筑组成的方形区域的交互式地图。您必须能够点击建筑物并获得有关它的一些信息。我知道有几种方法可以解决这个问题,但我希望有一些背景知识的人可以给我一些提示。
以下是我可以考虑实现这一目标的一些方法。
我已经实施了Google Maps API,但效果很好,但并没有真正起到我想要的效果。 Google地图需要互联网连接,您可以访问整个地图。我需要它被锁定在一个区域。
这似乎是一个很好的选择。我确定我能想出一个简单的图像地图,当您点击某个建筑物时,它会为您提供更多信息。唯一的问题是你还需要一个互联网连接。
我从来没有真正地研究过这个问题,但我听说实施起来很困难而且很痛苦。它可以在本地运行,但值得吗?
还有其他方法可以开发交互式地图吗?需要记住的是,我有一天也想把它移植到iOS上(如果有人也有这方面的经验)
答案 0 :(得分:5)
如果您想要完全控制并且习惯使用html和javascript,我强烈建议您使用开源OpenLayers库。您可以创建一个html页面,将其保存在资产中并在设备上本地运行。您可以创建自己的一组地图图块,甚至可以使用一个单独的jpeg文件,然后在其上“映射”您想要的建筑物,然后使用简单但广泛的OpenLayers API来进行构建选择和信息显示。它甚至还具有内置的多点触控功能,可用于平移和缩放。适用于移动设备。
您可以看到示例列表here。在任何示例上执行简单的视图源将使您清楚地了解它们正在做什么。您还可以查看this example,它会在闪烁的地图区域绘制一组图像缩略图,并可以单击以获取更多详细信息。此示例使用在线Feed,但您可以轻松使用本地..甚至一个passed in from the app to the webview。
PS。除了积极地将它用于我的项目之外,我与OpenLayers没有任何关系。
答案 1 :(得分:4)
从一开始就可能需要10页回答您的问题。
我们先来看看https://developers.google.com/maps/documentation/android/hello-mapview
在您能够使用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;
}
}
希望这有帮助。
答案 2 :(得分:2)
Google地图
以下是如何做到的(我做了它并且有效):
ItimizedOverlays
对于每个步骤,StackOverflow都有很好的答案。
答案 3 :(得分:0)
如果您需要始终显示相同的地图,您可以只显示地图作为布局背景(制作地图图像)并处理触摸位置以显示某个建筑物的弹出窗口。
或者使用评论中所述的webview并处理触摸x,y来映射建筑物的位置。