Google 在 Kotlin 中映射图块层
Google Maps Tile Layers in Kotlin
我正在尝试使用 Google Maps SDK Android 实现 Tile Layers,但官方文档只有 Java 中的代码示例,而我的项目在科特林。
我找不到任何关于如何在科特林中做同样事情的例子。有人知道怎么做吗?
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));
如有任何帮助,我们将不胜感激
最后我自己做了 ,我只需要像这样实例化 UrlTileProvider
抽象 class:
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))
希望对别人有帮助。
干杯!
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))
我正在尝试使用 Google Maps SDK Android 实现 Tile Layers,但官方文档只有 Java 中的代码示例,而我的项目在科特林。 我找不到任何关于如何在科特林中做同样事情的例子。有人知道怎么做吗?
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));
如有任何帮助,我们将不胜感激
最后我自己做了 UrlTileProvider
抽象 class:
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))
希望对别人有帮助。
干杯!
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))