15

是否有可能在Android上使用新的Google Maps V2 API的开放式街道地图提供程序?如果是的话你能提供一个例子或文档吗?我很快查看了文档,发现UrlTileProvider(),所以看起来很有可能。开放街道地图与Android谷歌地图Api v2

奖励:简单地使用MapFragment类以及仍受Google地图TOS约束的OSM切片?

+1

只是想知道为什么你想在谷歌地图上使用OSM? – tyczj

+1

我只受Google地图服务条款的限制。我的应用程序使用私人数据,并且我无法承受$ 10,000 /年... – Patrick

回答

21

您需要扩展UrlTileProvider类,所以你可以定义OSM平铺图的网址,并添加一个方块叠加这样的:

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

有了这样的定义的URL,OSM:

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与离线模式,所以如果任何人得到一个快速的解决方案,请让我知道!

+0

您是否可以通过非常基本的实现扩展此功能? –

+0

有没有人用过这个?我还没有尝试过这个 – Patrick

+0

我得到了OSM的示例和运行。很棒。这与离线模式将是杀手。只需要找出有关任何许可问题...... – Patrick