volga-volga / react-native-yamap

React Native Yandex Maps | Яндекс Карты | Yandex.MapKit implementation for react native | YandexMaps
152 stars 85 forks source link

Фиксация маркера по центру карты #200

Closed DimitrenkoNikolay closed 1 year ago

DimitrenkoNikolay commented 2 years ago

Есть ли такая возможность в библиотеке? Нужно поставить маркер по центру карты, чтобы передвигая карту, можно было выбрать адрес?

ch3rn1k commented 2 years ago

По идее вам надо использовать onCameraPositionChange/onCameraPositionChangeEnd вместе с GeoSuggestions

DimitrenkoNikolay commented 2 years ago

По идее вам надо использовать onCameraPositionChange/onCameraPositionChangeEnd вместе с GeoSuggestions

Вы имеете в виду через useState обновлять центр карты? Если да, то у меня была сразу такая мысль, но работает это крайне медленно. А зачем GeoSuggestons? Честно говоря, посмотрел немного что это, но так и не понял, как можно это применить

ch3rn1k commented 2 years ago

По идее вам надо использовать onCameraPositionChange/onCameraPositionChangeEnd вместе с GeoSuggestions

Вы имеете в виду через useState обновлять центр карты? Если да, то у меня была сразу такая мысль, но работает это крайне медленно. А зачем GeoSuggestons? Честно говоря, посмотрел немного что это, но так и не понял, как можно это применить

Создаете поверх экрана обычный компонент (React), потом отслеживаете событие onCameraPositionChangeEnd и делаете запрос GeoSuggestions если надо получить название улицы. Если не надо улицу, а достаточно координат - это есть в колбеке onCameraPositionChangeEnd. Вуаля

DimitrenkoNikolay commented 2 years ago

Создаете поверх экрана обычный компонент (React), потом отслеживаете событие onCameraPositionChangeEnd и делаете запрос GeoSuggestions если надо получить название улицы. Если не надо улицу, а достаточно координат - это есть в колбеке onCameraPositionChangeEnd. Вуаля

Я понял) Проблем с получением адреса как раз-таки нет) Я правда использую Geocoder. Тут проблема больше в том, что мне нужно как-то зафиксировать маркер в точке, по которой определяется адрес, чтобы при перемещении карты он оставался всегда в этой точке. У меня была мысль сделать это через state, где будет значение из onCameraPositionChange обновляться и его присваивать маркеру (у него есть пропса point). Но это супернеоптимизированное решение. Сейчас я сделал более костыльно, просто добавил компонент с абсолютным позиционированием и процентами его подогнал к этой точке, возвращающей адрес) На нескольких экранах проверил, вроде везде одинаковая позиция у него, но понимаю, что это тоже такое себе решение. Вот я пытаюсь понять, есть ли какая-то возможность в библиотеке для этого?

ch3rn1k commented 1 year ago

Создаете поверх экрана обычный компонент (React), потом отслеживаете событие onCameraPositionChangeEnd и делаете запрос GeoSuggestions если надо получить название улицы. Если не надо улицу, а достаточно координат - это есть в колбеке onCameraPositionChangeEnd. Вуаля

Я понял) Проблем с получением адреса как раз-таки нет) Я правда использую Geocoder. Тут проблема больше в том, что мне нужно как-то зафиксировать маркер в точке, по которой определяется адрес, чтобы при перемещении карты он оставался всегда в этой точке. У меня была мысль сделать это через state, где будет значение из onCameraPositionChange обновляться и его присваивать маркеру (у него есть пропса point). Но это супернеоптимизированное решение. Сейчас я сделал более костыльно, просто добавил компонент с абсолютным позиционированием и процентами его подогнал к этой точке, возвращающей адрес) На нескольких экранах проверил, вроде везде одинаковая позиция у него, но понимаю, что это тоже такое себе решение. Вот я пытаюсь понять, есть ли какая-то возможность в библиотеке для этого?

Нет, насколько я знаю в библиотеке такого нет. Вариант с абсолютным компонентом поверх карты вполне верен

DimitrenkoNikolay commented 1 year ago

Создаете поверх экрана обычный компонент (React), потом отслеживаете событие onCameraPositionChangeEnd и делаете запрос GeoSuggestions если надо получить название улицы. Если не надо улицу, а достаточно координат - это есть в колбеке onCameraPositionChangeEnd. Вуаля

Я понял) Проблем с получением адреса как раз-таки нет) Я правда использую Geocoder. Тут проблема больше в том, что мне нужно как-то зафиксировать маркер в точке, по которой определяется адрес, чтобы при перемещении карты он оставался всегда в этой точке. У меня была мысль сделать это через state, где будет значение из onCameraPositionChange обновляться и его присваивать маркеру (у него есть пропса point). Но это супернеоптимизированное решение. Сейчас я сделал более костыльно, просто добавил компонент с абсолютным позиционированием и процентами его подогнал к этой точке, возвращающей адрес) На нескольких экранах проверил, вроде везде одинаковая позиция у него, но понимаю, что это тоже такое себе решение. Вот я пытаюсь понять, есть ли какая-то возможность в библиотеке для этого?

Нет, насколько я знаю в библиотеке такого нет. Вариант с абсолютным компонентом поверх карты вполне верен

Очень жаль, спасибо

ownikss commented 1 year ago

SDK от яндекс не позволяет это сделать из коробки. В нативном приложении можно было бы рендерить маркер внутри карты и обновлять на cameraPositionChange - было бы плавно. Но в рн слишком большая задержка при передаче события через bridge

Решение с обычной view на абсолюте вполне рабочее и стабильное