我如何获得 WMTS 的 zyx mapbox
How i can get zyx mapbox for WMTS
我想在我的应用程序目录中保存一些磁贴。我想,我可以从 bbox 开始,但我不知道当前的坐标 (z,y,x) 可供下载。
Bbox 总是喜欢:
[
southwest: Point{type=Point, bbox=null, coordinates=[-180.0, -90.0]},
northeast: Point{type=Point, bbox=null, coordinates=[180.0, 90.0]},
infiniteBounds: true
]
如何获取 z、y、x 以供手动下载?喜欢后台任务(没有UI,只是将图像保存在应用程序目录中)。
binding.mapView.getMapboxMap().getStyle { style ->
style(styleUri = MAP_STYLE) {
val url = "https://.../wmts/...:{z}/{y}/{x}?format=image/png"
//val url = "file://" + requireActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/{z}/{y}/{x}.png"
style.addSource(
rasterSource("tile_source_id") {
tileSize(256)
tileSet(url, listOf(url)) {}
}
)
style.addLayerAbove(rasterLayer("tile_layer_id", "tile_source_id") {}, "water")
}
}
指定图块的 {x} 列和 {y} 行,如 Slippy Map Tilenames specification 中所述。
import kotlin.math.*
fun getXYTile(lat : Double, lon: Double, zoom : Int) : Pair<Int, Int> {
val latRad = Math.toRadians(lat)
var xtile = floor( (lon + 180) / 360 * (1 shl zoom) ).toInt()
var ytile = floor( (1.0 - asinh(tan(latRad)) / PI) / 2 * (1 shl zoom) ).toInt()
if (xtile < 0) {
xtile = 0
}
if (xtile >= (1 shl zoom)) {
xtile= (1 shl zoom) - 1
}
if (ytile < 0) {
ytile = 0
}
if (ytile >= (1 shl zoom)) {
ytile = (1 shl zoom) - 1
}
return Pair(xtile, ytile)
}
我想在我的应用程序目录中保存一些磁贴。我想,我可以从 bbox 开始,但我不知道当前的坐标 (z,y,x) 可供下载。
Bbox 总是喜欢:
[
southwest: Point{type=Point, bbox=null, coordinates=[-180.0, -90.0]},
northeast: Point{type=Point, bbox=null, coordinates=[180.0, 90.0]},
infiniteBounds: true
]
如何获取 z、y、x 以供手动下载?喜欢后台任务(没有UI,只是将图像保存在应用程序目录中)。
binding.mapView.getMapboxMap().getStyle { style ->
style(styleUri = MAP_STYLE) {
val url = "https://.../wmts/...:{z}/{y}/{x}?format=image/png"
//val url = "file://" + requireActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/{z}/{y}/{x}.png"
style.addSource(
rasterSource("tile_source_id") {
tileSize(256)
tileSet(url, listOf(url)) {}
}
)
style.addLayerAbove(rasterLayer("tile_layer_id", "tile_source_id") {}, "water")
}
}
指定图块的 {x} 列和 {y} 行,如 Slippy Map Tilenames specification 中所述。
import kotlin.math.*
fun getXYTile(lat : Double, lon: Double, zoom : Int) : Pair<Int, Int> {
val latRad = Math.toRadians(lat)
var xtile = floor( (lon + 180) / 360 * (1 shl zoom) ).toInt()
var ytile = floor( (1.0 - asinh(tan(latRad)) / PI) / 2 * (1 shl zoom) ).toInt()
if (xtile < 0) {
xtile = 0
}
if (xtile >= (1 shl zoom)) {
xtile= (1 shl zoom) - 1
}
if (ytile < 0) {
ytile = 0
}
if (ytile >= (1 shl zoom)) {
ytile = (1 shl zoom) - 1
}
return Pair(xtile, ytile)
}