Я использую Kotlin с osmdroid 6.1.18
Мне удалось отобразить карту с MAPNIK в качестве источника фрагментов:
Код: Выделить всё
MapView.setTileSource(TileSourceFactory.MAPNIK)
Однако на этой карте отображается слишком много информации, с которой люди могут играть.
Я хочу отобразить карта только с дорогами и тропами (может быть, их названиями, но это все!).
Поэтому я попытался отобразить другие карты из тайлов: HIKEBIKEMAP, OPEN_SEAMAP, PUBLIC_TRANSPORT и т. д.
Но все они пустые:
Пустая карта
Я поискал в небольшом FAQ на GitHub и попробовал все решения, связанные с моей проблемой:
- установка «пользовательского агента»
создание "network_security_config.xml" - проверка разрешений в "AndroidManifest.xml"
Поэтому я попытался использовать режим отладки[/b] из Configuration.getInstance().isDebugMode = true, но я тону от объема информации, которую я получаю в Logcat. Я не знаю, какая ошибка связана с моей проблемой с картой.
Я прекратил поиск в режиме отладки и сосредоточился на настройке TileSource через URL-адреса. вот так. Но карта по-прежнему пуста, даже если я пробовал разные URL-адреса, рекомендованные в других решениях stackoverflow.
Я сомневаюсь, что ссылки на URL-адреса не работают.
У меня нет выбора, и я как бы заблудился. , поэтому я прошу помощи, чтобы просто отобразить более простую карту!
Вот моя основная активность:
Код: Выделить всё
class MainActivity : ComponentActivity() {
private val REQUEST_PERMISSIONS_REQUEST_CODE = 1
private lateinit var map : MapView
private lateinit var text : TextView
private lateinit var mapController : IMapController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Configuration.getInstance().apply {
userAgentValue = applicationContext.packageName
load( applicationContext, PreferenceManager.getDefaultSharedPreferences(applicationContext))
// isDebugMode = true // DEBUG
}
setContentView(R.layout.activity_main)
// DEBUG TextView
//text = findViewById(R.id.debugText)
//Configuration.getInstance().apply {
// text.append("cacheMapTileCount : $cacheMapTileCount\n" +
// "cacheMapTileOvershoot : $cacheMapTileOvershoot\n")
//}
// TILES
val tileSource: ITileSource = XYTileSource(
"HOT", 1, 20, 256, ".png", arrayOf(
"http://a.tile.openstreetmap.fr/",
"http://b.tile.openstreetmap.fr/",
"http://c.tile.openstreetmap.fr/"
), "© OpenStreetMap contributors"
)
// Map creation from Tiles
map = findViewById(R.id.map)
map.apply {
setTileSource(tileSource)
setBuiltInZoomControls(true)
overlayManager
}
// Start from this point
val startPoint = GeoPoint(47.9, 1.9)
mapController = map.controller
mapController.setZoom(18.0)
mapController.setCenter(startPoint)
// Display my location
// val mLocationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(applicationContext), map)
// mLocationOverlay.enableMyLocation()
// map.overlays.add(mLocationOverlay)
// Display a compass
// val compassOverlay = CompassOverlay(applicationContext, InternalCompassOrientationProvider(applicationContext), map)
// compassOverlay.enableCompass()
// map.overlays.add(compassOverlay)
// Display lonlat grid
//val overlay = LatLonGridlineOverlay2()
//map.overlays.add(overlay)
// Add map rotation
// val rotationGestureOverlay = RotationGestureOverlay(map)
// rotationGestureOverlay.isEnabled
// map.setMultiTouchControls(true)
// map.overlays.add(rotationGestureOverlay)
// Interest point creation
// var items = mutableListOf()
// var origin = OverlayItem("Statue de Jeanne d'Arc","Héroïne d'Orléans", GeoPoint(47.8,2.0))
//var draw : Drawable = origin.getMarker(0)
// items.add(origin)
// items.add(OverlayItem("3030","Random", GeoPoint(0.1,0.1)))
// Map listener
// val listener = object : OnItemGestureListener {
// override fun onItemSingleTapUp(index : Int, item : OverlayItem): Boolean {
// println("MAP : onItemSingleTapUp") // DEBUG
// return true
// }
// override fun onItemLongPress(index : Int, item : OverlayItem): Boolean {
// println("MAP : onItemLongPress") // DEBUG
// return false
// }
// }
// var mOverlay = ItemizedOverlayWithFocus(applicationContext, items, listener)
// mOverlay.setFocusItemsOnTap(true)
// map.overlays.add(mOverlay)
// Inside your activity
/*if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted, request it
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
MY_PERMISSIONS_REQUEST_LOCATION
)
}*/
}
override fun onPause() {
super.onPause()
map.onPause()
println("MAP : onPause") // DEBUG
}
override fun onResume() {
super.onResume()
map.onResume()
println("MAP : onResume") // DEBUG
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
val permissionsToRequest = ArrayList()
var i = 0
while (i < grantResults.size) {
permissionsToRequest.add(permissions[i])
i++
}
if (permissionsToRequest.size > 0) {
ActivityCompat.requestPermissions(
this,
permissionsToRequest.toTypedArray(),
REQUEST_PERMISSIONS_REQUEST_CODE)
}
}
}
Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/785 ... mplier-map