android - 自定义图块覆盖在最新的适用于 Android 的 Google Maps SDK 中不起作用
问题描述
我正在尝试在 google maps sdk 中显示 OpenCycleMaps for android 使用addTileOverlay
和自定义磁贴提供程序,但它在最新版本的 SDK 中不起作用。
这是我正在使用的 SDK 版本 -
com.google.android.gms:play-services-maps:17.0.0
这是我用来显示自定义图块的代码。在这里,我将地图设置为无,然后改为显示自定义图块 -
val SYDNEY = LatLng(-33.862, 151.21)
val ZOOM_LEVEL = 13f
override fun onMapReady(googleMap: GoogleMap?) {
googleMap ?: return
with(googleMap) {
moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, ZOOM_LEVEL))
addMarker(MarkerOptions().position(SYDNEY))
mapType = GoogleMap.MAP_TYPE_NONE
val mTileProvider = MyUrlTileProvider(256, 256, "http://a.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png")
addTileOverlay(TileOverlayOptions().tileProvider(mTileProvider))
}
}
这是自定义磁贴提供程序类 -
class MyUrlTileProvider(width: Int, height: Int, private val baseUrl: String) : UrlTileProvider(width, height) {
override fun getTileUrl(x: Int, y: Int, zoom: Int): URL? {
try {
return URL(baseUrl.replace("{z}", "" + zoom).replace("{x}", "" + x).replace("{y}", "" + y))
} catch (e: MalformedURLException) {
e.printStackTrace()
}
return null
}
}
为确保问题不在我的代码中,我在https://github.com/googlemaps/android-samples/tree/master/ApiDemos/kotlin中尝试了同样的 ^ 代码,因为它们尚未升级到 androidX 并且仍在使用play-services-maps:11.8.0
它正在那里工作;正在显示自定义图块。在升级相同的代码以使用最新的地图 SDK 时,它停止工作。
解决方案
问题根本不在 TileProvider 或 Google Maps 组件中。问题在于磁贴网址。其中的第一个问题是 url 是 http,请求失败。第二个问题是a.tile.opencyclemap.org
在 Android 上不知何故无法解决。所以我查找了 OSM wiki 并找到了 opencyclemaps 的这个 url——http://tile.thunderforest.com/cycle/${z}/${x}/${y}.png
它非常有效。
这是工作代码 -
mapType = GoogleMap.MAP_TYPE_NONE
val mTileProvider = MyUrlTileProvider(256, 256, "https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png.png")
addTileOverlay(TileOverlayOptions().tileProvider(mTileProvider))
推荐阅读
- ui-automation - 在空手道的 Internet Explorer 中启动几秒钟后连接被拒绝
- python-3.x - 如何使用 python 将 html_Table 转换为 Dash 中的 pandas 数据框?
- c++ - 使用多个 .cpp 文件时调用函数
- javascript - React - 我是否应该为每个表单输入设置不同的输入更改事件
- amazon-web-services - 撤消失效 AWS Cloudfront
- javascript - 当用户离开页面时,如何使用 Aplinejs 触发模式?
- javascript - 导航项目未在大屏幕上显示
- javascript - deleteMany 触发器会删除所有已删除文档上的 post 中间件吗?
- python - 使用 selenium 的 python 中的警告-“字符串中的异常反斜杠:'\P'
- kubernetes - 无法访问外部具有负载均衡器的 Kubernetes 集群内的文件