我在我的网站上使用Open街道地图,因为数据可以免费使用,编辑和更新 – 我的项目遵循这个咒语,除了googles API使用限制/保存数据限制,谷歌地图根本不适合我..至少在网上.
鉴于此,我以为我会跟随我的Android应用程序,所以我设置osmdroid利用开放的街道地图数据.
我可以在我的活动中有一个很好的地图..我也遵循一个教程,它似乎至少工作,我可以在tabhost / viewpager中的片段中有一个地图视图.然而,我真正想要的(对于平板电脑)是左边一个片段中的场所列表,右边是一个地图片段,显示这些场所的位置.
很简单我会想到,但是数小时和研究表明这是不可能的,除非你使用一些复杂的代码和一些不赞成的方法.
所以..片段(包含一个地图视图)在tabhost中完美地加载和运行..我可以从我的活动等访问片段中的方法..但没有什么可以简单地并排放置两个片段.
现在..我知道谷歌刚刚推出了他们的API v2 ..我安装了它并且玩了..不知道osmdroid如何工作,我想我可以更新所以我有MapFragment而不是SherlockFragment(我使用ABS).这个然后只是抛出了要求API密钥等的logcat错误..并且考虑到我不想使用谷歌地图数据,我认为我出错了.
所以..任何人都可以建议我如何使用市场上可用的任何东西并排获得列表片段和地图片段,但最好使用开源地图数据,这样他们就没有使用限制.
我确信全面概述“什么是可用的,以及它如何工作”将受到大量用户的非常赞赏..所以,如果有人可以建议它将是惊人的!
解决方法
幸运的是,新的Google Maps API符合要求.您可以在应用中使用Google Maps API v2,而不必使用Google的底图,但不幸的是,您必须首先获得API密钥.
我假设您想使用OpenStreetMap作为在线地图源,因此下面的代码将针对此进行定制.
GoogleMap map = <get-map-instance>; map.setMapType(GoogleMap.MAP_TYPE_NONE); TileOverlayOptions options = new TileOverlayOptions(); options.tileProvider(new UrlTileProvider(256,256) { @Override public URL getTileUrl(int x,int y,int z) { try { String f = "http://tile.openstreetmap.org/%d/%d/%d.png"; return new URL(String.format(f,z,x,y)); } catch (MalformedURLException e) { return null; } } }); map.addTileOverlay(options);
您可以在我的Google Maps API v2附加组件库here中找到此代码的更正式版本.
此外,如果您的目标是片段前Android版本,我相信您使用的是基于使用ABS的版本,而不是使用MapFragment,请确保使用SupportMapFragment.