Naraykin1998
@Naraykin1998

Почему ошибки на полевой местности в Яндекс.Картах API?

Всем доброе время суток! Вопрос касается карт Yandex и работы с ними по API.

Есть код. Изначально не мой. Код рисует карту в нужной позиции с балуном (меткой). Функционал - когда перетаскиваешь карту, input получает координаты. Предоставляю примеры. Проблема в следующем. При указании координат в пустынной местности (грубо говоря в полях, просто копируем из яндекс карт) то карта рисуется вообще в другом месте. А если координаты берём из города то карта рисуется верно.

Даю с ключом рабочим - дабы время не теряли.

<div id="map" style="width: 100%; height: 400px;"></div>

    Адрес:
    <input type="text" id="address">

    Координаты:
    <input type="text" id="ypoint" class="form-input">

    <script src="https://yandex.st/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://api-maps.yandex.ru/2.1/?apikey=f14114d6-4ebb-4087-b128-5d9d0454fd0e&lang&lang=ru_RU"></script>

    <script type="text/javascript">
        ymaps.ready(init);
        function init() {
            var myMap = new ymaps.Map("map", {
                center: [47.222078, 39.720358],
                zoom: 10
            }, {
                searchControlProvider: 'yandex#search'
            });

            /* Начальный адрес метки */
            var address = [47.222078, 39.720358];

            ymaps.geocode(address).then(function(res) {
                var coord = res.geoObjects.get(0).geometry.getCoordinates();

                var myPlacemark = new ymaps.Placemark(coord, null, {
                    preset: 'islands#blueDotIcon',
                    draggable: true
                });

                /* Событие dragend - получение нового адреса */
                myPlacemark.events.add('dragend', function(e){
                    var cord = e.get('target').geometry.getCoordinates();
                    $('#ypoint').val(cord);
                    ymaps.geocode(cord).then(function(res) {
                        var data = res.geoObjects.get(0).properties.getAll();
                        $('#address').val(data.text);
                    });
                });

                myMap.geoObjects.add(myPlacemark);
                myMap.setCenter(coord, 15);
            });
        }
    </script>


❌ Возникает ошибка, пример 1 (поля).
Допустим мы ставим координаты для центра карта и самого балуна 45.573370, 42.975792 По факту мы получаем карту с центром и меткой в другом месте (примерно) 45.781270891414714,42.65513599999969 что является не верным местом!

❌ Возникает ошибка, пример 2 (поля).
Допустим мы ставим координаты для центра карта и самого балуна 46.780526, 40.862630 По факту мы получаем карту с центром и меткой в другом месте (примерно) 46.817641157742884,40.70974364418027 что является не верным местом!

✅ Работает верно, пример 3 (город).
Допустим мы ставим координаты для центра карта и самого балуна 47.222078, 39.720358 По факту мы получаем карту с центром и меткой в другом месте (примерно) 47.22393713061284,39.72794710058595 что является - правильным местом.

Грубо говоря закономерность - координаты взятые из полевой местности рисуют не верное отображение карты. Координаты взятые из городской местности - рисуют карту верно.


Уже писал в Yandex - сказали что всё норм у них рисуется. Уже несколько дней с этой проблемой вожусь, решился написать сюда.

Проверял в песочнице координаты из полей и городов - https://yandex.ru/dev/maps/jsbox/2.1/icon_customImage/ всё работает верно. Вернувшись к коду - наблюдается странная закономерность которая была описана выше.
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
Naraykin1998
@Naraykin1998 Автор вопроса
Решение просто - читать внимательно документацию нужно. Ну главное спасибо людям которые помогли - указали на мою невнимательность. Публикую рабочий вариант (заменил 28 и 44 строку). На будущее другим - код не будет работать т.к. apikey был отключён мной, Вам нужно будет выпустить новый apikey в личном кабинете Яндекс.

<div id="map" style="width: 100%; height: 400px;"></div>

    Адрес:
    <input type="text" id="address">

    Координаты:
    <input type="text" id="ypoint" class="form-input">

    <script src="https://yandex.st/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://api-maps.yandex.ru/2.1/?apikey=f14114d6-4ebb-4087-b128-5d9d0454fd0e&lang&lang=ru_RU"></script>

    <script type="text/javascript">
        ymaps.ready(init);
        function init() {
            var myMap = new ymaps.Map("map", {
                center: [46.780526, 40.862630],
                zoom: 10
            }, {
                searchControlProvider: 'yandex#search'
            });

            /* Начальный адрес метки */
            var address = [46.780526, 40.862630];

            ymaps.geocode(address).then(function(res) {
                var coord = res.geoObjects.get(0).geometry.getCoordinates();

                var myPlacemark = new ymaps.Placemark(address, null, {
                    preset: 'islands#blueDotIcon',
                    draggable: true
                });

                /* Событие dragend - получение нового адреса */
                myPlacemark.events.add('dragend', function(e){
                    var cord = e.get('target').geometry.getCoordinates();
                    $('#ypoint').val(cord);
                    ymaps.geocode(cord).then(function(res) {
                        var data = res.geoObjects.get(0).properties.getAll();
                        $('#address').val(data.text);
                    });
                });

                myMap.geoObjects.add(myPlacemark);
                myMap.setCenter(address, 15);
            });
        }
    </script>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
МТС Краснодар
от 120 000 до 140 000 ₽
от 200 000 до 250 000 ₽
ВашHR Нахабино, пгт
от 100 000 ₽
29 сент. 2022, в 11:34
200 руб./за проект
29 сент. 2022, в 10:50
50000 руб./за проект