Как обновить Azure Карты слоев динамически на Android? - PullRequest
0 голосов
/ 22 февраля 2020

Я разрабатываю приложение Android, в котором отображается карта, а местоположение устройства отслеживается в точке на карте. Я использую Azure Maps SDK для самой карты и FusedLocationProviderClient (Play Services) для получения GPS-координат. Теперь я делаю это, записывая свои координаты в переменные с помощью FusedLocationProviderClient и снова читая их при создании карты в Azure. Проблема этого подхода заключается в том, что он покажет мое местоположение только на момент создания приложения, но не изменит его динамически при перемещении. То, что я хочу, это способ изменить карту после создания. Как это сделать?

Для некоторого контекста это код, который я использую для получения координат (Kotlin:)

var location = fusedLocationClient.lastLocation.result
var currentLong : Double = location?.longitude?:0.0
var currentLat : Double = location?.latitude?:0.0


locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult?) {
        locationResult ?: return
        for (location in locationResult.locations) {
            currentLat = location.latitude
            currentLong = location.longitude
            // This is just so I make sure that the values actually change
            latitudeView.text = currentLat.toString()
            longitudeView.text = currentLong.toString()
            task = client.checkLocationSettings(builder.build())
        }
    }
}

fusedLocationClient.requestLocationUpdates(
    locationRequest,
    locationCallback,
    Looper.getMainLooper()
)

И это код для написания точка на карте

mapControl.onReady {map : AzureMap ->
    //Create a data source and add it to the map.
    val dataSource =
        DataSource()
    map.sources.add(dataSource)
    //Create a list of points.
    dataSource.add(Feature.fromGeometry(Point.fromLngLat(currentLong, currentLat)))
    //Create a LineString feature and add it to the data source.
    //Create a line layer and add it to the map.
    map.layers.add(SymbolLayer(dataSource))
}

Я новичок в этой области, и документация не помогает, поэтому вся помощь приветствуется.

1 Ответ

1 голос
/ 23 февраля 2020

Просто очистите источник данных и добавьте в него новую функцию. Например, попробуйте добавить следующее в обратный вызов местоположения:

var loc = locationResult.getLastLocation() 

dataSource.clear()
dataSource.add(Feature.fromGeometry(Point.fromLngLat(loc.longitude, loc.latitude)))

Вам потребуется глобальная переменная в вашей Деятельности для источника данных, чтобы к ней было легко получить доступ из различных частей вашего приложения.

...