我正在尝试使用Google Maps SDK Android实现Tile Layers,但是官方文档仅包含Java中的代码示例,而我的项目位于Kotlin中。 我找不到关于如何在Kotlin中进行相同操作的任何示例。有人知道怎么做吗?
The documentation java example code:
private GoogleMap mMap;
TileProvider tileProvider = new UrlTileProvider(256, 256) {
@Override
public URL getTileUrl(int x, int y, int zoom) {
/* Define the URL pattern for the tile images */
String s = String.format("http://my.image.server/images/%d/%d/%d.png",
zoom, x, y);
if (!checkTileExists(x, y, zoom)) {
return null;
}
try {
return new URL(s);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
}
/*
* Check that the tile server supports the requested x, y and zoom.
* Complete this stub according to the tile range you support.
* If you support a limited range of tiles at different zoom levels, then you
* need to define the supported x, y range at each zoom level.
*/
private boolean checkTileExists(int x, int y, int zoom) {
int minZoom = 12;
int maxZoom = 16;
if ((zoom < minZoom || zoom > maxZoom)) {
return false;
}
return true;
}
};
TileOverlay tileOverlay = mMap.addTileOverlay(new TileOverlayOptions()
.tileProvider(tileProvider));
任何对此的帮助将受到赞赏
答案 0 :(得分:0)
最后我自己做了based in this response,我只需要实例化UrlTileProvider
抽象类,就像这样:
val tileProvider: TileProvider = object: UrlTileProvider(256, 256){
...
}
最终结果:
val tileProvider: TileProvider = object: UrlTileProvider(256, 256) {
override fun getTileUrl(x: Int, y: Int, zoom: Int): URL? {
/* Define the URL pattern for the tile images */
val s: String = String.format("http://my.image.server/images/%d/%d/%d.png",
zoom, x, y)
if (!checkTileExists(x, y, zoom)) {
return null;
}
try {
return URL(s)
} catch (e: MalformedURLException) {
throw AssertionError(e)
}
}
/*
* Check that the tile server supports the requested x, y and zoom.
* Complete this stub according to the tile range you support.
* If you support a limited range of tiles at different zoom levels, then you
* need to define the supported x, y range at each zoom level.
*/
private fun checkTileExists(x: Int, y: Int, zoom: Int): Boolean {
val minZoom: Int = 12
val maxZoom: Int = 16
if ((zoom < minZoom || zoom > maxZoom)) {
return false
}
return true
}
}
val tileOverlay: TileOverlay = mMap.addTileOverlay(TileOverlayOptions()
.tileProvider(tileProvider))
希望它可以帮助其他人。
答案 1 :(得分:0)
您在这里加油!
private var mMap:GoogleMap?=null
val tileProvider = object: UrlTileProvider(256, 256) {
override fun getTileUrl(x:Int,y:Int,zoom:Int):URL {
/* Define the URL pattern for the tile images */
val s = String.format("http://my.image.server/images/%d/%d/%d.png",
zoom, x, y)
if (!checkTileExists(x, y, zoom)) {
return null
}
try {
return URL(s)
} catch (e:MalformedURLException) {
throw AssertionError(e)
}
}
/*
* Check that the tile server supports the requested x, y and zoom.
* Complete this stub according to the tile range you support.
* If you support a limited range of tiles at different zoom levels, then you
* need to define the supported x, y range at each zoom level.
*/
private fun checkTileExists(x:Int,y:Int,zoom:Int):Boolean {
val minZoom = 12
val maxZoom = 16
if ((zoom < minZoom || zoom > maxZoom)) {
return false
}
return true
}
}
val tileOverlay = mMap!!.addTileOverlay(TileOverlayOptions()
.tileProvider(tileProvider))