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>