Изменить координаты с пикселями в Android Google Maps - PullRequest
0 голосов
/ 25 октября 2018

Я использую Карты Google и пытаюсь переместить camera в определенную позицию, используя Широту и Долготу.Я не хочу использовать метод scrollBy, предоставленный в Camera объекте, потому что я хочу получить новые значения широты и долготы после модификации.

val myLocation = LatLng(lat,lng)
val latitudeOffset = 100 // pixels 
val cameraCenter = getModifiedLocation(myLocation, latitudeOffset)
moveCamera(CameraUpdateFactory.newLatLngZoom(cameraCenter, CAMERA_ZOOM))

Я пытался использовать что-то вроде этого

fun getModifiedLocation(location, latitudeOffset) {
 val offsetInCoordinates = latitudeOffset / 2.pow(CAMERA_ZOOM)
 return LatLng(location.latitude - offsetInCoordinates, location.longitude)
}

Дело в том, что offsetInCoordinates перемещает камеру на большее количество пикселей, чем ожидалось.

enter image description here

Ответы [ 2 ]

0 голосов
/ 30 июля 2019

Я думаю, что эта функция должна возвращать LatLng, что, если она используется для центрирования карты, должна держать указатель над вашим пользовательским видом, если вы установили соответствующее значение измерения для map_center_pointer_vertical_offset (для меня 60dp добился цели):

private fun calculateMapCenter(map: GoogleMap, markerPosition: LatLng): LatLng {
    val mapCenterPoint = map.projection.toScreenLocation(map.cameraPosition.target)
    val pointOffsetFromCenter = map.projection.fromScreenLocation(
        Point(
            mapCenterPoint.x,
            mapCenterPoint.y + resources.getDimension(R.dimen.map_center_pointer_vertical_offset).toInt()
        )
    )
    val latDelta = pointOffsetFromCenter.latitude - map.cameraPosition.target.latitude
    val lngDelta = pointOffsetFromCenter.longitude - map.cameraPosition.target.longitude
    return LatLng(markerPosition.latitude + latDelta, markerPosition.longitude + lngDelta)
}
0 голосов
/ 25 октября 2018

Чтобы получить широту и долготу позиции xy на карте, вы можете использовать метод fromScreenLocation().

Использовать что-то вроде:

LatLng latLng = map.getProjection().fromScreenLocation(new Point(x,y));

где x и yявляются точкой на карте вида «карта».

Вы также можете использовать toScreenLocation(), чтобы получить xy-позицию данного LatLng.

Point pt = map.getProjection().toScreenLocation(latLng);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...