Перейти к содержанию

Widget:GeocodeButton

Материал из Город на ладошках

<button type="button" id="geocode-button" style="margin-left: 10px; padding: 4px 12px;">🔍 Найти координаты</button> <script> function initGeocodeButton() {

   var btn = document.getElementById('geocode-button');
   if (!btn) return;
   
   btn.onclick = function() {
       var addressInput = document.querySelector('input[name="Объект en[address]"]');
       if (!addressInput || addressInput.value.trim() === ) {
           alert('Пожалуйста, введите адрес');
           return;
       }
       
       var latField = document.querySelector('input[name="Объект en[lat]"]');
       var lonField = document.querySelector('input[name="Объект en[lon]"]');
       if (!latField || !lonField) {
           alert('Поля координат не найдены');
           return;
       }
       
       var userAddress = addressInput.value.trim();
       var fullAddress = userAddress + ', Санкт-Петербург, Россия';
       
       // Используем свой прокси-скрипт
       var url = '/geocode-proxy.php?address=' + encodeURIComponent(fullAddress);
       
       console.log('Поиск координат для:', fullAddress);
       
       fetch(url)
           .then(response => {
               if (!response.ok) {
                   return response.text().then(text => {
                       throw new Error('Ошибка ' + response.status + ': ' + text);
                   });
               }
               return response.json();
           })
           .then(data => {
               // Обрабатываем ответ от прокси
               if (data.error) {
                   alert('❌ ' + data.error);
                   return;
               }
               var geo = data.response.GeoObjectCollection.featureMember[0];
               if (geo) {
                   var coords = geo.GeoObject.Point.pos.split(' ');
                   lonField.value = coords[0];
                   latField.value = coords[1];
                   alert('✅ Координаты найдены: Широта ' + coords[1] + ', Долгота ' + coords[0]);
               } else {
                   alert('❌ Адрес "' + userAddress + '" не найден. Попробуйте уточнить.');
               }
           })
           .catch(error => {
               console.error('Ошибка при запросе:', error);
               alert('❌ Не удалось определить координаты. Проверьте адрес или введите координаты вручную.');
           });
   };

}

if (document.readyState === 'loading') {

   document.addEventListener('DOMContentLoaded', initGeocodeButton);

} else {

   initGeocodeButton();

} </script>