【问题标题】:Open Street Maps with Android Google Maps Api v2使用 Android Google Maps Api v2 打开街道地图
【发布时间】:2012-12-04 02:58:30
【问题描述】:

是否可以在 Android 上通过新的 Google Maps V2 Api 使用开放的街道地图提供程序?如果是这样,您能否提供示例或文档?我快速查看了文档并找到了 UrlTileProvider() ,所以这看起来很可能。

奖励:使用 MapFragment 类是否仍然受 Google Maps TOS 约束?

【问题讨论】:

  • 只是好奇你为什么要在谷歌地图上使用 OSM?
  • 我只是受到谷歌地图服务条款的限制。我的应用程序使用私人数据,我负担不起 10,000 美元/年...

标签: android google-maps openstreetmap google-maps-mobile google-maps-android-api-2


【解决方案1】:

您需要扩展 UrlTileProvider 类,以便您可以定义 OSM 平铺地图的 URL 并添加这样的平铺覆盖:

MyUrlTileProvider mTileProvider = new MyUrlTileProvider(256, 256, mUrl);
mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mTileProvider));

OSM 的 url 是这样定义的:

String mUrl = "http://a.tile.openstreetmap.org/{z}/{x}/{y}.png";

MyUrlTileProvider 类:

public class MyUrlTileProvider extends UrlTileProvider {

private String baseUrl;

public MyUrlTileProvider(int width, int height, String url) {
    super(width, height);
    this.baseUrl = url;
}

@Override
public URL getTileUrl(int x, int y, int zoom) {
    try {
        return new URL(baseUrl.replace("{z}", ""+zoom).replace("{x}",""+x).replace("{y}",""+y));
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    return null;
}
}

我现在正尝试通过离线模式从 OSM 获取这些平铺地图,所以如果有人得到快速解决方案,请告诉我!

【讨论】:

  • 您能否通过一个非常基本的实现对此进行扩展?
  • 我用 OSM 启动并运行了示例。效果很好。这与离线模式将是杀手。只需要找出任何许可问题....
  • @Patrick 大概您可以通过实现 TileProvider 并为 SD 提供自己的缓存来编写离线版本?它说here 在启动应用程序时需要在线,但对于 v2。很遗憾:我不确定是要试试这个还是osmdroid
  • 我们从项目开始就使用osmdroid API,它适用于在线和离线数据。
【解决方案2】:

使用此方法时,请注意 OSM Tile 使用政策:http://wiki.openstreetmap.org/wiki/Tile_usage_policy

特别是“未经事先许可,禁止大量使用(例如分发使用来自 openstreetmap.org 的图块的应用程序)”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多