osmdroid отображение карт yandex
Кто может подсказать, как реализовать отображение карт яндекса? У гугла и других провайдеров используется сферическая система координат, а у яндекса эллиптическая.. Если просто в XYTileSource или OnlineTileSourceBase отдать ссылку на карты, то карты отображаются со значительным смещением.
Ответы (1 шт):
Автор решения: Falchio
→ Ссылка
Можно отобразить при помощи Yandex MapKit SDK.
Можно при помощи Osmdroid.
Для Osmdroid только понадобится кастомный XYTileSource и API ключ Yandex, есть бесплатная версия с ограничениями.
YandexTileSource:
import org.osmdroid.tileprovider.tilesource.TileSourcePolicy
import org.osmdroid.tileprovider.tilesource.XYTileSource
import org.osmdroid.util.MapTileIndex
class YandexTileSource : XYTileSource(
NAME,
MIN_ZOOM_LEVEL,
MAX_ZOOM_LEVEL,
TILE_SIZE_PIXELS,
FILE_EXT,
baseUrls,
COPYRIGHT,
tileSourcePolicy
) {
companion object {
private const val API_KEY = "..."
private const val NAME = "AppName"
private const val MIN_ZOOM_LEVEL = 6
private const val MAX_ZOOM_LEVEL = 20
private const val TILE_SIZE_PIXELS = 256
private const val FILE_EXT = ".png"
private val baseUrls = arrayOf("https://core-renderer-tiles.maps.yandex.net/tiles?l=map")
private const val COPYRIGHT = "©Yandex"
private val tileSourcePolicy = TileSourcePolicy(
1,
TileSourcePolicy.FLAG_NO_BULK or
TileSourcePolicy.FLAG_NO_PREVENTIVE or
TileSourcePolicy.FLAG_USER_AGENT_MEANINGFUL or
TileSourcePolicy.FLAG_USER_AGENT_NORMALIZED
)
}
override fun getTileURLString(pMapTileIndex: Long): String {
return (buildString {
append(baseUrl)
append("&x=")
append(MapTileIndex.getX(pMapTileIndex))
append("&y=")
append(MapTileIndex.getY(pMapTileIndex))
append("&z=")
append(MapTileIndex.getZoom(pMapTileIndex))
append("&scale=1")
append("&lang=ru_RU")
append("&apikey=")
append(API_KEY)
append("&ads=enabled")
// просто просим у Yandex тайлы в подходящей проекции меркатора:
// https://yandex.ru/dev/tiles/doc/ru/request
append("&projection=web_mercator")
})
}
}
При этом координаты надо брать для правильной проекции, скажем с
openstreetmap.org
UPD Странно, но работает и без API ключа.