我的代码在下面
mapView.setTileSource(new OnlineTileSourceBase("USGS Topo", 0, 18, 256, ".png",
new String[] { "https://maps.tilehosting.com/c/48533dee-0f32-42a2-a6db-315bbc7ecca8/styles/bdbasic/{z}/{x}/{y}.png?key=xxxxxxxxxx" }) {
@Override
public String getTileURLString(long pMapTileIndex) {
return getBaseUrl()
+ MapTileIndex.getZoom(pMapTileIndex)
+ "/" + MapTileIndex.getY(pMapTileIndex)
+ "/" + MapTileIndex.getX(pMapTileIndex)
+ mImageFilenameEnding;
}
});
https://github.com/osmdroid/osmdroid/wiki/Map-Sources
我的版本是6.0.3
答案 0 :(得分:1)
请注意复制粘贴到代码中的字符串:
https://maps.tilehosting.com/c/48533dee-0f32-42a2-a6db-315bbc7ecca8/styles/bdbasic/{z}/{x}/{y}.png?key=xxxxxxxxxx"
这显然是您的tile提供程序的某些文档中的一些示例。 {z},{x}和{y}是变量,必须由osmdroid动态添加。 xxxxx应该用您的API密钥代替。
您应仅在代码中使用基础部分:
https://maps.tilehosting.com/c/48533dee-0f32-42a2-a6db-315bbc7ecca8/styles/bdbasic/
其余的URL被添加到getTileURLString
方法中。你在那里也有一个错误。在示例中可以看到,参数的顺序应为z(zoom)x和y。您已经在代码中交换了x和y。
该示例还暗示您应该具有一些API密钥。因此,请再次查看tile提供商的文档,并在必要时获取密钥。然后,您可以通过现在仅包含“ .png”的参数传递密钥。您需要将其更改为“ .png?key = yourkeyandnotthisstringorxxxxx”。
最后,您应该得到如下内容:
mapView.setTileSource(new OnlineTileSourceBase("USGS Topo", 0, 18, 256, ".png?key=yourkeyandnotthisstringorxxxxx",
new String[] { "https://maps.tilehosting.com/c/48533dee-0f32-42a2-a6db-315bbc7ecca8/styles/bdbasic/" }) {
@Override
public String getTileURLString(long pMapTileIndex) {
return getBaseUrl()
+ MapTileIndex.getZoom(pMapTileIndex)
+ "/" + MapTileIndex.getX(pMapTileIndex)
+ "/" + MapTileIndex.getY(pMapTileIndex)
+ mImageFilenameEnding;
}
});
答案 1 :(得分:0)
您设置了用户代理吗?
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IConfigurationProvider provider = Configuration.getInstance();
provider.setUserAgentValue(BuildConfig.APPLICATION_ID);
provider.setOsmdroidBasePath(getStorage());
provider.setOsmdroidTileCache(getStorage());
// provider.setDebugMapTileDownloader(true);
//provider.setDebugTileProviders(true);
setContentView(R.layout.osm_activity);
}