v6: координаты каждого села, карта открывается на выбранном селе

This commit is contained in:
Dauren777 2026-06-24 11:54:37 +00:00
parent e44907f283
commit 655784582f
2 changed files with 14243 additions and 2850 deletions

View File

@ -128,8 +128,9 @@ function initSelectors() {
if (!rayon) return;
rayon.villages.forEach((v) => {
const opt = document.createElement("option");
opt.value = v;
opt.textContent = v;
const vname = typeof v === "string" ? v : v.name;
opt.value = vname;
opt.textContent = vname;
villageSel.appendChild(opt);
});
}
@ -148,13 +149,20 @@ function initSelectors() {
if (center) map.setView(center, 10);
});
function getVillageCenter(v) {
if (typeof v === "object" && v.lat && v.lng) return [v.lat, v.lng];
return null;
}
function findVillageData(name) {
const q = name.toLowerCase().trim();
for (const o of KZ_DATA) {
for (const r of o.rayons) {
for (const v of r.villages) {
if (v.toLowerCase() === q) {
return { village: v, rayon: r.rayon, oblast: o.oblast, center: r.center || o.center };
const vname = typeof v === "string" ? v : v.name;
if (vname.toLowerCase() === q) {
const center = getVillageCenter(v) || r.center || o.center;
return { village: vname, rayon: r.rayon, oblast: o.oblast, center };
}
}
}
@ -190,7 +198,18 @@ function initSelectors() {
}
villageSel.addEventListener("change", function () {
goToVillage(this.value);
const name = this.value;
if (!name) return;
const oblast = KZ_DATA.find((o) => o.oblast === oblastSel.value);
if (!oblast) return;
const rayon = oblast.rayons.find((r) => r.rayon === rayonSel.value);
if (!rayon) return;
const village = rayon.villages.find((v) => (typeof v === "string" ? v : v.name) === name);
const center = getVillageCenter(village) || (rayon ? rayon.center : null) || oblast.center;
if (center) {
map.setView(center, 14);
L.popup().setLatLng(center).setContent(`<b>${name}</b><br>${oblast.oblast}, ${rayon.rayon}`).openOn(map);
}
});
manualVillage.addEventListener("keydown", function (e) {
@ -213,8 +232,10 @@ function initSelectors() {
KZ_DATA.forEach((o) => {
o.rayons.forEach((r) => {
r.villages.forEach((v) => {
if (v.toLowerCase().includes(q)) {
results.push({ village: v, rayon: r.rayon, oblast: o.oblast, center: r.center || o.center });
const vname = typeof v === "string" ? v : v.name;
if (vname.toLowerCase().includes(q)) {
const center = getVillageCenter(v) || r.center || o.center;
results.push({ village: vname, rayon: r.rayon, oblast: o.oblast, center });
}
});
});

File diff suppressed because it is too large Load Diff