好的。您可能认为这相对简单,但事实并非如此。
我在我的网站上使用开放街道地图,因为数据可以免费使用、编辑和更新 - 我的项目遵循这个口头禅,除了谷歌 API 使用限制/保存数据限制之外,谷歌地图根本不适合我。至少在网络上是这样。
鉴于此,我想我应该效仿我的 Android 应用程序,因此我利用开放街道地图数据设置了 osmdroid。
我可以在我的活动中拥有一张漂亮的地图。我还遵循了一个教程,它似乎至少可以工作,以便我可以在 tabhost/viewpager 中的片段中拥有地图视图。然而,我真正想要的(对于平板电脑)是左侧片段中的机构列表,以及右侧的地图片段,显示这些机构的位置。
我本以为很简单,但是经过数小时的研究表明这是不可能的,除非您使用一些复杂的代码和一些已弃用的方法。
所以..片段(包含地图视图)在tabhost中加载并完美运行..我可以从我的活动等访问片段中的方法..但没有什么可以简单地并排放置两个片段。
现在..我知道谷歌刚刚推出了他们的API v2..我安装了它并玩了一下..不太清楚osmdroid是如何工作的,我想我可以更新,所以我有MapFragment而不是SherlockFragment(我使用ABS)。 .然后这只是抛出 logcat 错误,要求 API 密钥等..并且考虑到我不想使用谷歌地图数据,我认为我出错了。
那么..任何人都可以建议我如何使用市场上可用的任何东西并排获得列表片段和地图片段,但最好利用开源地图数据,这样它们就没有使用限制。
我确信“可用的内容及其工作原理”的总体概述将受到大量用户的赞赏。因此,如果有人可以提供建议,那就太棒了!
在新的 Google Maps API 发布之前,我被迫使用 OSMDroid 来实现我的目的。然而,在不得不多次挖掘源代码以找出它为什么这样做(通常是错误的)之后,我非常渴望有一个新的库。
幸运的是,新的 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 https://github.com/cocoahero/android-gmaps-addons/blob/master/src/com/cocoahero/android/gmaps/addons/osm/OpenStreetMapTileProvider.java.
另外,如果您的目标是 Fragment 之前的 Android 版本(我相信您是基于使用 ABS,而不是使用 MapFragment),请确保使用 SupportMapFragment。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)