**Реагируйте на родные карты** — Как увеличить нажатый маркер?

#javascript #reactjs #typescript #react-native #maps

Вопрос:

Для моей стажировки мне нужно создать приложение с представлением карт и маркерами, вызываемое из API (стандартный API GraphQL). Но мне нужно увеличить масштаб карты на маркере, когда я нажимаю на него, и я не понимаю, как я могу это сделать.
Я искал документацию и не понял : animateCamera(camera: Camera, {duration: number}) Но что такое объект камеры ? У меня его нет. И как я могу вызвать анимационную камеру ? С ссылкой (_mapRef.current.animateCamera) ?

Вот мой код :

 <MapView
  style={styles.map}
  mapType={viewType}
  provider='google'
  ref={_map}
>
  {users !== undefined amp;amp; users.map((item, index) => (
    <Marker
      key={'user_'   index}
      title={item.username}
      description={item.posts.data.length   ' posts'}
      coordinate={{
        latitude: item.address.geo.lat,
        longitude: item.address.geo.lng
      }}
      onCalloutPress={() => {
        navigation.navigate('SingleUser', {user: item})
      }}
    />
  ))}
</MapView>
 

Спасибо за помощь

PS: Это мой первый вопрос в стеке, пожалуйста, не будьте грубы и не стесняйтесь сообщать мне, если я пропустил правило ! 🙂

PPS: Почему Стек удаляет мое «Привет», которое я ставлю в начале каждый раз, когда редактирую этот пост ?

Ответ №1:

У маркера React Native Maps есть опора под названием onPress, вы можете использовать ее для проверки нажатия на маркер.

например:

 <Marker
  key={'user_'   index}
  title={item.username}
  description={item.posts.data.length   ' posts'}
  coordinate={{
    latitude: item.address.geo.lat,
    longitude: item.address.geo.lng
  }}
  onCalloutPress={() => {
    navigation.navigate('SingleUser', {user: item})
  }}
  onPress={this.onMarkerClicked}
/>
 

Создайте функцию onMarkerClicked

 onMarkerClicked = () => {
  _map?.current?.getCamera().then((camera) => {
    camera.zoom  = 1;
    map?.current?.animateCamera(camera);
});
 

Объект камеры по умолчанию присутствует для отслеживания ниже атрибутов

 export interface Camera {
   center: LatLng;
   heading: number;
   pitch: number;
   zoom: number;
   altitude: number;
}