Я пытаюсь отобразить OpenCycleMaps внутри Google Maps SDK для Android, используя addTileOverlay
и пользовательский поставщик плиток, но он не работает в последней версии SDK.
Это версия SDK, которую я использую -
com.google.android.gms:play-services-maps:17.0.0
И это код, который я использую для отображения пользовательских плиток. Здесь я устанавливаю карту в none и затем отображаю вместо нее пользовательские плитки -
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 карт он перестал работать.