Используется Яндекс.Карта, где пользователь кликает по карте и ему возвращается адрес.
Для дальнейших целей также необходимы координаты точки из переменной 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, а как их извлечь не представляю.