Skip to content

Commit

Permalink
change js
Browse files Browse the repository at this point in the history
  • Loading branch information
ngoyen05 committed Dec 24, 2024
1 parent 46d93ad commit e82872f
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 31 deletions.
143 changes: 113 additions & 30 deletions src/main/resources/static/JavaScript/filtration_script.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,38 +144,121 @@ document.addEventListener("DOMContentLoaded", () => {
window.location.href = '/main';
});

const map = L.map("map").setView([60.0, 30.0], 7); // Центр карты
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").addTo(map);

let drawnRectangle;
map.on("click", (e) => {
if (drawnRectangle) map.removeLayer(drawnRectangle);
const bounds = [[e.latlng.lat - 0.1, e.latlng.lng - 0.1], [e.latlng.lat + 0.1, e.latlng.lng + 0.1]];
drawnRectangle = L.rectangle(bounds, { color: "blue", weight: 1 }).addTo(map);
});
// =======================Поиск по области на карте====================
const mapElement = document.getElementById("map");
const fullscreenControls = document.getElementById("fullscreenControls");
const confirmSelectionButton = document.getElementById("confirmSelection");
const exitFullscreenButton = document.getElementById("exitFullscreen");

document.getElementById("searchByArea").addEventListener("click", () => {
if (drawnRectangle) {
const bounds = drawnRectangle.getBounds();
const area = {
north: bounds.getNorth(),
south: bounds.getSouth(),
east: bounds.getEast(),
west: bounds.getWest(),
};
fetch("/api/lakes/searchByArea", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(area),
})
.then((response) => response.json())
.then((data) => {
console.log("Найденные озера:", data);
})
.catch((error) => console.error("Ошибка поиска:", error));
} else {
alert("Выделите область на карте.");
// Инициализация карты Leaflet
const map = L.map("map").setView([60.0, 30.0], 6);
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
maxZoom: 19,
}).addTo(map);

// Инициализация Leaflet Draw
const drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);

const drawControl = new L.Control.Draw({
edit: {
featureGroup: drawnItems,
},
draw: {
polygon: false,
polyline: false,
rectangle: true,
circle: false,
marker: false,
circlemarker: false,
},
});
map.addControl(drawControl);

// Массив для хранения названий найденных озер
const lakeNames = [];

// Функция для выполнения запроса к Overpass API
const fetchLakesInArea = async (bounds) => {
const [south, west, north, east] = bounds;
const query = `
[out:json];
(
way["natural"="water"]["water"="lake"](${south},${west},${north},${east});
relation["natural"="water"]["water"="lake"](${south},${west},${north},${east});
);
out tags;
`;
const url = `https://overpass-api.de/api/interpreter?data=${encodeURIComponent(query)}`;

try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Ошибка запроса: ${response.status}`);
}
const data = await response.json();
const lakes = data.elements;

// Очистка текущего массива и добавление названий озер
lakeNames.length = 0;
lakes.forEach((lake) => {
if (lake.tags && lake.tags.name) {
lakeNames.push(lake.tags.name);
}
});

console.log("Найденные озера:", lakeNames);
alert(`Найдено ${lakeNames.length} озер. Смотрите консоль для деталей.`);
} catch (error) {
console.error("Ошибка при запросе озер:", error);
alert("Произошла ошибка при поиске озер. Проверьте консоль для деталей.");
}
};

// Обработчик завершения рисования
map.on(L.Draw.Event.CREATED, (event) => {
const layer = event.layer;
drawnItems.addLayer(layer);

// Выделение области цветом
layer.setStyle({
color: "#00ff00", // Цвет выделенной области
fillOpacity: 0.5, // Прозрачность заливки
});

// Получение координат области (юг, запад, север, восток)
const bounds = layer.getBounds();
const south = bounds.getSouth();
const west = bounds.getWest();
const north = bounds.getNorth();
const east = bounds.getEast();

// Поиск озер в выделенной области
fetchLakesInArea([south, west, north, east]);
});

// Обработчик нажатия на карту для перехода в полноэкранный режим
mapElement.addEventListener("click", () => {
mapElement.classList.add("fullscreen");
fullscreenControls.classList.add("visible");
});

// Обработчик кнопки "Закрыть"
exitFullscreenButton.addEventListener("click", () => {
mapElement.classList.remove("fullscreen");
fullscreenControls.classList.remove("visible");
});

// Обработчик кнопки "ОК"
confirmSelectionButton.addEventListener("click", () => {
alert("Выбор области подтвержден!");
mapElement.classList.remove("fullscreen");
fullscreenControls.classList.remove("visible");
});



// =========================================================================

});

6 changes: 5 additions & 1 deletion src/main/resources/static/JavaScript/main_script.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ function goFilter(){

function goToProfile(){
window.location.href = '/users/profile/current';
}
}

function goSearch(){
window.location.href = '/lakes/main/search';
}
65 changes: 65 additions & 0 deletions src/main/resources/static/JavaScript/profile_script.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,68 @@ async function updateProfile(newName, newEmail) {
alert('Ошибка при обновлении профиля: ' + errorData.message);
}
}

document.addEventListener('DOMContentLoaded', () => {
const changePhotoButton = document.getElementById('change-photo-button');
const savePhotoButton = document.getElementById('save-photo-button');
const cancelPhotoButton = document.getElementById('cancel-photo-button');
const photoUrlInput = document.getElementById('photo-url-input');

// Показать поле для ввода ссылки
changePhotoButton.addEventListener('click', () => {
photoUrlInput.style.display = 'inline-block';
savePhotoButton.style.display = 'inline-block';
cancelPhotoButton.style.display = 'inline-block';
changePhotoButton.style.display = 'none';
});

// Сохранить новую ссылку на фото
savePhotoButton.addEventListener('click', async () => {
const newPhotoUrl = photoUrlInput.value.trim();

if (!newPhotoUrl) {
alert('Введите ссылку на фото.');
return;
}

const userId = window.location.pathname.split('/').pop();

try {
const response = await fetch(`/users/profile/${userId}/update-photo-url`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ photoUrl: newPhotoUrl }),
});

if (response.ok) {
document.getElementById('profile-photo').src = newPhotoUrl; // Обновить фото на странице
alert('Фото обновлено успешно!');
} else {
const errorData = await response.json();
alert('Ошибка при обновлении фото: ' + errorData.message);
}
} catch (error) {
alert('Ошибка подключения к серверу.');
} finally {
resetPhotoEditingState(); // Возвращаем интерфейс в исходное состояние
}
});

// Отмена изменения фото
cancelPhotoButton.addEventListener('click', () => {
resetPhotoEditingState(); // Возвращаем интерфейс в исходное состояние
});

// Функция для сброса состояния редактирования фото
function resetPhotoEditingState() {
photoUrlInput.style.display = 'none';
savePhotoButton.style.display = 'none';
cancelPhotoButton.style.display = 'none';
changePhotoButton.style.display = 'inline-block';
photoUrlInput.value = ''; // Очистить поле ввода
}
});


Empty file.

0 comments on commit e82872f

Please sign in to comment.