bimka
@bimka
Осваиваю Питон

Как в Yandex map передавать переменную coords?

Используется Яндекс.Карта, где пользователь кликает по карте и ему возвращается адрес.
Для дальнейших целей также необходимы координаты точки из переменной coords js-файла:.

ymaps.ready(init);

function init() {
    var myPlacemark,
        myMap = new ymaps.Map('map', {
            center: [55.753994, 37.622093],
            zoom: 13
        }, {
            searchControlProvider: 'yandex#search'
        });

    // Слушаем клик на карте.
    myMap.events.add('click', function (e) {
        var coords = e.get('coords');

        // Если метка уже создана – просто передвигаем ее.
        if (myPlacemark) {
            myPlacemark.geometry.setCoordinates(coords);
        }
        // Если нет – создаем.
        else {
            myPlacemark = createPlacemark(coords);
            myMap.geoObjects.add(myPlacemark);
            // Слушаем событие окончания перетаскивания на метке.
            myPlacemark.events.add('dragend', function () {
                getAddress(myPlacemark.geometry.getCoordinates());
            });
        }
        getAddress(coords);
    });

    // Создание метки.
    function createPlacemark(coords) {
        return new ymaps.Placemark(coords, {
            iconCaption: 'поиск...'
        }, {
            preset: 'islands#violetDotIconWithCaption',
            draggable: true
        });
    }

    // Определяем адрес по координатам (обратное геокодирование).
    function getAddress(coords) {
        myPlacemark.properties.set('iconCaption', 'поиск...');
        ymaps.geocode(coords).then(function (res) {
            var firstGeoObject = res.geoObjects.get(0);

            myPlacemark.properties
                .set({
                    // Формируем строку с данными об объекте.
                    iconCaption: [
                        // Название населенного пункта или вышестоящее административно-территориальное образование.
                        firstGeoObject.getLocalities().length ? firstGeoObject.getLocalities() : firstGeoObject.getAdministrativeAreas(),
                        // Получаем путь до топонима, если метод вернул null, запрашиваем наименование здания.
                        firstGeoObject.getThoroughfare() || firstGeoObject.getPremise()
                    ].filter(Boolean).join(', '),
                    // В качестве контента балуна задаем строку с адресом объекта.
                    balloonContent: firstGeoObject.getAddressLine()
                });
                
                
            // подтвердим адрес пользователя: улица и дом 
            if (window.confirm("Ваш адрес " + firstGeoObject.getThoroughfare() + ", " + firstGeoObject.getPremiseNumber() + "?")) {   
                // выводим полученный адрес обратно в html документ
                document.getElementById("address_confirm").innerHTML = firstGeoObject.getThoroughfare() + ", " + firstGeoObject.getPremiseNumber()
                document.getElementById("adress_box").style.visibility = 'visible';

                // поместим координаты адреса в невидимый блок
                document.getElementById("hidden_coords").innerHTML = coords;
                
            }
            
        });
    }
}

т.к. переменная coords имеет область видимости только внутри своей функции, не могу понять как ее значение можно передать в другой сторонний скрипт.
Пока я придумал только создать скрытый блок в html-файле, туда передавать данные переменной coords и уже из этого блока забирать значения для стороннего скрипта.
<script>        
        document.getElementById("address_confirm").addEventListener("DOMSubtreeModified", function() {
            responseCoords()
            let ola = document.getElementById("hidden_coords");
            alert(ola.innerHTML[0]);
        });
    </script>

Эти ужасные костыли мне дают покоя. Как их убрать? Как сделать изящно?
Думал получить координаты из GET запроса к Yandex.maps, но не могу извлечь из полученного json-файла данные.
JSON-файл имеет следующий вид:

/**/id_164899910928934596076({"status":"success","data":{"type":"FeatureCollection","properties":{"ResponseMetaData":{"SearchResponse":{"found":9,"context":"ZAAAAAgAEAAaKAoSCQAAAAAAkHZAEQAAAAAAoGZAEhIJAAAAAAAA8L8RAAAAAAAA8L8iAQAoyAE4AED+//////////8BSAFiCm1heGFkdj0yMDBqAJ0BzcxMPaABAKgBAOoBAPIBAPgBAIICAIoCAJICAJoCAA==","display":"single","boundedBy":[[37.592599,55.744966],[37.60081,55.749598]],"Point":{"type":"Point","coordinates":[37.5967045,55.74728207]},"SourceMetaDataList":{"GeocoderResponseMetaData":{"request":"55.747120012826855,37.596858777587904....

Я уже вижу нужные мне координаты: 55.747120012826855,37.596858777587904, а как их извлечь не представляю.
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Заведи переменную не с локальной областью видимости.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы