Как получить адрес при использовании api яндекс карт
ymaps.ready(init);
function init() {
var myPlacemark,
myMap = new ymaps.Map('map', {
center: [55.753994, 37.622093],
zoom: 9
}, {
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()
});
});
}
}
Показатьfunction init() {
var myPlacemark,
myMap = new ymaps.Map('map', {
center: [55.753994, 37.622093],
zoom: 9
}, {
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()
});
});
}
}
Я так понимаю это функция которая возвращает адрес по клику на карте, как мне получить значение в 1с?
&НаКлиенте
Процедура КартаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
Адрес = Элементы.Карта.Документ.myPlacemark;
Сообщить(Адрес);
КонецПроцедуры
Процедура КартаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
Адрес = Элементы.Карта.Документ.myPlacemark;
Сообщить(Адрес);
КонецПроцедуры
Так не работает.
По теме из базы знаний
- Яндекс-карта (API 2) + геокодер Яндекс
- Заполнение правильного адреса на основании данных яндекс карт (API Yandex)
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
- Как начать зарабатывать на разработке мобильных приложений уже завтра!
- OpenStreetMap (OSM) в 1С - вывод карты, указание маркеров, построение маршрутов
Найденные решения
У меня вот так сработало:
Т.е.
1) вынес переменную myPlacemark выше init() - после этого она стала доступна извне.
2) myPlacemark2 - переименовал просто чтобы не мешалась с вынесенной myPlacemark.
Кроме того, myPlacemark заполняется не сразу, поэтому выцепить адрес получилось через обработчик ожидания:
Сообщения, выведенные обработкой через 5 секунд:
Россия, Московская область, Одинцовский городской округ, деревня Раздоры, 52
деревня Раздоры
Без API-key геокодирование у меня не работало, т.е. еще выше в строке подключения:
здесь apikey не настоящий :) И слово "sc ript" без пробела, Инфостарт почему-то от себя его вставляет...
PS Делал на 8.3.15.1565
...
var myPlacemark;
ymaps.ready(init);
function init() {
var myPlacemark2,
...
1) вынес переменную myPlacemark выше init() - после этого она стала доступна извне.
2) myPlacemark2 - переименовал просто чтобы не мешалась с вынесенной myPlacemark.
Кроме того, myPlacemark заполняется не сразу, поэтому выцепить адрес получилось через обработчик ожидания:
...
ПодключитьОбработчикОжидания("Через5Сек",5,Истина);
...
&НаКлиенте
Процедура Через5Сек()
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.balloonContent);
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.iconCaption);
КонецПроцедуры
Сообщения, выведенные обработкой через 5 секунд:
Россия, Московская область, Одинцовский городской округ, деревня Раздоры, 52
деревня Раздоры
Без API-key геокодирование у меня не работало, т.е. еще выше в строке подключения:
<sc ript src="https://api-maps.yandex.ru/2.1/?apikey=9b88c0ff-ffec-4284-a9f2-0abc1234567c&lang=ru_RU" type="text/javascript"></sc ript>
PS Делал на 8.3.15.1565
(14)
1) Объявляем в зоне видимости из 1С var coordinates = {lat:0,lon:0};
2) После получения coords записываем в нашу coordinates широту и долготу coordinates.lat = coords[0]; coordinates.lon = coords[1];
3) В 1С помимо вывода строкового адреса, обращаемся к свойствам переменной coordinates
Результирующие сообщения 1С:
Россия, Московская область, Электросталь, улица Маяковского
Электросталь, улица Маяковского
55,7948255601463
38,4405744453125
1) Объявляем в зоне видимости из 1С var coordinates = {lat:0,lon:0};
2) После получения coords записываем в нашу coordinates широту и долготу coordinates.lat = coords[0]; coordinates.lon = coords[1];
...
var myPlacemark;
var coordinates = {lat:0,lon:0};
ymaps.ready(init);
function init() {
//var myPlacemark,
myMap = new ymaps.Map('map', {
center: [55.753994, 37.622093],
zoom: 9
}, {
searchControlProvider: 'yandex#search'
});
// Слушаем клик на карте.
myMap.events.add('click', function (e) {
var coords = e.get('coords');
coordinates.lat = coords[0];
coordinates.lon = coords[1];
...
Показать3) В 1С помимо вывода строкового адреса, обращаемся к свойствам переменной coordinates
&НаКлиенте
Процедура Через5Сек()
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.balloonContent);
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.iconCaption);
Сообщить(Элементы.Карта.Документ.coordinates.lat);
Сообщить(Элементы.Карта.Документ.coordinates.lon);
КонецПроцедуры
Результирующие сообщения 1С:
Россия, Московская область, Электросталь, улица Маяковского
Электросталь, улица Маяковского
55,7948255601463
38,4405744453125
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
У меня вот так сработало:
Т.е.
1) вынес переменную myPlacemark выше init() - после этого она стала доступна извне.
2) myPlacemark2 - переименовал просто чтобы не мешалась с вынесенной myPlacemark.
Кроме того, myPlacemark заполняется не сразу, поэтому выцепить адрес получилось через обработчик ожидания:
Сообщения, выведенные обработкой через 5 секунд:
Россия, Московская область, Одинцовский городской округ, деревня Раздоры, 52
деревня Раздоры
Без API-key геокодирование у меня не работало, т.е. еще выше в строке подключения:
здесь apikey не настоящий :) И слово "sc ript" без пробела, Инфостарт почему-то от себя его вставляет...
PS Делал на 8.3.15.1565
...
var myPlacemark;
ymaps.ready(init);
function init() {
var myPlacemark2,
...
1) вынес переменную myPlacemark выше init() - после этого она стала доступна извне.
2) myPlacemark2 - переименовал просто чтобы не мешалась с вынесенной myPlacemark.
Кроме того, myPlacemark заполняется не сразу, поэтому выцепить адрес получилось через обработчик ожидания:
...
ПодключитьОбработчикОжидания("Через5Сек",5,Истина);
...
&НаКлиенте
Процедура Через5Сек()
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.balloonContent);
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.iconCaption);
КонецПроцедуры
Сообщения, выведенные обработкой через 5 секунд:
Россия, Московская область, Одинцовский городской округ, деревня Раздоры, 52
деревня Раздоры
Без API-key геокодирование у меня не работало, т.е. еще выше в строке подключения:
<sc ript src="https://api-maps.yandex.ru/2.1/?apikey=9b88c0ff-ffec-4284-a9f2-0abc1234567c&lang=ru_RU" type="text/javascript"></sc ript>
PS Делал на 8.3.15.1565
(4)Вместо переименования в var myPlacemark2 - её можно вообще удалить за ненадобностью:
...
var myPlacemark;
ymaps.ready(init);
function init() {
//здесь закомментировано объявление переменной var myPlacemark, т.к. вынесено выше
myMap = new ymaps.Map('map', {
...
(10)
Не могу к ним обратиться, выдает "внешний обьект"
Сообщить(Элементы.Карта.Документ.myPlacemark.geometry._coordinates);
Пробовал так:
Сообщить(Элементы.Карта.Документ.myPlacemark.geometry._coordinates[0]);
но тоже пустая строка
Элементы.Карта.Документ.myPlacemark.geometry._coordinates
Не могу к ним обратиться, выдает "внешний обьект"
Сообщить(Элементы.Карта.Документ.myPlacemark.geometry._coordinates);
Пробовал так:
Сообщить(Элементы.Карта.Документ.myPlacemark.geometry._coordinates[0]);
но тоже пустая строка
(14)
1) Объявляем в зоне видимости из 1С var coordinates = {lat:0,lon:0};
2) После получения coords записываем в нашу coordinates широту и долготу coordinates.lat = coords[0]; coordinates.lon = coords[1];
3) В 1С помимо вывода строкового адреса, обращаемся к свойствам переменной coordinates
Результирующие сообщения 1С:
Россия, Московская область, Электросталь, улица Маяковского
Электросталь, улица Маяковского
55,7948255601463
38,4405744453125
1) Объявляем в зоне видимости из 1С var coordinates = {lat:0,lon:0};
2) После получения coords записываем в нашу coordinates широту и долготу coordinates.lat = coords[0]; coordinates.lon = coords[1];
...
var myPlacemark;
var coordinates = {lat:0,lon:0};
ymaps.ready(init);
function init() {
//var myPlacemark,
myMap = new ymaps.Map('map', {
center: [55.753994, 37.622093],
zoom: 9
}, {
searchControlProvider: 'yandex#search'
});
// Слушаем клик на карте.
myMap.events.add('click', function (e) {
var coords = e.get('coords');
coordinates.lat = coords[0];
coordinates.lon = coords[1];
...
Показать3) В 1С помимо вывода строкового адреса, обращаемся к свойствам переменной coordinates
&НаКлиенте
Процедура Через5Сек()
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.balloonContent);
Сообщить(Элементы.Карта.Документ.myPlacemark.properties._data.iconCaption);
Сообщить(Элементы.Карта.Документ.coordinates.lat);
Сообщить(Элементы.Карта.Документ.coordinates.lon);
КонецПроцедуры
Результирующие сообщения 1С:
Россия, Московская область, Электросталь, улица Маяковского
Электросталь, улица Маяковского
55,7948255601463
38,4405744453125
// Слушаем клик на карте.
myMap.events.add('click', function (e) {
var coords = e.get('coords');
coords22 = 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);
mycoords = coords[0];
});
myMap.events.add('click', function (e) {
var coords = e.get('coords');
coords22 = 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);
mycoords = coords[0];
});
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот