OnCameraChangeListener для яндекс карт
Я хочу обнаружить изменение положения карты (такое же, как изменение камеры на карте) на картах Яндекса. Google Maps API предоставляет такую возможность через OnCameraChangeListener(), но я не смог найти подходящий для Яндекса.
SO: Какая функция Google OnCameraChangeListener подходит для карт Яндекса?
Заранее спасибо.
2 ответа
Я знаю, что ответ слишком запоздал, но, возможно, поможет кому-то:
class GeofenceActivity : ComponentActivity() , CameraListener {
private lateinit var mapViewYandex: com.yandex.mapkit.mapview.MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
SetupMapInitializing(this)
mapViewYandex.map.addCameraListener(this)
}
private fun SetupMapInitializing(cx : Context){
try {
MapKitFactory.setApiKey("your-key")
MapKitFactory.initialize(cx)
I18nManagerFactory.setLocale(Locale.getDefault().language)
} catch(e : IOException){
e.printStackTrace()
}
}
override fun onCameraPositionChanged(
p0: Map,
p1: CameraPosition,
p2: CameraUpdateReason,
p3: Boolean
) {
Log.w(
"Yandex",
p1.target.latitude.toString() + " , " +
p1.target.longitude.toString()
)
}
}
Вам нужно сверху добавить обработчик событий для карты с заголовкомboundschange
Вот пример простого кода:
<script>
var myMap;
ymaps.ready(init);
function init () {
myMap = new ymaps.Map('map', {
center: [55.76, 37.64], // Moscow
zoom: 10
});
//add an event handler for detecting any change to the boudnaries of the map
myMap.events.add('boundschange', onBoundsChange);
//a callback function to do something with the new boundaries
function onBoundsChange(e){
console.log(e.originalEvent.newBounds);
}
}
</script>
И самый простой HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Detecting boundary changes of a Yandex Map</title>
<script src="https://api-maps.yandex.ru/2.1/?lang=en_RU&apikey=<your API-key>" type="text/javascript"></script>
<style>
body, html {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
#map {
width: 100%;
height: 90%;
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>