From ce6871d623f8bcae36298b0a6759e1d214c8d261 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Sun, 9 Aug 2026 03:31:42 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20g=C3=BCncellenmi=C5=9F=20profil=20?= =?UTF-8?q?=C3=A7erezi=20ile=20sonu=C3=A7=20sayfas=C4=B1=20y=C3=B6nlendirm?= =?UTF-8?q?eleri?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Profil çerezinin SSR'da kullanılmasını sağlayarak, sonuç sayfasındaki yönlendirmeleri güncelledik. Artık profil bilgileri URL parametreleri yerine çerezden alınarak işleniyor. Ayrıca, profil çerezi olmayan kullanıcılar için yönlendirme mantığı iyileştirildi. Çeşitli bileşenlerdeki URL oluşturma fonksiyonları güncellenerek, profil bilgileri çerezden okunacak şekilde düzenlendi. Bu değişiklikler, kullanıcı deneyimini artırmayı ve daha tutarlı bir veri akışı sağlamayı hedefliyor. --- scripts/ulke-harita-uret.ts | 209 ++++++++++++++++++ src/app/api/programlar/route.ts | 3 +- src/app/sonuc/page.tsx | 58 +++-- src/components/arama-funnel-karti.tsx | 10 +- .../katalog/components/universite-icerik.tsx | 12 +- .../components/universite-konum-haritasi.tsx | 112 +++++++--- .../liste/components/program-tablosu.tsx | 4 +- .../liste/components/secimlerim-paneli.tsx | 2 +- .../liste/components/tercih-haritasi.tsx | 43 ++-- .../components/tercih-profili-kapisi.tsx | 7 +- .../liste/hooks/use-tercih-profili.ts | 23 +- .../odeme/components/rapor-yok-cta.tsx | 2 +- .../components/hero-focus-button.tsx | 2 +- .../pazarlama/components/meraklisina-demo.tsx | 2 +- .../rapor/components/liste-uretici.tsx | 2 +- .../rapor/components/listem-bos-cta.tsx | 2 +- .../rapor/components/tadimlik-satiri.tsx | 2 +- .../sihirbaz/components/cta-sira-form.tsx | 6 +- .../sihirbaz/components/hero-form.tsx | 6 +- .../sihirbaz/components/sihirbaz-adimlar.tsx | 41 +++- .../sihirbaz/components/sira-gerekli.tsx | 16 +- src/features/sihirbaz/sihirbaz-profil.ts | 21 ++ src/features/sihirbaz/sihirbaz-sabitler.ts | 49 ++-- src/lib/harita-ulkeler-verisi.ts | 62 ++++++ src/lib/harita-ulkeler.ts | 115 ++++++++++ src/lib/katalog.ts | 36 ++- 26 files changed, 702 insertions(+), 145 deletions(-) create mode 100644 scripts/ulke-harita-uret.ts create mode 100644 src/lib/harita-ulkeler-verisi.ts create mode 100644 src/lib/harita-ulkeler.ts diff --git a/scripts/ulke-harita-uret.ts b/scripts/ulke-harita-uret.ts new file mode 100644 index 0000000..865bfe6 --- /dev/null +++ b/scripts/ulke-harita-uret.ts @@ -0,0 +1,209 @@ +// Yurtdışı üniversite sayfaları için ülke kontürlerini üretir. +// +// Kaynak: Natural Earth 10m admin_0_countries (kamu malı). GeoJSON bir kez +// indirilip tmp'ye önbelleklenir; çıktı src/lib/harita-ulkeler-verisi.ts +// dosyasına yazılır ve repo'ya commit'lenir (build ağa çıkmaz). +// +// Projeksiyon: ülke başına eşdikdörtgen (plate carrée) + cos(ortaEnlem) +// düzeltmesi; Türkiye haritasının kırpılmış oranıyla aynı 1050×447 kutuya +// sığdırılır. Nokta seyreltme ~1px eşikli olduğundan çıktı küçük kalır. +// +// Çalıştırma: pnpm tsx scripts/ulke-harita-uret.ts + +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; + +const GENISLIK = 1050; +const YUKSEKLIK = 447; +const KENAR_PAYI = 26; +const SEYRELTME_PX = 1.1; +const MIN_HALKA_PX = 3; // bbox'u bundan küçük halkalar (adacıklar) atlanır + +const KAYNAK_URL = + "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_10m_admin_0_countries.geojson"; + +type UlkeTanim = { + kod: string; + ad: string; + /** Vurgulanan (mavi) NE ADMIN adları */ + vurgulu: string[]; + /** Soluk çizilen bağlam parçaları (ör. Kıbrıs'ın güneyi) */ + baglam?: string[]; +}; + +const ULKELER: UlkeTanim[] = [ + { + kod: "kktc", + ad: "KKTC", + vurgulu: ["Northern Cyprus"], + baglam: [ + "Cyprus", + "Cyprus No Mans Area", + "Dhekelia Sovereign Base Area", + "Akrotiri Sovereign Base Area", + ], + }, + { kod: "azerbaycan", ad: "Azerbaycan", vurgulu: ["Azerbaijan"] }, + { kod: "kirgizistan", ad: "Kırgızistan", vurgulu: ["Kyrgyzstan"] }, + { kod: "kazakistan", ad: "Kazakistan", vurgulu: ["Kazakhstan"] }, + { + kod: "bosna-hersek", + ad: "Bosna-Hersek", + vurgulu: ["Bosnia and Herzegovina"], + }, + { kod: "makedonya", ad: "Kuzey Makedonya", vurgulu: ["North Macedonia"] }, + { kod: "arnavutluk", ad: "Arnavutluk", vurgulu: ["Albania"] }, +]; + +type Halka = [number, number][]; // [lng, lat] + +async function geojsonGetir(): Promise<{ + features: { + properties: { ADMIN: string }; + geometry: { type: string; coordinates: unknown }; + }[]; +}> { + const cachePath = path.join(os.tmpdir(), "ne_10m_admin_0_countries.geojson"); + if (!fs.existsSync(cachePath)) { + console.log("indiriliyor:", KAYNAK_URL); + const res = await fetch(KAYNAK_URL); + if (!res.ok) throw new Error(`indirme başarısız: ${res.status}`); + fs.writeFileSync(cachePath, Buffer.from(await res.arrayBuffer())); + } + return JSON.parse(fs.readFileSync(cachePath, "utf8")); +} + +function halkalar(geometry: { type: string; coordinates: unknown }): Halka[] { + if (geometry.type === "Polygon") return geometry.coordinates as Halka[]; + if (geometry.type === "MultiPolygon") + return (geometry.coordinates as Halka[][]).flat(); + throw new Error(`beklenmeyen geometri: ${geometry.type}`); +} + +function pathUret( + ringler: Halka[], + proje: (lng: number, lat: number) => { x: number; y: number }, +): string[] { + const parcalar: string[] = []; + for (const ring of ringler) { + const pts = ring.map(([lng, lat]) => proje(lng, lat)); + const xs = pts.map((p) => p.x); + const ys = pts.map((p) => p.y); + if ( + Math.max(...xs) - Math.min(...xs) < MIN_HALKA_PX && + Math.max(...ys) - Math.min(...ys) < MIN_HALKA_PX + ) + continue; + + let d = ""; + let sonX = NaN; + let sonY = NaN; + for (let i = 0; i < pts.length; i++) { + const { x, y } = pts[i]; + if (i > 0 && Math.hypot(x - sonX, y - sonY) < SEYRELTME_PX) continue; + d += `${d ? "L" : "M"}${x.toFixed(1)} ${y.toFixed(1)}`; + sonX = x; + sonY = y; + } + d += "Z"; + if (d.length > 10) parcalar.push(d); + } + return parcalar; +} + +async function main() { + const geojson = await geojsonGetir(); + const byAdmin = new Map( + geojson.features.map((f) => [f.properties.ADMIN, f] as const), + ); + + const cikti: string[] = []; + const kodlar = ULKELER.map((u) => `"${u.kod}"`).join(" | "); + + cikti.push( + "// Bu dosya scripts/ulke-harita-uret.ts tarafından üretildi — elle düzenleme.", + "// Kaynak: Natural Earth 10m admin_0_countries (kamu malı).", + "", + `export type UlkeKodu = ${kodlar};`, + "", + "export type UlkeHarita = {", + " ad: string;", + " /** lat/lng → viewBox koordinatı: x = ax*lng + bx, y = ay*lat + by */", + " proje: { ax: number; bx: number; ay: number; by: number };", + " /** Vurgulanan ülke kontürleri */", + " ulke: string[];", + " /** Soluk çizilen bağlam kontürleri (ör. Kıbrıs adasının güneyi) */", + " baglam: string[];", + "};", + "", + `export const ULKE_HARITA_GENISLIK = ${GENISLIK};`, + `export const ULKE_HARITA_YUKSEKLIK = ${YUKSEKLIK};`, + "", + "export const ULKE_HARITALARI: Record = {", + ); + + for (const ulke of ULKELER) { + const adlar = [...ulke.vurgulu, ...(ulke.baglam ?? [])]; + const geometriler = adlar.map((ad) => { + const f = byAdmin.get(ad); + if (!f) throw new Error(`Natural Earth'te bulunamadı: ${ad}`); + return { ad, ringler: halkalar(f.geometry) }; + }); + + // Sığdırma: tüm parçaların (bağlam dahil) bbox'una göre tek ölçek + const tumNoktalar = geometriler.flatMap((g) => g.ringler.flat()); + const latler = tumNoktalar.map(([, lat]) => lat); + const ortaLat = (Math.min(...latler) + Math.max(...latler)) / 2; + const kx = Math.cos((ortaLat * Math.PI) / 180); + const pxler = tumNoktalar.map(([lng]) => lng * kx); + const pyler = tumNoktalar.map(([, lat]) => -lat); + const minX = Math.min(...pxler); + const maxX = Math.max(...pxler); + const minY = Math.min(...pyler); + const maxY = Math.max(...pyler); + const s = Math.min( + (GENISLIK - 2 * KENAR_PAYI) / (maxX - minX), + (YUKSEKLIK - 2 * KENAR_PAYI) / (maxY - minY), + ); + const ox = (GENISLIK - s * (maxX - minX)) / 2; + const oy = (YUKSEKLIK - s * (maxY - minY)) / 2; + const proje = (lng: number, lat: number) => ({ + x: s * (lng * kx - minX) + ox, + y: s * (-lat - minY) + oy, + }); + + const vurguluPaths = geometriler + .filter((g) => ulke.vurgulu.includes(g.ad)) + .flatMap((g) => pathUret(g.ringler, proje)); + const baglamPaths = geometriler + .filter((g) => !ulke.vurgulu.includes(g.ad)) + .flatMap((g) => pathUret(g.ringler, proje)); + + const yaz = (n: number) => Number(n.toFixed(4)); + cikti.push( + ` "${ulke.kod}": {`, + ` ad: ${JSON.stringify(ulke.ad)},`, + ` proje: { ax: ${yaz(s * kx)}, bx: ${yaz(ox - s * minX)}, ay: ${yaz(-s)}, by: ${yaz(oy - s * minY)} },`, + ` ulke: ${JSON.stringify(vurguluPaths)},`, + ` baglam: ${JSON.stringify(baglamPaths)},`, + " },", + ); + console.log( + `${ulke.kod}: ${vurguluPaths.length} vurgulu + ${baglamPaths.length} bağlam path, ` + + `~${Math.round((vurguluPaths.join("").length + baglamPaths.join("").length) / 1024)}KB`, + ); + } + + cikti.push("};", ""); + const hedef = path.join( + process.cwd(), + "src", + "lib", + "harita-ulkeler-verisi.ts", + ); + fs.writeFileSync(hedef, cikti.join("\n")); + console.log("yazıldı:", hedef); +} + +main(); diff --git a/src/app/api/programlar/route.ts b/src/app/api/programlar/route.ts index 9da54f3..4b87430 100644 --- a/src/app/api/programlar/route.ts +++ b/src/app/api/programlar/route.ts @@ -36,7 +36,8 @@ export function GET(request: NextRequest) { return NextResponse.json({ error: "Geçersiz offset." }, { status: 400 }); } - // /sonuc tablosunun filtreleri sayfalamada da korunur (bkz. sonucHref) + // /sonuc tablosunun filtreleri (SSR'da profil çerezinden çözülüp tabloya + // prop geçen il/tip) sayfalama XHR'ında query ile korunur const iller = [ ...new Set(searchParams.getAll("il").filter((i) => i.trim().length > 0)), ].slice(0, 5); diff --git a/src/app/sonuc/page.tsx b/src/app/sonuc/page.tsx index 9dc8be8..f6451a9 100644 --- a/src/app/sonuc/page.tsx +++ b/src/app/sonuc/page.tsx @@ -1,6 +1,11 @@ import { Suspense } from "react"; import type { Metadata } from "next"; +import { cookies } from "next/headers"; import { PUAN_TURLERI, type PuanTuruKey } from "@/types/yokatlas"; +import { + cerezdenTercihProfili, + PROFIL_CEREZ_ADI, +} from "@/features/sihirbaz/sihirbaz-sabitler"; import { SonucProgramTablosu, SonucProgramTablosuSkeleton, @@ -14,9 +19,9 @@ import { Skeleton } from "@/components/ui/skeleton"; export const metadata: Metadata = { title: "Tercih Listeni Kur", - // Param uzayı sonsuz + içerik sıralamaya göre kişisel: indexlenmez ama - // link değeri follow ile geri akar. robots.txt'te ENGELLEME — noindex'in - // görülebilmesi için sayfa taranabilir kalmalı. + // İçerik profil çerezine göre kişisel (eski linklerde param uzayı sonsuz): + // indexlenmez ama link değeri follow ile geri akar. robots.txt'te + // ENGELLEME — noindex'in görülebilmesi için sayfa taranabilir kalmalı. robots: { index: false, follow: true }, }; @@ -47,28 +52,37 @@ export default function SonucPage({ } > - {searchParams.then((params) => { - const sira = Number.parseInt(params.sira ?? "", 10); + {Promise.all([searchParams, cookies()]).then(([params, cerezler]) => { + // Profil (sıra/tür/il/tip) normalde PROFIL_CEREZ_ADI çerezinden gelir; + // URL param taşımaz (bkz. sonucHref). Query'de sira varsa eski + // paylaşılan/yer imli link demektir — açık URL niyeti çerezi ezer, + // eski linkler çalışmayı sürdürür. + const eskiLinkSira = Number.parseInt(params.sira ?? "", 10); + const eskiLink = Number.isFinite(eskiLinkSira); + const profil = eskiLink + ? null + : cerezdenTercihProfili(cerezler.get(PROFIL_CEREZ_ADI)?.value); + + const sira = eskiLink ? eskiLinkSira : (profil?.sira ?? Number.NaN); + const turHam = eskiLink ? params.tur : profil?.tur; const turKey: PuanTuruKey = - params.tur && params.tur in PUAN_TURLERI - ? (params.tur as PuanTuruKey) - : "say"; - // Sihirbaz seçimlerinden gelen tablo filtreleri (bkz. sonucHref): - // il tekrarlı param, tip devlet|vakif allowlist'li + turHam && turHam in PUAN_TURLERI ? (turHam as PuanTuruKey) : "say"; + // Tablo filtreleri: il en fazla 5 tekrarsız, tip devlet|vakif + // allowlist'li (çerez tarafı tercihProfiliDogrula'dan zaten geçmiş + // olsa da iki kaynak aynı süzgeçten akar). + const hamIller = eskiLink + ? Array.isArray(params.il) + ? params.il + : params.il + ? [params.il] + : [] + : (profil?.secimler.iller ?? []); const iller = [ - ...new Set( - (Array.isArray(params.il) - ? params.il - : params.il - ? [params.il] - : [] - ).filter((i) => i.trim().length > 0), - ), + ...new Set(hamIller.filter((i) => i.trim().length > 0)), ].slice(0, 5); + const tipHam = eskiLink ? params.tip : profil?.secimler.universiteTipi; const uniturGrubu = - params.tip === "devlet" || params.tip === "vakif" - ? params.tip - : undefined; + tipHam === "devlet" || tipHam === "vakif" ? tipHam : undefined; if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) { return ( @@ -90,7 +104,7 @@ export default function SonucPage({ {/* Yapay Zeka'dan bağımsız ham tablo — haritanın hemen altında, sayfanın ana gövdesi; puan türü navbar'daki sıralama rozetinden değiştirilir. Sihirbaz seçimleri (il, devlet/ - vakıf) URL paramlarıyla tabloya uygulanır. */} + vakıf) profil çerezinden tabloya uygulanır. */} void }) { function sihirbazaGit() { onSec(); - // Orkestratör (SihirbazBolumu) yalnızca /sonuc?sira= geçerliyken monte; - // sırasız /sonuc'ta (SiraGerekli görünümü) olay boşa gider — kapıya düş. - if (pathname === "/sonuc" && searchParams.get("sira")) { + // Orkestratör (SihirbazBolumu) yalnızca /sonuc tabloyu render ederken + // monte: profil çerezi (client'ta aynası localStorage profili) ya da eski + // linklerdeki ?sira= geçerliyken. Profilsiz /sonuc'ta (SiraGerekli + // görünümü) olay boşa gider — kapıya düş. + if (pathname === "/sonuc" && (profil || searchParams.get("sira"))) { window.dispatchEvent(new Event(SIHIRBAZ_AC_EVENT)); return; } if (profil) { - router.push(sonucHref(profil, { sihirbaz: "1" })); + router.push(sonucHref({ sihirbaz: "1" })); return; } // Yapay Zeka niyetli CTA: kapı tamamlanınca /sonuc'ta üretim akışı devam diff --git a/src/features/katalog/components/universite-icerik.tsx b/src/features/katalog/components/universite-icerik.tsx index 2e82786..6834636 100644 --- a/src/features/katalog/components/universite-icerik.tsx +++ b/src/features/katalog/components/universite-icerik.tsx @@ -15,6 +15,7 @@ import { SiteFooter } from "@/components/site-footer"; import { Sayfalama, SAYFA_BOYU } from "./sayfalama"; import { PagePixelDivider } from "@/components/pixel-decor"; import { UniversiteKonumHaritasi } from "./universite-konum-haritasi"; +import { uniUlkeKonum } from "@/lib/harita-ulkeler"; import { UniversiteProgramTablosu } from "./universite-program-tablosu"; import { UniLogo } from "@/components/uni-logo"; import { uniLogoYolu } from "@/lib/uni-logolar"; @@ -94,6 +95,7 @@ export function UniversiteIcerik({ const buYol = ilkSayfa ? `/universite/${slug}` : `/universite/${slug}/sayfa/${sayfa}`; + const yurtdisi = uniUlkeKonum(uni.ad, uni.il); return ( <> @@ -116,12 +118,16 @@ export function UniversiteIcerik({ ...(uniLogoYolu(slug) ? { logo: `${SITE_URL}${uniLogoYolu(slug)}` } : {}), - ...(uni.il + ...(uni.il || yurtdisi ? { address: { "@type": "PostalAddress", - addressLocality: trBaslikDuzeni(uni.il), - addressCountry: "TR", + ...(yurtdisi?.sehir + ? { addressLocality: yurtdisi.sehir } + : uni.il + ? { addressLocality: trBaslikDuzeni(uni.il) } + : {}), + addressCountry: yurtdisi ? yurtdisi.iso : "TR", }, } : {}), diff --git a/src/features/katalog/components/universite-konum-haritasi.tsx b/src/features/katalog/components/universite-konum-haritasi.tsx index 97b30b2..8d1eb9f 100644 --- a/src/features/katalog/components/universite-konum-haritasi.tsx +++ b/src/features/katalog/components/universite-konum-haritasi.tsx @@ -5,6 +5,15 @@ import { HARITA_YUKSEKLIK, normalizeIlAdi, } from "@/lib/harita"; +import { + ULKE_HARITA_GENISLIK, + ULKE_HARITA_YUKSEKLIK, + uniUlkeKonum, + type UlkeKonum, +} from "@/lib/harita-ulkeler"; + +const SECILI_DOLGU = "oklch(0.809 0.105 251.8)"; +const ZEMIN_DOLGU = "oklch(0.929 0.013 255.5)"; export function UniversiteKonumHaritasi({ universite, @@ -13,8 +22,55 @@ export function UniversiteKonumHaritasi({ universite: string; il: string | null; }) { + const yurtdisi = uniUlkeKonum(universite, il); + if (yurtdisi) { + return ( + + +

+ {yurtdisi.ulkeAd} + {yurtdisi.sehir ? ` · ${yurtdisi.sehir}` : ""} +

+
+ ); + } + if (!il) return null; + return ( + + + {cities.map((city) => { + const secili = il ? normalizeIlAdi(city.name) === il : false; + return ( + + {city.name} + + ); + })} + + + ); +} + +function KonumBolumu({ + universite, + children, +}: { + universite: string; + children: React.ReactNode; +}) { return (
{universite} kampüs konumu - -
- - {cities.map((city) => { - const secili = il ? normalizeIlAdi(city.name) === il : false; - return ( - - {city.name} - - ); - })} - -
+
{children}
); } + +function UlkeHaritasi({ + universite, + konum, +}: { + universite: string; + konum: UlkeKonum; +}) { + const { harita, ulkeAd, sehir } = konum; + return ( + + {harita.baglam.map((d, i) => ( + + ))} + {harita.ulke.map((d, i) => ( + + {ulkeAd} + + ))} + + ); +} diff --git a/src/features/liste/components/program-tablosu.tsx b/src/features/liste/components/program-tablosu.tsx index 763cdcf..52afdc0 100644 --- a/src/features/liste/components/program-tablosu.tsx +++ b/src/features/liste/components/program-tablosu.tsx @@ -106,8 +106,8 @@ export function ProgramTablosu({ const [aktifDilim, setAktifDilim] = useState(() => varsayilanDilim(sonuclar), ); - // Sihirbaz seçimlerinden URL'e yazılan filtreler (bkz. sonucHref) — - // sayfalama isteklerinde ve veri anahtarında kullanılır. + // Sihirbaz seçimlerinden profil çerezine yazılıp SSR'da prop olarak gelen + // filtreler — sayfalama isteklerinde ve veri anahtarında kullanılır. const iller = useMemo(() => filtreIller ?? [], [filtreIller]); // "Daha fazla göster" ile sayfalanan devam satırları. Sıra/tür/filtre diff --git a/src/features/liste/components/secimlerim-paneli.tsx b/src/features/liste/components/secimlerim-paneli.tsx index 9edc1b7..1cc08c8 100644 --- a/src/features/liste/components/secimlerim-paneli.tsx +++ b/src/features/liste/components/secimlerim-paneli.tsx @@ -81,7 +81,7 @@ export function SecimlerimPaneli() { asChild className="cursor-pointer bg-orange-500 text-white hover:bg-orange-600" > - Sonuçlara git + Sonuçlara git ) : ( + ) : null} + {!ilListesiKirpik && + tumIllerAcik && + !ilAramaNorm && + gorunenTurkiyeIlleri.length > IL_ON_IZLEME ? ( + + ) : null} {ilAramaNorm && diff --git a/src/features/sihirbaz/components/sira-gerekli.tsx b/src/features/sihirbaz/components/sira-gerekli.tsx index b4da9f5..4ad42e9 100644 --- a/src/features/sihirbaz/components/sira-gerekli.tsx +++ b/src/features/sihirbaz/components/sira-gerekli.tsx @@ -1,7 +1,8 @@ "use client"; -// /sonuc?sira= yokken: kayıtlı profil varsa oraya taşı; yoksa kapıyı aç. -// Sıra bilgisi localStorage'daki TercihProfili ile tüm uygulamada ortak. +// Profil çerezi yokken: localStorage'da kayıtlı profil varsa çereze taşıyıp +// sayfayı tazele (URL değişmez); yoksa kapıyı aç. Sıra bilgisi localStorage'daki +// TercihProfili ile tüm uygulamada ortak, sunucu tablosu çerezden okur. import { useEffect } from "react"; import { useRouter } from "next/navigation"; @@ -9,7 +10,7 @@ import Link from "next/link"; import { ArrowLeft, Trophy } from "lucide-react"; import { Button } from "@/components/ui/button"; import { PagePixelDivider } from "@/components/pixel-decor"; -import { sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler"; +import { profilCerezineYaz } from "@/features/sihirbaz/sihirbaz-profil"; import { sonucaGitIste, useProfilKapisi, @@ -20,9 +21,14 @@ export function SiraGerekli() { const { profil, profilYuklendi } = useProfilKapisi(); // "Yönleniyor" durumu ayrı state gerektirmez: profil varken aşağıdaki koşul - // zaten bekleme ekranını gösteriyor; effect yalnızca yönlendirmeyi yapar. + // zaten bekleme ekranını gösteriyor. Çerezi olmayan eski kullanıcı (profil + // yalnızca localStorage'da) burada çereze taşınır; refresh sunucu tablosunu + // aynı URL'de yeni çerezle render eder. useEffect(() => { - if (profilYuklendi && profil) router.replace(sonucHref(profil)); + if (profilYuklendi && profil) { + profilCerezineYaz(profil); + router.refresh(); + } }, [profil, profilYuklendi, router]); if (!profilYuklendi || profil) { diff --git a/src/features/sihirbaz/sihirbaz-profil.ts b/src/features/sihirbaz/sihirbaz-profil.ts index d95052c..c8adc1d 100644 --- a/src/features/sihirbaz/sihirbaz-profil.ts +++ b/src/features/sihirbaz/sihirbaz-profil.ts @@ -2,6 +2,7 @@ // Şema, doğrulama ve sabitler sihirbaz-sabitler.ts'te yaşar. import { + PROFIL_CEREZ_ADI, PROFIL_DEGISTI_EVENT, SIHIRBAZ_STORAGE_KEY, tercihProfiliDogrula, @@ -42,6 +43,24 @@ export function tercihProfiliOku(): TercihProfili | null { return profilCache; } +/** + * Profilin sunucu aynası: /sonuc SSR'ı tabloyu bu çerezden filtreler + * (bkz. PROFIL_CEREZ_ADI). localStorage'ı olup çerezi olmayan eski + * kullanıcıların taşınması için SiraGerekli de bunu çağırır. + */ +export function profilCerezineYaz(profil: TercihProfili): void { + if (typeof document === "undefined") return; + const guvenli = window.location.protocol === "https:" ? "; secure" : ""; + document.cookie = `${PROFIL_CEREZ_ADI}=${encodeURIComponent( + JSON.stringify(profil), + )}; path=/; max-age=31536000; samesite=lax${guvenli}`; +} + +function profilCereziniSil(): void { + if (typeof document === "undefined") return; + document.cookie = `${PROFIL_CEREZ_ADI}=; path=/; max-age=0`; +} + /** Ortak profili yazar; hero ve Yapay Zeka sihirbazıyla aynı anahtarı kullanır. */ export function tercihProfiliYaz(profil: TercihProfili): void { if (typeof window === "undefined") return; @@ -50,6 +69,7 @@ export function tercihProfiliYaz(profil: TercihProfili): void { try { localStorage.setItem(SIHIRBAZ_STORAGE_KEY, JSON.stringify(dogru)); } catch {} + profilCerezineYaz(dogru); profilCache = dogru; profilDegistiginiYayinla(); } @@ -60,6 +80,7 @@ export function tercihProfiliSil(): void { try { localStorage.removeItem(SIHIRBAZ_STORAGE_KEY); } catch {} + profilCereziniSil(); profilCache = null; profilDegistiginiYayinla(); } diff --git a/src/features/sihirbaz/sihirbaz-sabitler.ts b/src/features/sihirbaz/sihirbaz-sabitler.ts index f923335..3dca109 100644 --- a/src/features/sihirbaz/sihirbaz-sabitler.ts +++ b/src/features/sihirbaz/sihirbaz-sabitler.ts @@ -37,6 +37,12 @@ export const PUAN_TURU_ETIKET: Record = { // dönene kadar burada bekler. export const SIHIRBAZ_STORAGE_KEY = "kolaytercih.sihirbaz"; +// Profilin sunucuya giden kopyası: /sonuc tablosu SSR'da bu çerezden +// filtrelenir, URL'de sira/il/tip paramı taşınmaz. localStorage client +// tarafındaki tek doğruluk kaynağı olmayı sürdürür; çerez onun aynasıdır +// (tercihProfiliYaz/Sil ikisini birlikte günceller). +export const PROFIL_CEREZ_ADI = "kolaytercih.profil"; + // storage olayı yalnızca diğer sekmelerde tetiklenir; aynı sekmedeki // aboneler (ör. navbar sıralama rozeti) bu olayla haberdar edilir. export const PROFIL_DEGISTI_EVENT = "kolaytercih:profil-degisti"; @@ -126,30 +132,27 @@ export function tercihProfiliDogrula(girdi: unknown): TercihProfili | null { return { sira, tur: p.tur, secimler }; } -/** - * Profildeki sıra/tur ile sonuç sayfası URL'i — tüm uygulama aynı sorguyu - * kullanır. Profilde sihirbaz seçimleri varsa il + üniversite tipi de URL'e - * yazılır: /sonuc'un ham tablosu SSR'da bu paramlarla filtrelenir (tek - * doğruluk kaynağı URL; localStorage profili yalnızca URL'i üretir). - */ -export function sonucHref( - profil: Pick & { - secimler?: SihirbazSecimleri; - }, - ekstra?: Record, -): string { - const q = new URLSearchParams({ - sira: String(profil.sira), - tur: profil.tur, - }); - if (profil.secimler) { - for (const il of profil.secimler.iller) q.append("il", il); - if (profil.secimler.universiteTipi !== "farketmez") { - q.set("tip", profil.secimler.universiteTipi); - } +/** /sonuc çerezindeki ham değeri güvenle profile çözer (SSR tarafı). */ +export function cerezdenTercihProfili( + ham: string | undefined | null, +): TercihProfili | null { + if (!ham) return null; + try { + return tercihProfiliDogrula(JSON.parse(decodeURIComponent(ham))); + } catch { + return null; } - for (const [k, v] of Object.entries(ekstra ?? {})) q.set(k, v); - return `/sonuc?${q}`; +} + +/** + * Sonuç sayfası URL'i. Profil verisi (sıra/tür/il/tip) URL'de taşınmaz — + * /sonuc'un ham tablosu SSR'da PROFIL_CEREZ_ADI çerezinden filtrelenir. + * `ekstra` yalnızca tek seferlik akış bayrakları içindir (sihirbaz=1, hazir=1). + */ +export function sonucHref(ekstra?: Record): string { + const girdiler = Object.entries(ekstra ?? {}); + if (girdiler.length === 0) return "/sonuc"; + return `/sonuc?${new URLSearchParams(girdiler)}`; } /** Prompt'a enjekte edilecek Türkçe özet. */ diff --git a/src/lib/harita-ulkeler-verisi.ts b/src/lib/harita-ulkeler-verisi.ts new file mode 100644 index 0000000..5e1f7a2 --- /dev/null +++ b/src/lib/harita-ulkeler-verisi.ts @@ -0,0 +1,62 @@ +// Bu dosya scripts/ulke-harita-uret.ts tarafından üretildi — elle düzenleme. +// Kaynak: Natural Earth 10m admin_0_countries (kamu malı). + +export type UlkeKodu = "kktc" | "azerbaycan" | "kirgizistan" | "kazakistan" | "bosna-hersek" | "makedonya" | "arnavutluk"; + +export type UlkeHarita = { + ad: string; + /** lat/lng → viewBox koordinatı: x = ax*lng + bx, y = ay*lat + by */ + proje: { ax: number; bx: number; ay: number; by: number }; + /** Vurgulanan ülke kontürleri */ + ulke: string[]; + /** Soluk çizilen bağlam kontürleri (ör. Kıbrıs adasının güneyi) */ + baglam: string[]; +}; + +export const ULKE_HARITA_GENISLIK = 1050; +export const ULKE_HARITA_YUKSEKLIK = 447; + +export const ULKE_HARITALARI: Record = { + "kktc": { + ad: "KKTC", + proje: { ax: 287.5605, bx: -9088.7614, ay: -351.6071, by: 12575.5477 }, + ulke: ["M691.8 246.9L690.9 248.3L677.6 245.3L671.4 248.3L666.8 247.2L663.2 246.1L661.4 245.0L663.7 243.6L665.7 240.9L663.5 237.3L661.2 237.3L661.2 235.4L660.6 234.3L659.2 231.0L657.2 230.5L656.5 227.5L652.7 227.5L651.4 234.1L651.4 239.3L652.9 242.3L651.4 243.6L650.0 245.8L646.2 248.8L643.1 249.4L640.8 246.9L637.7 245.8L630.3 250.8L629.2 255.2L626.9 255.7L623.7 255.2L621.0 258.2L613.4 252.7L607.3 257.9L604.2 259.0L605.3 254.9L607.6 247.2L606.3 245.8L603.6 245.8L600.4 248.8L595.9 249.7L594.6 253.0L595.0 256.3L596.1 257.4L593.7 258.5L589.4 257.9L588.3 258.5L584.1 258.5L577.3 253.0L573.9 254.6L570.8 257.4L567.2 256.8L563.6 254.1L562.3 248.8L560.5 245.8L558.0 243.6L556.2 243.6L555.1 245.8L554.6 249.4L552.9 249.7L549.2 248.3L546.6 247.8L544.6 247.8L542.7 249.4L540.5 255.7L539.2 258.2L538.3 262.6L537.8 266.1L537.8 268.3L534.9 267.5L534.7 264.2L536.3 255.7L537.8 249.1L537.8 242.3L537.8 236.0L535.8 232.7L530.4 222.8L527.3 217.0L523.7 210.2L522.8 205.2L521.9 201.1L519.7 199.2L515.8 199.8L512.5 203.1L510.2 206.6L508.4 208.0L499.9 210.7L494.5 210.7L491.4 212.4L486.9 212.1L478.6 209.9L469.8 209.1L465.1 206.3L455.4 202.5L446.0 204.1L441.5 205.8L435.3 212.9L432.1 213.5L428.3 209.6L423.4 211.3L416.9 214.6L409.7 216.8L404.8 219.5L397.6 223.1L392.0 229.6L385.5 233.2L381.9 234.1L378.5 234.6L375.4 234.1L368.6 233.2L365.3 234.1L363.5 234.9L360.8 238.4L359.0 241.5L354.5 241.2L351.8 234.1L347.3 228.3L341.7 224.7L331.6 222.3L327.1 220.9L323.5 219.0L320.4 215.4L318.1 211.8L317.5 207.7L317.7 205.4L327.5 206.7L336.4 209.2L343.6 214.1L351.4 217.1L362.0 214.1L369.8 207.8L376.2 198.7L380.4 187.4L382.0 174.2L382.3 150.9L381.2 140.5L377.8 129.4L384.7 130.6L396.5 137.6L402.5 139.3L420.8 143.2L441.0 142.0L476.2 146.5L481.4 148.9L523.7 153.6L590.6 143.0L614.3 129.4L626.0 122.8L640.7 125.1L656.1 120.3L698.5 103.6L710.2 95.5L726.0 89.5L740.5 74.4L748.8 72.7L765.3 68.1L780.2 63.2L792.2 55.4L844.8 30.8L854.6 26.8L858.7 26.0L857.1 27.1L856.1 28.5L855.5 29.8L854.8 30.8L853.8 40.7L853.0 43.0L850.9 43.9L844.2 45.2L842.8 46.4L815.2 64.1L789.6 86.2L727.9 123.3L719.7 130.7L712.9 139.3L707.9 150.6L705.2 155.3L700.9 158.5L694.0 158.8L686.8 157.0L680.1 156.3L674.4 159.8L666.3 171.4L663.0 177.9L661.7 183.9L659.5 211.5L663.5 214.4L675.0 226.2L677.3 229.7L678.7 234.1L682.2 238.5L691.8 246.9Z","M297.4 203.5L297.0 204.7L295.7 208.5L293.2 211.3L290.1 211.8L286.5 208.0L286.3 206.5L291.3 204.3L297.4 203.5Z"], + baglam: ["M625.6 277.7L625.1 276.6L623.7 276.3L622.4 276.3L622.0 274.9L620.8 274.4L619.1 273.3L621.0 272.7L623.3 273.3L624.4 274.7L625.8 274.7L626.9 274.7L628.2 275.5L629.2 277.1L627.3 277.4L625.6 277.7Z","M614.3 268.9L613.2 267.4L613.6 265.7L613.9 264.5L615.3 264.0L617.0 264.2L617.0 267.8L615.5 268.3L614.3 268.9Z","M602.9 273.5L602.5 278.8L596.4 281.1L588.8 288.7L586.7 293.2L584.7 298.9L583.3 305.3L582.8 311.6L583.3 318.3L582.6 321.2L579.9 322.4L578.1 323.7L576.2 330.0L574.9 332.0L570.4 333.3L560.9 333.4L557.2 334.3L554.7 337.0L551.7 341.0L548.3 344.7L544.4 346.4L535.2 348.6L526.9 352.7L520.1 354.2L515.8 349.0L515.5 358.9L507.4 363.9L486.0 368.4L481.7 370.4L479.1 372.2L475.5 374.6L471.4 375.4L450.7 373.0L430.0 375.4L425.6 376.6L421.5 379.4L408.2 391.9L405.2 397.8L398.1 397.8L392.0 398.7L390.0 401.1L388.0 399.8L387.5 394.8L390.8 391.8L392.2 393.7L397.8 393.7L397.1 384.1L387.7 382.8L384.1 386.3L382.3 389.6L380.5 388.0L376.9 386.3L375.9 388.7L367.5 386.5L362.1 382.3L360.6 379.1L360.4 374.6L358.7 375.0L356.4 375.0L355.0 375.0L353.5 374.8L351.1 376.0L349.7 377.8L348.8 379.1L344.9 379.8L342.8 385.0L337.1 384.2L333.7 383.2L331.7 385.6L331.9 391.2L328.6 392.4L316.6 394.0L304.6 391.6L293.3 386.6L278.5 377.3L273.2 375.0L267.3 373.5L255.0 372.2L250.0 370.1L245.2 367.1L233.7 357.9L232.0 356.0L230.2 345.8L229.1 344.2L228.9 340.9L222.2 322.4L219.0 319.6L212.9 315.5L210.3 312.8L207.9 309.2L206.2 305.0L206.0 300.5L208.5 295.9L202.9 286.8L202.4 283.1L202.4 275.4L201.1 268.8L194.9 257.9L192.6 252.5L191.3 243.7L192.3 237.3L195.6 235.1L201.4 239.2L210.0 248.6L214.8 252.5L220.2 254.7L232.2 254.2L242.6 248.6L251.1 240.1L257.5 230.9L261.8 220.0L264.9 214.1L269.5 210.8L270.0 209.1L270.8 207.4L272.5 206.7L273.9 207.1L276.1 208.6L278.4 209.3L281.3 208.6L283.6 212.7L287.9 215.1L292.1 215.9L295.5 215.1L299.1 212.7L301.1 208.0L302.9 203.5L312.0 204.7L313.9 214.0L315.7 218.7L318.1 222.3L322.6 224.7L330.2 227.2L336.1 230.5L342.0 233.2L345.1 236.0L346.2 241.2L346.2 244.4L347.8 247.2L350.7 248.6L353.2 248.6L360.8 246.4L364.4 243.9L365.3 242.3L367.1 238.4L369.3 237.1L372.0 238.4L373.8 240.9L378.3 243.9L382.1 243.9L385.9 241.5L391.3 236.0L396.5 231.0L401.6 228.5L408.3 224.4L411.5 221.4L414.2 220.9L421.3 221.7L429.0 223.4L436.1 223.4L440.2 221.4L442.0 220.0L443.8 217.0L450.7 212.1L455.2 212.1L459.1 213.7L462.9 215.1L466.5 215.4L469.4 216.8L473.2 221.2L476.1 225.0L480.8 227.7L487.3 229.4L489.6 228.5L490.9 226.6L491.4 223.9L495.0 221.2L500.8 214.8L503.3 214.0L508.0 214.6L515.4 213.7L520.3 212.9L521.9 214.0L521.9 218.4L522.8 223.6L525.1 225.8L528.2 229.4L532.2 233.8L532.7 236.0L533.1 242.0L532.7 247.8L532.7 254.6L530.9 262.6L529.1 268.9L530.0 273.5L532.7 277.1L535.8 277.1L540.5 275.8L542.5 270.2L543.7 260.1L545.3 258.4L547.5 256.3L550.1 253.8L552.4 256.3L552.4 264.8L554.2 269.4L557.8 271.1L563.0 268.9L565.2 264.2L567.7 262.3L570.8 262.8L574.1 265.1L576.6 264.5L578.9 263.4L582.0 264.5L584.7 265.9L591.0 269.2L594.6 269.7L597.7 270.2L602.2 273.3Z","M659.0 247.8L662.6 249.1L665.7 250.5L668.4 251.3L672.5 251.3L677.4 249.1L682.6 249.1L685.3 251.1L688.9 252.7L691.7 252.1L693.3 251.1L694.6 249.3L698.6 252.7L703.0 257.7L706.2 267.3L709.4 273.5L713.3 279.2L716.8 281.6L712.8 281.8L705.4 281.0L698.2 279.0L695.0 275.4L691.6 273.7L676.0 275.7L662.5 279.8L659.5 281.6L657.2 284.0L649.3 282.3L644.0 283.5L641.7 282.1L645.3 278.8L647.8 278.2L647.8 272.2L642.4 271.6L639.2 268.9L639.5 261.2L637.2 258.7L630.5 255.7L632.0 251.9L634.7 249.7L638.6 247.8L640.8 249.4L642.6 251.3L646.6 250.5L650.2 248.0L652.2 245.6L653.8 243.6L659.0 247.8Z","M661.4 245.0L663.2 246.1L666.8 247.2L671.4 248.3L677.6 245.3L690.9 248.3L691.8 246.9L694.6 249.3L693.3 251.1L691.7 252.1L688.9 252.7L685.3 251.1L682.6 249.1L677.4 249.1L672.5 251.3L668.4 251.3L665.7 250.5L662.6 249.1L659.0 247.8L661.4 245.0Z","M596.1 257.4L597.7 259.0L602.7 261.5L603.6 263.9L601.1 266.1L601.9 268.3L606.5 270.2L605.3 274.4L602.9 273.5L597.7 270.2L594.6 269.7L591.0 269.2L584.7 265.9L582.0 264.5L578.9 263.4L576.6 264.5L574.1 265.1L570.8 262.8L567.7 262.3L565.2 264.2L563.0 268.9L557.8 271.1L554.2 269.4L552.4 264.8L552.4 256.3L550.1 253.8L547.5 256.3L545.3 258.4L543.7 260.1L542.5 270.2L540.5 275.8L535.8 277.1L532.7 277.1L530.0 273.5L529.1 268.9L530.9 262.6L532.7 254.6L532.7 247.8L533.1 242.0L532.7 236.0L532.2 233.8L528.2 229.4L525.1 225.8L522.8 223.6L521.9 218.4L521.9 214.0L520.3 212.9L515.4 213.7L508.0 214.6L503.3 214.0L500.8 214.8L495.0 221.2L491.4 223.9L490.9 226.6L489.6 228.5L487.3 229.4L480.8 227.7L476.1 225.0L473.2 221.2L469.4 216.8L466.5 215.4L462.9 215.1L459.1 213.7L455.2 212.1L450.7 212.1L443.8 217.0L442.0 220.0L440.2 221.4L436.1 223.4L429.0 223.4L421.3 221.7L414.2 220.9L411.5 221.4L408.3 224.4L401.6 228.5L396.5 231.0L391.3 236.0L385.9 241.5L382.1 243.9L378.3 243.9L373.8 240.9L372.0 238.4L369.3 237.1L367.1 238.4L365.3 242.3L364.4 243.9L360.8 246.4L353.2 248.6L350.7 248.6L347.8 247.2L346.2 244.4L346.2 241.2L345.1 236.0L342.0 233.2L336.1 230.5L330.2 227.2L322.6 224.7L318.1 222.3L315.7 218.7L313.9 214.0L312.0 204.7L317.7 205.4L317.5 207.7L318.1 211.8L320.4 215.4L323.5 219.0L327.1 220.9L331.6 222.3L341.7 224.7L347.3 228.3L351.8 234.1L354.5 241.2L359.0 241.5L360.8 238.4L363.5 234.9L365.3 234.1L368.6 233.2L375.4 234.1L378.5 234.6L381.9 234.1L385.5 233.2L392.0 229.6L397.6 223.1L404.8 219.5L409.7 216.8L416.9 214.6L423.4 211.3L428.3 209.6L432.1 213.5L435.3 212.9L441.5 205.8L446.0 204.1L455.4 202.5L465.1 206.3L469.8 209.1L478.6 209.9L486.9 212.1L491.4 212.4L494.5 210.7L499.9 210.7L508.4 208.0L510.2 206.6L512.5 203.1L515.8 199.8L519.7 199.2L521.9 201.1L522.8 205.2L523.7 210.2L527.3 217.0L530.4 222.8L535.8 232.7L537.8 236.0L537.8 242.3L537.8 249.1L536.3 255.7L534.7 264.2L534.9 267.5L537.8 268.3L537.8 266.1L538.3 262.6L539.2 258.2L540.5 255.7L542.7 249.4L544.6 247.8L546.6 247.8L549.2 248.3L552.9 249.7L554.6 249.4L555.1 245.8L556.2 243.6L558.0 243.6L560.5 245.8L562.3 248.8L563.6 254.1L567.2 256.8L570.8 257.4L573.9 254.6L577.3 253.0L584.1 258.5L588.3 258.5L589.4 257.9L593.7 258.5L596.1 257.4Z","M297.4 203.5L300.2 203.2L302.9 203.5L301.1 208.0L299.1 212.7L295.5 215.1L292.1 215.9L287.9 215.1L283.6 212.7L281.3 208.6L286.3 206.5L286.5 208.0L290.1 211.8L293.2 211.3L295.7 208.5L297.0 204.7L297.4 203.5Z","M625.3 277.6L619.4 276.4L607.0 277.1L602.5 278.8L602.9 273.5L605.3 274.4L606.5 270.2L601.9 268.3L601.1 266.1L603.6 263.9L602.7 261.5L597.7 259.0L596.1 257.4L595.0 256.3L594.6 253.0L595.9 249.7L600.4 248.8L603.6 245.8L606.3 245.8L607.6 247.2L605.3 254.9L604.2 259.0L607.3 257.9L613.4 252.7L621.0 258.2L623.7 255.2L626.9 255.7L629.2 255.2L630.3 250.8L637.7 245.8L640.8 246.9L643.1 249.4L646.2 248.8L650.0 245.8L651.4 243.6L652.9 242.3L651.4 239.3L651.4 234.1L652.7 227.5L656.5 227.5L657.2 230.5L659.2 231.0L660.6 234.3L661.2 235.4L661.2 237.3L663.5 237.3L665.7 240.9L663.7 243.6L661.9 244.4L659.0 247.8L653.8 243.6L652.2 245.6L650.2 248.0L646.6 250.5L642.6 251.3L640.8 249.4L638.6 247.8L634.7 249.7L632.0 251.9L630.5 255.7L637.2 258.7L639.5 261.2L639.2 268.9L642.4 271.6L647.8 272.2L647.8 278.2L645.3 278.8L641.7 282.1L644.0 283.5L649.3 282.3L657.2 284.0L654.9 287.2L652.2 290.0L648.7 291.1L644.4 289.5L636.4 281.7L632.0 278.9L625.6 277.7L627.3 277.4L628.7 277.1L628.2 275.5L626.9 274.7L625.8 274.7L624.4 274.7L623.3 273.3L621.0 272.7L619.7 272.7L620.8 274.4L622.0 274.9L622.4 276.3L623.7 276.3L625.1 276.6Z","M614.3 268.9L615.5 268.3L617.0 267.8L617.0 264.2L615.3 264.0L613.9 264.5L613.6 265.7L613.2 267.4L614.3 268.9Z","M405.2 397.8L403.6 401.2L403.4 410.9L409.4 418.8L409.4 421.0L383.7 421.0L383.7 418.8L384.8 412.2L376.5 396.1L375.9 390.0L359.7 385.7L353.1 385.0L346.9 385.8L331.9 391.2L331.7 385.6L333.7 383.2L337.1 384.2L342.8 385.0L344.9 379.8L348.8 379.1L349.7 377.8L351.1 376.0L352.5 374.4L355.0 375.0L356.4 375.0L358.7 375.0L360.4 374.6L360.6 379.1L362.1 382.3L367.5 386.5L375.9 388.7L376.9 386.3L380.5 388.0L382.3 389.6L384.1 386.3L387.7 382.8L397.1 384.1L397.8 393.7L392.2 393.7L390.8 391.8L387.5 394.8L388.0 399.8L390.0 401.1L392.0 398.7L398.1 397.8L405.2 397.8Z"], + }, + "azerbaycan": { + ad: "Azerbaycan", + proje: { ax: 86.3285, bx: -3592.8801, ay: -112.9282, by: 4756.6132 }, + ulke: ["M290.1 117.3L293.5 118.1L294.5 121.3L293.3 123.9L290.1 122.9L289.0 121.5L288.5 119.8L288.8 118.2L290.1 117.3Z","M292.1 93.8L300.3 87.0L313.4 76.4L316.2 75.4L319.0 75.6L320.7 76.4L324.8 78.5L326.2 78.8L327.9 78.6L330.7 77.7L332.0 78.0L333.3 79.4L336.1 82.0L348.5 86.8L354.1 87.9L356.1 88.7L355.0 90.1L353.0 90.7L351.1 93.1L353.2 96.3L356.7 99.3L358.4 100.3L362.8 103.0L375.6 107.6L379.7 108.1L381.8 107.9L383.5 107.3L385.8 105.8L388.0 104.4L389.9 104.0L396.4 104.0L398.0 104.5L399.3 105.8L401.8 108.9L406.9 113.5L408.7 114.5L413.9 116.2L415.3 117.4L417.7 120.6L419.2 121.6L421.1 121.5L421.9 120.3L422.4 118.5L423.3 116.7L425.2 115.6L426.8 115.8L428.5 116.2L430.2 115.9L431.4 114.3L432.6 110.0L433.0 106.1L433.9 103.1L435.5 101.3L436.2 99.9L436.3 97.9L437.2 96.1L437.7 94.4L435.0 90.3L433.3 88.5L432.7 87.5L430.7 87.6L429.3 84.4L425.1 82.0L416.7 78.5L412.6 74.8L410.9 74.3L409.8 73.9L405.3 70.8L403.8 68.9L403.1 66.5L402.4 62.1L400.3 57.6L399.0 57.0L398.0 58.9L394.9 57.7L393.8 52.6L393.7 46.8L394.5 43.0L396.2 41.2L398.1 41.0L402.1 41.9L403.9 41.8L405.3 41.1L406.6 40.0L410.3 35.6L412.1 32.6L415.4 26.0L417.3 26.5L419.6 26.4L423.6 26.9L425.2 27.8L425.6 30.0L425.2 34.5L425.7 36.5L427.2 37.7L428.9 37.7L430.4 36.8L433.2 34.3L435.0 33.7L438.4 33.0L439.5 32.3L441.5 30.4L442.5 31.7L443.3 36.1L443.8 37.6L444.6 39.0L450.3 44.1L451.8 45.0L452.9 45.3L455.1 45.6L456.1 46.1L457.0 48.8L458.5 51.2L462.8 54.8L464.9 58.2L465.6 61.6L466.9 63.7L470.5 63.2L472.2 62.5L473.8 62.2L475.4 62.6L476.8 64.2L477.4 66.1L477.7 68.0L478.3 69.7L479.8 70.8L480.7 71.7L481.4 73.8L481.9 75.0L484.5 78.3L485.2 79.6L485.5 82.4L485.4 88.3L486.2 90.9L487.7 92.4L494.3 96.3L496.3 97.0L505.9 98.1L507.8 98.7L510.2 102.1L511.8 103.3L513.6 103.3L516.6 101.3L518.3 100.7L520.0 100.9L524.5 103.2L527.1 104.5L528.8 104.8L534.8 104.3L536.1 104.1L539.8 103.0L541.8 101.8L542.2 100.7L541.7 99.2L541.3 96.9L541.6 94.6L542.4 93.5L543.5 92.7L544.8 91.1L545.5 89.1L545.9 87.3L546.8 86.4L549.1 86.8L551.0 85.7L553.9 77.6L555.5 74.5L558.4 72.7L568.3 70.8L570.9 69.5L575.4 65.6L582.8 61.0L584.8 58.9L586.6 55.7L590.2 45.9L596.7 37.6L600.9 31.1L601.8 31.9L604.4 33.5L607.5 36.1L615.1 46.5L618.0 49.4L619.2 51.2L619.7 53.9L625.6 60.4L628.9 67.5L630.7 68.1L632.1 69.6L633.2 71.3L633.9 72.8L636.0 75.7L636.7 76.8L638.9 77.5L640.9 79.8L644.0 86.2L646.6 91.6L647.9 93.4L648.9 95.5L649.5 98.0L650.5 107.8L651.1 109.8L652.0 110.7L652.6 112.0L654.1 120.1L658.2 126.9L668.6 138.5L669.4 139.8L670.2 141.6L672.0 143.2L676.0 145.6L677.9 145.1L679.5 146.5L681.1 148.4L682.8 149.4L683.7 150.5L683.3 153.0L681.8 157.2L681.3 159.4L681.2 160.5L681.3 161.8L682.8 164.0L683.7 165.6L685.3 167.1L687.0 168.3L688.1 168.9L691.9 169.1L693.6 169.6L694.9 170.3L698.0 173.1L699.7 173.9L704.0 174.5L707.7 175.6L709.8 175.8L711.3 175.5L716.1 173.5L718.2 173.1L728.0 173.5L729.1 175.0L729.8 176.6L731.3 178.5L733.0 180.0L734.7 180.9L742.5 182.6L744.1 183.5L745.0 185.1L746.1 187.8L747.4 190.2L749.1 191.2L750.9 191.9L752.5 193.6L753.8 195.9L754.7 198.2L755.6 207.6L756.1 208.5L756.9 210.6L757.3 212.9L757.0 214.5L755.4 211.3L753.6 208.5L751.4 206.0L747.2 202.5L745.4 201.5L743.4 200.8L739.5 200.2L736.3 199.2L734.6 198.9L732.4 199.6L728.3 199.8L726.8 200.4L723.9 202.9L722.1 202.9L720.4 200.5L718.8 199.4L716.6 199.0L714.3 197.8L712.6 198.8L709.8 201.3L710.3 204.0L707.9 206.5L704.4 208.3L698.7 209.6L693.6 212.6L687.0 215.0L685.5 216.1L682.2 219.8L680.7 220.9L679.7 222.1L679.6 224.5L680.0 227.6L680.1 228.8L675.4 230.6L674.6 232.4L674.8 234.7L676.0 236.9L676.7 237.8L678.0 238.8L679.0 240.8L677.6 242.0L676.1 243.5L674.8 244.3L674.2 245.4L673.8 246.8L674.2 250.0L675.2 252.5L675.5 253.8L675.1 255.1L674.3 255.9L673.2 257.1L673.2 258.8L673.7 260.1L673.2 261.4L671.8 262.5L671.3 264.1L671.8 265.5L671.4 267.0L671.9 268.6L673.9 271.3L672.6 273.2L670.4 274.5L668.2 277.1L666.3 279.4L664.7 282.2L664.8 284.2L663.7 286.1L662.9 288.5L662.2 291.2L661.8 293.4L661.9 296.5L662.7 298.6L670.8 306.0L671.8 307.3L672.5 308.8L671.5 313.4L671.6 314.6L672.4 315.9L671.3 315.3L669.9 313.7L668.9 312.8L669.2 314.4L669.9 316.3L671.0 317.9L672.4 318.9L670.4 319.2L669.2 317.9L668.1 316.3L663.7 313.3L660.8 314.4L658.6 317.3L657.7 320.9L657.7 333.3L657.4 334.8L657.0 336.8L655.8 340.4L655.4 342.2L655.2 346.2L654.8 348.6L653.9 350.6L647.5 355.2L644.1 356.6L641.7 354.6L641.9 353.2L642.0 351.6L642.8 350.7L646.7 349.9L648.0 349.2L649.2 347.5L649.9 345.3L650.0 343.0L649.0 340.9L647.3 340.0L643.1 339.8L642.6 334.2L642.3 332.9L640.8 331.6L639.1 331.2L635.4 331.3L633.9 332.6L633.6 333.7L632.9 335.3L632.8 337.1L632.2 338.3L631.4 343.6L631.7 346.4L633.1 348.8L632.8 351.6L630.5 359.7L628.5 364.5L625.8 367.8L622.7 367.0L622.8 371.0L622.9 372.8L623.3 374.6L625.4 379.9L625.9 397.3L626.4 416.3L620.8 415.1L618.0 415.1L616.1 416.2L614.4 418.0L612.2 419.4L609.9 420.4L607.8 421.0L603.8 420.7L600.6 417.9L598.2 413.8L597.1 412.4L595.0 409.6L593.7 407.7L592.2 406.1L590.8 403.8L589.4 402.5L588.3 401.0L587.7 398.0L586.7 395.5L584.7 395.5L580.3 397.6L577.7 397.6L576.1 396.1L574.8 394.0L570.6 390.6L570.4 388.7L570.8 386.4L570.4 384.8L569.0 382.9L557.6 377.2L552.0 372.6L550.3 369.3L550.1 364.7L550.9 363.4L555.4 360.6L555.6 359.0L571.9 355.4L575.4 353.1L576.2 351.9L576.9 350.4L577.3 348.9L577.4 347.3L576.9 345.9L574.3 340.2L573.0 338.9L568.1 336.8L563.2 331.9L561.1 328.9L559.9 325.9L560.1 322.0L561.6 318.8L564.1 316.4L567.0 314.9L572.5 313.8L577.0 310.6L579.2 309.9L578.2 305.5L575.8 302.2L569.9 296.6L555.4 279.0L550.1 274.0L548.4 272.8L547.2 272.5L546.2 274.0L545.3 274.9L537.7 275.0L535.6 275.6L533.9 276.8L532.6 278.1L528.9 282.0L518.5 287.9L517.0 288.8L512.4 293.5L511.3 294.2L509.3 294.5L503.3 296.5L499.7 298.6L496.9 301.0L492.6 306.6L489.7 309.5L487.1 311.0L486.1 311.6L477.5 315.0L473.4 317.6L472.5 318.6L472.2 319.7L469.1 324.8L467.7 329.0L466.3 331.0L460.6 334.3L458.2 334.1L455.8 333.0L454.5 333.1L453.0 333.7L451.7 334.9L450.5 336.2L448.3 340.2L447.1 341.4L445.7 342.2L444.0 344.4L442.5 347.9L441.1 349.3L436.1 351.9L434.5 353.2L433.4 354.7L430.9 359.9L430.0 361.5L428.8 362.8L427.4 364.0L426.0 364.9L424.2 365.6L422.6 365.7L419.6 359.3L419.2 357.9L419.2 356.6L419.3 355.2L419.6 353.8L420.9 349.5L421.2 346.4L420.7 343.2L419.6 339.5L417.5 337.7L414.6 336.1L412.4 333.8L412.4 330.4L414.3 328.5L417.4 328.9L422.6 331.6L427.7 328.5L429.5 328.5L430.0 327.3L429.3 326.3L425.0 323.2L422.9 320.9L422.1 319.3L421.6 317.5L421.0 315.8L419.6 314.7L413.4 311.9L410.6 309.6L409.4 306.1L410.5 303.2L413.3 301.5L419.6 300.3L420.7 299.7L421.3 297.9L420.7 296.7L420.7 294.8L421.7 293.9L423.0 293.1L423.7 291.6L423.5 289.8L422.4 288.3L421.0 287.4L419.6 287.1L414.2 287.6L412.5 287.3L411.2 286.3L409.1 283.6L407.9 282.6L404.9 282.3L399.0 285.4L396.1 286.0L394.1 285.4L392.9 284.2L390.8 280.3L389.6 278.8L388.1 277.9L384.8 277.0L382.1 274.8L378.8 268.0L376.4 265.6L371.0 264.0L368.1 262.5L366.3 261.6L362.4 257.6L361.8 256.3L357.9 248.3L356.0 246.2L353.7 245.0L344.7 244.1L341.9 242.9L341.8 241.3L341.6 240.2L347.1 236.6L361.3 239.0L367.3 238.4L368.5 237.4L369.1 236.2L370.1 231.0L372.3 228.5L374.0 226.3L375.0 223.5L376.6 216.2L376.6 214.9L374.2 211.3L373.0 210.1L371.7 209.4L369.8 209.5L368.6 209.9L366.3 210.0L362.6 205.9L342.4 194.5L337.3 189.7L334.5 183.7L333.8 182.4L332.0 181.2L331.2 180.4L330.8 179.1L330.6 176.6L330.3 175.5L328.8 173.7L327.0 172.3L325.4 170.7L324.1 168.0L324.2 165.9L324.2 163.2L326.3 159.4L329.7 156.7L333.2 155.0L339.9 151.8L342.2 149.2L343.8 144.6L343.6 142.1L342.1 141.3L340.1 141.1L338.3 140.6L337.0 139.2L333.3 134.5L331.0 132.6L328.9 132.1L327.9 130.9L328.6 127.3L328.1 124.6L325.7 124.9L320.9 127.3L318.9 126.9L315.1 125.4L311.0 124.9L309.6 123.7L308.3 122.3L306.5 121.2L303.7 118.3L302.3 117.6L302.0 119.6L301.5 121.0L299.8 120.8L297.9 119.5L296.8 117.7L297.8 114.0L306.3 114.4L309.3 112.2L309.1 110.4L308.0 108.8L303.5 105.3L302.0 104.9L296.4 104.9L294.9 104.2L294.4 102.8L295.3 100.4L292.1 93.8Z","M336.2 171.5L339.1 169.3L340.3 166.3L338.1 165.1L336.8 164.9L335.5 164.9L334.4 165.3L333.3 166.1L332.8 167.2L332.6 168.4L332.8 169.5L333.3 170.6L336.2 171.5Z","M390.0 367.8L384.1 366.6L378.4 364.0L360.2 360.1L358.2 359.3L353.8 357.5L346.1 357.4L341.2 356.2L338.8 356.1L336.0 354.8L334.6 354.5L331.6 353.2L329.8 351.9L328.8 350.7L328.6 349.5L329.2 347.6L329.4 346.5L326.9 344.7L325.7 343.2L325.0 340.8L323.8 339.0L322.3 337.9L321.7 336.8L322.5 335.1L322.0 333.9L320.8 333.2L319.6 332.9L318.8 331.5L318.8 329.8L317.2 330.0L307.3 327.6L305.1 328.3L304.5 326.6L303.6 321.0L303.0 319.7L302.3 318.7L301.8 317.5L300.2 313.9L299.5 312.8L297.8 311.3L297.1 310.1L296.4 308.7L293.2 306.6L292.5 305.2L290.8 305.1L288.2 303.3L288.6 301.2L286.8 299.6L285.7 297.3L283.1 286.4L282.1 284.0L280.3 282.7L278.9 281.8L277.0 281.4L275.5 280.5L274.3 278.7L273.3 274.5L272.4 273.0L274.9 272.0L278.9 271.2L282.7 271.3L285.6 270.6L287.9 269.3L291.6 266.5L294.8 265.4L297.7 266.9L304.1 275.1L305.0 277.0L305.4 279.1L305.2 281.7L304.4 285.8L304.7 287.4L306.4 288.5L309.6 287.8L312.0 285.5L314.3 284.7L317.0 288.5L318.0 290.9L318.9 292.1L320.2 292.6L324.3 293.0L325.8 293.8L328.5 296.6L330.4 297.4L332.4 296.7L340.2 291.8L342.5 290.8L353.1 288.2L355.6 288.1L358.0 289.0L359.9 290.4L360.7 291.8L360.7 293.8L360.4 296.6L361.2 301.8L360.8 303.6L357.9 308.4L357.4 310.7L357.9 311.9L363.0 313.7L364.8 315.1L366.4 316.9L368.5 318.6L369.8 319.2L374.7 321.6L376.4 323.4L377.2 325.1L376.4 326.7L374.4 329.5L373.8 332.3L374.6 335.3L376.4 338.4L378.7 341.6L380.4 345.2L384.9 358.0L390.0 367.8Z","M310.0 130.2L308.0 129.8L307.2 127.3L308.5 126.8L310.9 128.9L310.0 130.2Z","M777.0 205.6L775.3 205.2L774.3 205.5L773.0 204.5L772.1 202.8L772.3 201.3L773.5 202.2L775.1 201.4L777.2 202.7L777.6 204.4L777.0 205.6Z","M757.1 194.1L755.8 194.4L754.1 194.3L754.5 191.6L751.7 187.8L751.7 185.1L752.8 185.6L754.1 185.2L754.9 188.3L755.7 189.5L756.8 190.5L757.7 192.0L757.8 193.4Z"], + baglam: [], + }, + "kirgizistan": { + ad: "Kırgızistan", + proje: { ax: 72.9505, bx: -4927.4582, ay: -96.9929, by: 4222.0759 }, + ulke: ["M923.9 130.0L924.4 131.5L924.6 134.6L925.0 136.2L925.7 137.6L926.6 138.8L927.3 140.2L927.4 142.0L925.4 145.1L921.8 146.3L903.5 146.1L899.8 147.1L897.1 148.2L895.9 149.1L894.9 150.5L894.3 152.3L893.4 155.9L892.8 157.6L890.2 160.0L886.9 160.5L883.5 160.4L880.2 161.2L876.1 164.1L871.4 165.9L865.6 169.9L864.1 170.4L862.4 170.5L857.8 169.0L856.2 169.4L854.9 170.2L851.5 173.5L849.9 174.6L848.4 175.3L845.0 176.1L842.1 177.2L833.9 183.1L829.5 184.0L828.1 184.6L821.6 189.3L811.7 193.1L810.7 193.7L809.7 194.6L809.2 195.6L808.6 198.0L807.8 199.0L805.3 200.2L799.9 201.3L793.1 206.5L790.2 207.9L788.9 208.8L787.7 210.3L787.4 212.0L788.7 215.7L788.9 217.5L788.2 219.1L786.9 220.3L783.9 222.0L782.8 223.2L780.9 225.9L779.6 228.6L777.6 232.4L776.6 233.9L775.5 235.1L768.1 241.5L766.8 242.0L765.3 241.9L762.5 240.5L753.0 239.2L750.4 239.3L747.9 240.1L738.3 245.2L737.2 245.6L735.8 245.8L732.1 245.6L726.5 247.2L724.4 247.1L722.2 246.0L718.1 244.2L714.0 243.4L711.7 243.5L707.5 244.8L698.4 244.2L696.2 243.5L692.3 241.5L690.3 241.1L682.4 242.9L679.6 244.1L677.7 246.0L676.7 247.5L674.0 249.5L672.7 250.7L672.0 252.6L672.3 254.4L672.8 256.3L673.0 258.3L672.4 260.2L671.3 261.4L668.4 263.1L666.0 265.2L664.0 268.2L662.8 271.7L662.3 281.5L662.1 283.1L661.2 284.4L657.4 287.5L655.5 290.5L653.2 297.3L651.5 300.1L649.5 302.1L643.2 306.3L640.9 308.6L639.6 309.1L638.6 307.9L637.4 301.9L636.7 300.3L634.6 299.6L632.5 302.0L630.3 305.1L627.8 306.7L626.4 306.3L623.7 304.8L622.3 304.3L620.5 304.5L614.0 307.7L613.1 309.1L612.3 310.7L611.0 312.4L609.6 313.4L608.1 313.7L606.5 313.6L601.7 312.4L600.1 312.3L598.6 312.5L595.2 313.9L593.6 314.1L592.3 312.7L591.7 311.0L590.5 306.7L590.4 304.9L591.0 303.0L591.9 301.7L592.7 300.4L592.5 298.7L591.8 297.6L589.7 295.7L588.9 294.5L588.4 292.6L588.0 287.1L586.7 283.0L584.7 281.0L582.0 280.9L579.0 282.8L563.0 295.8L561.4 296.4L560.2 297.5L559.3 299.2L558.0 299.6L556.6 298.9L555.2 297.9L553.9 297.4L552.1 297.7L548.5 299.3L546.7 299.6L544.0 299.0L541.4 297.8L535.0 293.4L533.4 292.6L531.8 292.7L530.7 294.5L530.3 295.8L529.7 297.6L528.8 299.6L528.3 301.6L528.8 303.0L532.3 306.3L533.2 307.6L533.8 310.7L531.5 311.3L525.3 309.7L523.7 309.6L522.4 310.2L518.6 314.1L517.4 315.0L514.6 316.5L512.1 318.4L505.6 325.6L497.9 332.1L495.2 333.3L493.0 333.6L490.7 333.3L488.2 332.3L485.7 331.7L483.1 332.0L480.6 333.1L478.3 334.7L475.9 335.8L471.2 336.5L469.2 338.1L468.4 339.1L467.8 340.3L467.4 341.6L467.2 343.0L466.8 345.3L465.6 346.9L464.1 348.4L463.1 350.3L462.5 354.3L462.2 355.5L459.5 358.1L458.6 359.5L458.0 361.2L457.6 363.1L457.7 365.0L458.4 366.9L459.4 367.5L460.7 367.9L462.1 368.8L463.1 370.5L463.6 372.5L463.9 376.7L465.5 381.8L465.2 382.9L463.5 383.9L462.3 384.9L461.4 386.3L460.6 388.5L459.8 391.9L459.1 393.2L457.8 393.9L444.1 395.9L442.0 394.8L435.3 394.0L432.7 394.3L424.7 396.3L423.0 397.6L422.4 399.1L422.2 400.4L421.7 401.4L417.6 402.2L410.2 404.9L407.8 405.1L405.3 404.3L404.0 403.7L402.2 403.6L398.6 405.5L396.2 405.2L391.7 404.2L390.2 404.1L387.0 404.8L385.9 404.8L372.4 401.2L371.2 401.1L369.9 401.5L367.8 404.0L365.8 404.5L363.9 403.2L362.8 402.9L359.8 405.8L358.6 406.0L357.3 405.9L354.9 405.3L353.7 405.3L350.9 406.8L349.3 407.0L348.1 407.5L347.2 408.9L345.5 414.2L342.5 420.9L340.9 419.9L340.2 418.3L340.0 416.6L338.3 415.2L337.2 414.3L333.4 413.3L331.9 412.7L331.2 411.2L331.1 409.2L330.7 406.7L329.9 404.6L328.6 403.6L327.3 403.8L324.7 405.2L322.0 405.8L320.8 406.5L313.6 411.7L310.9 412.9L308.2 413.2L306.8 412.8L305.5 411.7L304.4 410.2L303.9 408.2L304.0 406.2L304.8 405.0L305.8 404.0L306.6 402.5L306.9 400.6L306.7 398.1L306.0 395.9L304.9 394.8L303.4 394.8L296.0 396.5L292.5 396.3L289.4 394.9L287.9 391.5L288.5 390.0L290.4 387.2L290.8 385.7L290.4 384.1L289.3 382.7L288.0 381.5L285.5 380.0L284.2 380.1L281.7 381.3L279.6 381.7L278.4 382.4L277.4 383.5L274.3 385.3L273.3 386.1L271.0 388.9L269.3 389.5L265.2 388.6L262.1 388.8L259.0 389.7L256.6 391.3L255.1 394.0L254.0 397.1L252.7 399.8L250.4 401.1L248.4 400.5L246.6 399.3L245.0 398.5L243.6 399.2L242.7 400.3L241.5 400.4L240.4 400.4L237.3 402.0L235.3 402.3L233.0 401.9L231.1 400.7L230.0 398.7L230.0 397.5L230.4 396.2L230.5 394.9L230.1 393.6L227.7 392.1L226.9 391.4L225.5 386.7L224.5 384.7L222.7 383.3L221.4 383.1L218.7 383.7L217.5 383.5L214.9 381.5L212.6 381.2L210.3 382.1L209.1 382.4L207.9 383.1L207.1 384.0L204.9 383.5L203.2 383.8L196.7 388.7L195.4 389.0L194.1 388.5L194.0 387.2L194.8 383.7L194.7 382.0L194.4 380.2L193.7 379.3L192.6 380.2L190.6 384.7L189.9 385.6L188.7 386.0L187.6 385.6L185.1 384.1L183.6 383.7L182.0 383.7L180.5 384.2L179.3 385.3L178.1 387.0L175.3 386.5L172.3 386.2L166.7 387.3L163.9 386.5L160.8 384.7L157.9 383.7L155.0 383.3L148.6 383.7L147.3 384.3L144.9 386.4L143.6 387.2L142.3 387.7L140.9 387.9L139.3 387.9L136.2 388.4L134.7 387.9L132.9 386.0L131.8 386.0L131.4 387.4L128.0 389.3L127.0 387.0L127.4 375.4L127.1 373.6L126.6 372.0L125.5 370.7L124.2 369.6L123.1 368.3L122.6 366.5L122.9 362.7L123.7 359.0L127.0 348.6L128.4 345.4L128.8 343.8L130.0 343.8L132.2 346.3L135.7 352.4L142.7 349.9L142.6 348.6L140.9 345.5L140.9 344.1L140.5 343.0L139.9 339.9L140.4 337.4L141.6 335.2L143.1 333.0L143.6 330.7L145.3 331.9L146.9 332.5L148.1 332.3L176.9 321.8L179.4 322.1L189.8 329.1L191.4 329.6L195.0 329.4L196.7 329.5L198.3 330.3L199.3 331.5L200.2 332.8L201.4 334.1L202.7 334.8L205.3 335.2L208.1 336.4L213.9 337.3L215.7 337.9L217.4 339.1L218.1 340.8L217.1 343.0L215.9 343.8L214.7 344.4L213.6 345.3L212.6 346.6L212.0 348.4L211.8 350.1L212.3 351.4L213.9 352.0L215.1 349.0L216.5 347.7L219.6 347.6L221.1 347.0L222.6 346.1L223.9 344.7L224.8 343.0L225.5 339.6L225.4 336.6L225.7 334.1L227.7 332.3L232.3 330.7L233.3 330.0L236.2 327.6L236.9 326.7L237.9 327.2L239.3 326.5L240.7 325.7L244.6 326.6L246.9 325.8L249.3 324.0L250.5 321.6L249.0 319.2L251.7 316.5L255.9 315.8L264.4 317.0L266.7 316.8L267.7 315.1L268.4 313.0L269.5 311.2L271.3 311.5L271.9 312.5L272.7 313.4L273.7 313.9L274.9 314.0L277.2 313.7L278.7 313.8L281.0 316.0L284.2 317.1L284.9 318.2L285.5 319.7L286.8 320.9L288.4 321.9L290.0 322.6L293.5 323.3L295.3 323.1L295.9 322.0L296.1 320.3L296.5 318.5L297.9 317.3L299.2 318.4L300.2 320.6L300.7 322.6L300.7 326.5L301.1 328.0L302.6 328.7L307.5 326.1L308.6 324.9L309.4 323.6L310.8 320.5L313.0 318.2L315.7 318.0L318.6 318.8L321.5 319.0L322.7 318.7L324.2 319.2L325.3 319.3L326.8 318.0L325.9 316.9L323.3 315.6L321.9 314.6L321.4 313.1L321.8 311.7L328.1 308.5L330.1 306.5L331.1 303.8L331.5 302.0L332.2 301.0L337.1 298.3L338.3 298.0L341.6 297.8L343.5 297.9L343.9 299.5L342.9 299.8L341.6 299.9L340.4 301.1L344.6 301.2L345.7 301.6L350.0 304.2L352.0 305.0L353.7 304.6L355.2 302.5L356.0 300.1L356.1 297.8L355.6 296.7L352.1 293.5L351.5 291.6L352.0 290.0L352.0 288.3L350.4 285.6L350.6 284.0L352.8 283.0L355.2 285.1L357.7 288.0L359.8 289.1L362.6 289.4L367.7 293.0L370.6 292.8L371.7 291.9L372.4 290.7L372.8 289.4L372.9 287.9L373.4 286.3L374.8 286.3L377.4 287.6L379.6 286.6L380.4 280.1L382.2 277.4L384.7 276.3L390.0 274.9L396.2 271.0L403.1 268.4L406.5 266.4L408.8 263.4L408.4 261.5L406.1 261.0L401.8 261.2L400.4 260.2L399.3 258.8L398.2 258.0L392.8 260.5L389.4 262.9L388.7 261.4L388.3 258.5L385.5 257.8L376.1 258.6L373.0 258.3L370.2 257.0L367.9 254.5L364.8 249.6L363.4 249.0L361.6 248.9L360.2 248.2L360.3 246.0L360.1 244.5L355.9 243.8L353.8 243.2L352.3 242.3L350.2 239.0L349.2 238.3L347.9 239.4L346.7 242.6L343.4 243.5L339.2 244.8L337.0 245.4L338.0 243.1L338.5 241.4L338.5 239.5L337.8 234.4L337.7 231.7L337.4 229.0L336.5 227.1L334.7 226.0L332.9 226.3L331.2 227.4L329.6 228.9L327.4 230.2L326.2 229.5L325.1 227.9L323.3 226.4L317.5 227.4L315.6 226.5L315.2 222.4L315.4 218.3L315.0 215.1L313.8 212.2L307.0 202.0L305.8 201.2L305.3 203.7L304.0 203.9L303.6 202.3L302.5 202.5L301.7 204.4L301.0 202.9L302.3 197.5L302.3 195.5L301.9 193.6L301.0 192.3L299.4 192.0L297.8 192.7L296.9 193.8L295.5 197.5L296.2 199.1L298.3 201.8L298.5 203.5L298.2 205.5L297.2 208.7L294.7 214.0L292.7 216.1L290.2 216.6L287.1 215.2L283.6 211.9L282.1 212.9L282.8 229.6L282.4 233.0L280.7 234.4L275.8 230.1L273.9 232.5L273.1 234.3L271.2 233.4L270.5 232.0L269.6 228.4L268.8 227.2L267.1 227.1L265.6 227.9L265.4 229.2L265.7 231.0L265.9 233.0L265.2 234.9L264.0 234.1L262.2 231.0L261.0 230.0L258.3 229.7L257.0 228.9L255.5 227.7L253.8 227.0L250.4 226.3L247.2 226.8L245.8 226.6L244.4 225.4L243.4 224.0L242.2 222.8L240.9 221.8L239.5 221.2L237.9 221.4L236.5 222.0L235.3 222.2L234.4 220.9L234.2 219.2L235.3 213.3L235.2 211.2L234.5 209.2L230.4 202.2L229.2 200.5L227.8 199.6L225.3 200.0L216.4 205.2L213.9 206.1L212.1 206.0L211.0 205.0L209.2 201.7L208.2 200.3L207.0 199.2L204.2 197.5L193.9 196.3L191.2 194.9L189.9 191.8L191.4 189.3L203.2 182.4L207.6 178.9L210.0 177.8L212.2 176.3L213.9 173.7L216.0 169.2L219.2 165.4L226.4 159.3L228.7 158.0L235.9 157.1L238.5 156.2L239.3 154.6L239.5 149.0L240.8 145.4L243.8 144.6L247.3 144.8L250.4 144.1L260.7 136.5L266.7 134.7L269.4 132.8L270.5 129.2L267.9 128.4L257.7 121.1L255.4 120.2L253.0 120.5L249.8 122.8L248.2 124.3L246.1 123.8L244.6 123.0L241.7 120.1L241.3 118.7L242.2 117.2L243.9 115.5L244.8 114.7L247.1 111.9L247.6 110.8L247.0 109.4L247.4 106.5L248.2 104.6L249.2 103.0L250.4 101.9L253.8 104.2L255.0 104.3L256.0 103.7L256.7 102.8L256.9 101.6L256.2 100.5L253.7 98.3L253.0 97.4L252.3 93.7L255.0 92.1L261.3 91.1L262.4 89.9L262.8 88.5L262.7 84.7L262.9 82.6L263.5 81.7L266.3 80.7L267.4 80.0L268.4 78.7L269.9 75.9L271.2 75.3L272.8 75.8L274.5 76.6L276.1 76.9L277.4 76.3L278.5 75.2L279.5 73.9L280.3 72.4L281.5 71.3L283.3 71.2L286.8 72.4L288.0 71.9L289.5 72.2L292.4 74.6L294.6 74.7L302.6 69.6L305.0 68.9L310.1 68.6L312.7 67.7L313.9 67.5L315.0 68.0L316.1 68.7L317.3 69.2L321.8 70.3L330.3 74.9L332.6 75.6L333.7 75.5L335.8 74.5L336.9 74.2L346.3 74.6L351.1 76.5L359.8 82.2L362.3 82.7L367.6 82.6L377.9 85.1L380.2 86.3L381.9 88.2L384.4 92.8L386.3 94.5L388.8 95.6L391.2 96.3L393.7 96.4L403.1 94.8L406.3 94.9L409.1 96.1L410.5 97.2L411.7 97.9L413.0 98.2L418.2 98.6L419.9 99.2L421.0 100.5L420.8 103.5L420.9 105.5L421.7 106.8L428.4 107.9L432.7 109.7L434.8 109.3L434.8 107.5L429.5 97.5L428.4 94.4L427.8 91.2L428.0 87.5L428.8 84.1L432.7 75.5L434.7 71.4L434.9 69.9L434.7 68.1L433.8 64.9L433.6 63.2L433.9 61.6L434.5 60.2L436.0 57.6L438.8 49.7L439.6 48.3L440.7 47.3L444.2 45.3L456.7 40.3L457.9 40.0L461.0 40.1L463.7 38.7L466.1 32.0L468.3 30.3L469.8 30.9L472.4 33.3L473.8 33.7L485.3 32.4L486.5 31.7L486.7 30.3L485.9 28.7L483.9 26.0L486.0 27.2L489.7 30.5L491.8 31.3L494.2 31.8L496.3 32.9L500.1 35.9L501.6 36.7L504.6 37.0L507.2 38.7L510.2 39.5L511.6 40.2L512.6 41.5L514.4 44.6L515.5 45.7L523.0 51.4L525.5 52.4L533.8 53.7L540.1 56.7L542.1 58.5L544.2 59.5L548.7 60.8L550.7 62.0L552.4 63.4L556.9 66.0L558.8 66.4L563.6 66.3L580.1 68.5L582.9 68.2L584.4 68.3L589.1 70.3L591.0 70.2L593.1 69.3L595.2 67.8L596.9 66.1L597.7 64.8L600.0 58.6L600.9 57.9L602.0 57.6L606.5 57.2L609.3 57.6L615.1 59.3L616.7 59.4L621.5 57.8L623.4 57.8L628.7 59.0L635.3 59.0L641.6 60.9L643.8 60.2L645.5 60.6L646.3 62.1L648.3 62.1L650.5 60.0L651.8 59.4L653.8 59.7L657.5 61.3L659.5 61.6L661.0 61.2L663.8 60.0L667.0 60.1L668.4 59.8L671.2 58.3L671.8 57.1L673.6 57.3L676.2 55.1L677.6 54.1L679.0 53.9L682.3 53.9L685.2 52.7L686.6 52.5L688.0 53.1L696.3 54.5L698.8 55.4L701.7 59.0L702.8 59.8L704.0 60.1L705.2 60.1L706.5 60.1L713.7 61.3L716.1 60.6L719.1 59.2L720.3 58.9L721.4 59.0L723.4 59.7L726.3 59.7L727.7 60.4L729.0 61.4L730.4 62.2L731.6 62.3L735.5 60.4L737.0 60.2L741.8 60.3L746.7 61.5L747.5 62.7L748.8 63.9L750.7 63.0L751.9 62.3L754.2 61.7L755.9 61.9L757.5 62.5L761.7 64.9L764.9 65.5L772.7 64.8L776.1 64.9L779.4 64.5L780.9 64.7L783.8 65.8L785.4 65.9L786.6 65.4L789.3 63.7L790.8 63.2L794.0 63.0L798.9 63.4L806.0 65.9L809.0 67.6L811.6 69.7L812.8 70.3L821.6 71.2L827.5 73.6L832.3 73.8L835.1 74.9L837.9 75.0L843.6 72.2L846.4 71.7L848.3 72.2L848.8 73.2L848.4 76.9L848.5 79.1L848.9 81.1L849.6 82.9L850.7 84.7L853.3 87.3L859.1 90.0L861.4 92.4L864.7 100.2L866.7 102.8L870.4 104.3L877.3 104.8L883.2 103.7L886.4 103.8L902.6 107.2L905.7 109.2L906.7 110.4L909.5 114.5L914.2 118.7L916.6 121.9L918.5 125.2L920.7 128.1L923.9 130.0Z","M309.3 343.4L307.5 343.9L304.9 346.0L303.6 346.6L301.8 346.7L300.6 348.2L301.3 349.6L302.9 350.7L304.3 351.4L306.1 352.0L307.3 351.8L308.0 350.6L309.6 344.4Z","M264.9 338.3L263.8 337.8L259.8 336.1L257.8 334.7L256.5 333.1L255.5 330.5L254.3 328.1L252.6 327.1L250.4 328.3L249.1 331.4L248.7 333.1L248.6 334.7L249.0 336.2L250.8 340.3L251.6 341.5L254.5 342.4L255.7 346.0L252.6 351.0L252.7 353.4L254.7 353.3L255.7 352.3L257.9 351.7L258.4 353.6L259.2 354.4L263.8 353.6L266.2 353.5L268.0 352.0L268.2 349.0L264.9 345.5L264.8 342.9L266.0 341.8L269.3 339.3L269.8 337.8L268.3 336.7L266.5 337.3L265.3 338.2Z","M215.5 353.8L214.3 355.3L214.8 356.9L215.8 358.3L218.3 360.1L219.0 361.0L221.1 364.7L225.3 361.9L227.3 360.8L229.7 360.3L230.6 357.9L230.1 356.1L226.9 356.9L224.3 356.8L215.5 353.8Z"], + baglam: [], + }, + "kazakistan": { + ad: "Kazakistan", + proje: { ax: 17.7952, bx: -665.5198, ay: -26.5995, by: 1500.5322 }, + ulke: ["M888.4 194.9L886.2 194.3L884.7 193.7L882.2 194.7L880.7 194.3L879.4 195.6L878.4 196.6L877.6 198.0L877.6 199.5L878.6 200.9L878.5 202.3L878.3 204.4L876.8 206.9L875.9 207.7L875.1 209.4L872.5 210.8L870.8 210.7L869.3 212.1L865.0 212.3L861.0 212.9L859.9 214.2L857.5 220.0L857.1 222.9L856.5 224.6L856.2 225.9L857.7 233.8L857.4 236.4L857.8 238.0L859.0 240.1L858.9 241.7L859.2 243.0L858.9 244.5L857.8 245.2L856.8 246.0L856.5 247.3L856.1 248.7L854.8 248.9L852.5 249.3L851.1 249.2L850.1 250.5L848.4 251.9L846.9 252.8L846.0 254.1L844.2 254.6L842.9 255.2L842.2 254.3L842.7 252.5L841.7 251.1L840.2 250.7L838.6 251.2L836.8 250.5L834.0 250.4L832.1 250.5L831.0 251.2L829.3 251.0L827.6 251.0L820.8 248.6L817.8 246.5L815.4 245.8L814.2 244.7L812.8 244.5L811.7 245.2L811.7 246.6L811.5 247.7L811.3 249.5L811.4 251.0L808.6 257.5L807.0 263.8L806.3 265.4L806.0 267.3L804.5 270.2L803.8 271.7L803.3 273.5L802.9 277.1L802.4 279.6L801.7 281.6L800.3 284.0L799.7 286.7L799.1 288.1L798.9 289.4L799.5 290.4L802.8 291.2L804.6 292.0L805.0 293.5L804.6 296.9L804.1 298.9L803.3 300.3L802.2 300.5L799.8 298.1L798.1 297.4L793.7 299.5L792.1 299.4L790.3 298.5L789.9 297.4L789.5 295.4L788.4 294.5L787.0 294.7L785.5 295.8L778.5 298.1L777.0 299.0L775.5 299.3L773.3 300.2L771.4 299.7L767.7 300.9L766.4 300.7L765.3 302.0L763.3 302.3L762.0 302.9L760.7 302.6L759.2 303.0L756.8 305.4L755.6 306.1L755.8 307.6L758.0 309.0L762.0 308.4L763.7 309.4L766.6 310.6L766.6 311.7L765.4 312.0L764.4 312.8L764.9 314.1L764.1 317.0L764.0 319.1L764.7 323.0L764.3 325.9L764.2 327.4L765.1 328.4L765.4 329.8L765.6 330.9L766.6 332.5L768.7 338.5L770.8 344.5L770.5 346.3L769.5 348.1L770.5 348.7L771.4 349.4L771.6 350.9L772.1 352.3L771.9 353.7L770.7 354.0L769.8 353.2L768.3 353.6L767.0 354.7L765.4 355.5L764.4 356.7L765.4 358.0L766.6 358.6L767.8 359.0L767.5 360.3L765.2 360.9L764.0 361.6L762.8 361.4L761.8 363.9L760.8 365.8L760.7 367.2L761.0 368.7L761.7 369.8L761.8 371.0L762.0 373.9L762.5 375.1L762.9 377.0L761.8 378.3L760.5 377.0L759.5 375.2L758.3 374.1L757.6 372.9L756.6 372.1L752.7 371.1L750.5 371.4L748.8 371.3L747.4 370.1L746.6 368.0L744.6 366.6L743.7 365.4L743.4 363.7L743.4 362.5L742.2 362.5L740.9 363.2L739.5 362.9L738.3 362.8L736.9 362.2L734.7 362.0L733.8 361.2L731.3 360.1L730.2 359.9L729.0 360.1L728.0 360.7L726.9 360.4L725.8 360.5L723.1 360.6L721.3 359.8L720.0 359.7L718.9 360.0L717.4 359.2L716.2 359.2L714.9 359.7L713.6 359.0L712.4 358.8L711.1 359.3L708.8 359.2L707.6 358.8L706.9 357.8L704.3 357.2L702.9 357.4L701.8 357.5L700.9 358.4L699.5 359.0L698.4 359.1L697.3 359.6L695.9 359.0L694.6 359.7L693.5 359.2L691.4 358.9L689.8 358.9L688.5 358.5L686.9 358.9L685.1 358.5L683.5 358.4L682.3 360.4L681.1 361.7L679.0 361.4L673.9 360.9L672.8 360.9L671.2 360.0L670.3 359.3L669.2 359.0L668.2 358.2L666.7 357.4L664.7 357.0L662.2 355.2L661.5 354.0L660.2 353.3L658.8 352.7L657.5 351.7L656.4 351.2L655.0 350.1L655.1 351.4L652.0 351.9L651.1 351.1L649.6 353.3L648.2 353.6L644.8 355.1L643.7 355.9L642.8 358.5L642.3 359.5L642.5 361.3L642.0 363.4L641.1 365.7L640.8 367.7L641.2 369.4L642.5 372.1L641.0 372.3L639.3 371.9L639.2 370.2L637.2 369.6L636.2 369.0L634.8 368.7L632.5 369.1L631.3 368.9L630.2 368.1L629.6 366.8L628.7 366.0L626.1 365.3L624.8 365.3L622.1 363.6L620.9 363.1L618.7 363.0L617.6 363.4L615.0 362.0L613.9 361.6L612.7 361.2L610.9 361.5L608.3 363.1L607.1 362.5L605.6 362.2L604.6 362.9L603.8 363.7L602.6 363.3L601.9 364.3L600.7 365.1L600.6 366.9L598.7 367.9L598.2 369.4L599.0 370.2L598.4 371.2L597.3 370.9L596.7 372.4L596.2 374.1L595.3 375.2L596.1 376.4L595.8 377.8L594.5 378.3L593.2 378.1L592.7 379.2L591.9 380.4L591.4 381.8L590.7 382.8L589.5 382.5L589.0 381.4L587.4 381.3L586.1 382.1L585.3 383.5L584.7 384.4L583.2 386.2L582.6 387.4L581.4 388.6L580.1 389.4L579.3 390.1L578.6 391.0L576.9 391.4L574.7 391.8L573.5 392.2L572.7 393.1L571.8 393.9L570.8 394.7L569.6 395.3L569.2 396.3L569.4 397.4L568.2 397.2L567.3 397.8L565.7 398.1L564.8 398.9L563.6 399.6L563.2 400.7L563.2 402.8L563.0 404.1L562.3 405.0L561.4 405.6L560.2 405.8L559.5 407.0L558.3 407.6L557.5 409.3L557.2 410.4L556.3 411.2L555.2 411.8L554.7 412.8L554.4 413.9L554.4 415.5L554.5 416.6L555.2 417.5L555.6 418.5L555.3 419.8L554.3 420.3L553.2 420.6L550.7 419.7L549.3 418.9L548.0 418.0L546.6 416.5L545.8 415.6L544.5 415.1L545.4 414.1L546.1 413.0L546.5 411.8L546.7 410.5L546.7 409.3L546.6 408.2L545.5 408.6L544.8 407.3L544.2 406.3L543.6 405.0L542.5 405.3L541.4 405.7L540.3 405.1L537.8 405.2L535.5 405.4L534.0 405.5L531.8 405.6L529.9 405.7L527.3 405.9L525.5 406.0L523.5 406.2L522.0 405.7L521.2 404.7L520.5 400.7L519.7 396.8L519.1 393.5L518.6 390.2L518.2 386.9L517.9 383.5L515.3 383.4L513.4 383.4L511.4 383.4L509.3 383.4L509.1 377.8L509.2 373.4L509.3 372.3L510.0 370.9L510.4 363.6L510.8 357.0L508.2 358.5L505.6 360.1L504.2 357.4L502.8 354.4L501.9 352.3L500.4 348.8L497.8 346.9L496.0 345.7L495.1 344.6L494.2 343.6L492.3 340.9L490.4 338.2L489.2 337.5L486.9 338.8L485.1 339.9L483.4 340.9L481.6 342.0L480.0 342.1L477.5 341.9L475.1 341.6L472.6 341.4L470.1 341.1L467.4 340.9L464.7 340.6L462.0 340.3L459.3 340.1L457.7 340.4L456.0 340.6L454.4 340.9L452.8 341.2L451.2 341.5L449.5 341.8L447.9 342.1L446.3 342.4L444.3 342.8L442.3 343.2L441.0 343.4L439.8 343.7L438.3 344.0L436.2 342.0L435.2 340.7L434.2 339.5L433.2 338.2L432.2 337.0L431.2 335.7L430.2 334.4L429.1 333.2L428.1 331.9L426.9 330.3L425.9 329.2L424.9 328.1L422.9 325.7L421.8 323.9L421.5 321.9L421.1 320.5L419.5 319.2L418.0 318.1L415.8 316.6L413.2 314.7L410.3 312.6L407.0 310.3L403.6 307.8L400.0 305.3L396.4 302.8L392.9 300.3L389.6 297.9L386.5 295.8L385.4 294.9L383.8 293.8L381.6 292.2L379.8 291.0L378.7 290.2L377.0 289.0L374.6 289.1L373.5 289.5L372.5 289.8L371.4 290.1L370.3 290.4L368.3 291.1L366.2 291.7L364.0 292.4L361.8 293.2L359.5 293.9L357.3 294.6L355.7 295.2L354.0 295.7L352.3 296.3L350.6 296.9L349.0 297.4L347.3 298.0L345.6 298.6L344.0 299.1L342.3 299.7L340.6 300.3L339.0 300.8L337.3 301.4L335.6 302.0L334.0 302.5L332.3 303.1L330.6 303.7L330.6 309.8L330.6 315.9L330.6 322.0L330.6 328.2L330.6 334.3L330.6 340.4L330.6 346.5L330.6 352.6L330.6 358.7L330.6 364.8L330.6 370.9L330.6 377.0L330.6 383.1L330.6 389.2L330.6 395.3L330.6 401.4L329.4 401.3L327.2 402.2L325.6 402.5L324.5 402.9L322.3 403.1L321.2 402.5L320.1 400.4L318.5 398.7L317.3 397.4L316.2 395.1L315.0 392.8L314.2 391.6L312.3 388.8L312.1 387.2L312.0 385.8L308.6 382.1L306.4 380.5L304.7 379.2L301.7 376.9L298.9 374.9L297.6 374.4L296.3 374.2L292.0 375.0L289.3 375.6L286.1 376.2L285.0 376.5L281.0 378.2L280.0 378.9L277.2 380.0L273.4 383.5L271.1 386.2L268.4 389.2L267.6 390.0L267.7 388.9L268.4 387.0L268.5 384.9L267.9 383.7L267.6 382.1L267.0 380.9L267.5 379.5L267.8 378.4L269.3 376.1L270.3 374.7L270.5 373.3L271.1 372.2L271.4 371.1L271.7 370.0L271.9 368.1L271.2 365.9L270.1 364.8L269.9 363.6L270.5 364.8L271.6 365.6L272.1 367.1L273.0 366.4L272.9 364.7L271.9 363.5L271.0 362.7L270.1 362.1L268.2 361.4L266.4 361.2L265.4 361.7L263.5 360.3L262.4 359.7L260.9 360.0L259.7 360.5L258.6 361.1L257.2 359.6L256.6 358.3L256.0 356.5L254.9 354.9L254.1 354.1L254.1 352.5L252.9 352.0L251.6 352.1L250.5 352.3L248.6 352.6L246.9 352.6L247.4 349.6L247.6 348.5L247.7 345.0L247.1 343.2L246.9 342.1L245.9 341.0L244.9 340.2L244.1 339.2L242.4 335.4L242.2 334.3L241.9 332.9L241.2 331.8L240.7 330.6L239.7 329.6L239.6 328.3L239.5 326.1L238.9 324.4L236.6 323.1L230.4 321.9L229.2 321.2L228.5 320.3L228.5 318.6L228.5 317.3L228.2 315.9L228.5 314.6L229.5 313.7L229.8 312.5L233.1 313.5L234.8 313.1L237.2 313.6L238.4 313.3L239.8 313.4L240.8 314.3L241.9 315.0L242.6 316.4L244.1 317.2L245.6 317.1L247.0 315.8L248.1 315.4L249.2 316.3L250.4 316.0L251.6 316.6L251.9 315.5L250.6 314.6L249.4 313.9L247.7 314.3L246.6 311.8L245.6 310.4L244.2 309.5L243.1 308.9L241.5 307.6L241.4 306.0L241.7 304.9L242.2 303.7L243.4 303.4L244.7 302.1L245.8 302.0L246.9 302.9L246.7 301.5L246.6 300.2L246.5 298.9L247.3 297.6L249.1 294.7L249.4 293.2L250.2 294.3L251.7 294.6L253.2 293.9L254.3 293.2L255.0 292.1L256.1 292.4L257.7 293.0L258.8 293.8L260.0 293.0L261.1 293.4L267.0 292.7L269.1 292.7L272.9 294.3L274.7 294.6L276.0 295.2L277.7 295.0L279.1 295.5L280.7 295.0L281.9 294.6L280.2 293.3L279.1 292.7L276.0 291.2L275.1 290.6L273.3 289.8L272.9 288.6L273.0 287.0L273.6 286.1L274.4 284.5L275.1 283.2L276.0 282.5L276.8 281.5L277.4 280.0L278.2 278.9L278.6 277.8L279.1 276.8L279.0 275.7L279.7 274.4L279.9 272.1L280.4 269.7L280.4 267.9L279.9 266.5L279.1 265.4L278.2 264.4L279.4 265.2L279.0 263.8L277.6 264.1L277.8 262.8L278.3 261.7L279.4 260.9L280.2 260.1L281.3 259.5L281.0 257.9L279.9 257.5L279.4 256.1L279.1 254.3L278.7 253.2L277.5 253.1L276.5 251.7L273.8 251.8L270.8 251.7L269.4 250.7L267.9 250.3L267.4 251.6L266.5 252.9L264.5 253.8L263.4 253.4L263.9 254.6L261.8 255.3L261.0 254.3L260.1 253.5L260.2 252.3L259.1 253.4L257.6 253.4L258.0 252.2L256.4 252.8L255.3 252.3L254.3 251.4L254.4 249.8L253.7 248.8L253.1 250.2L251.8 249.3L249.8 248.5L246.5 247.6L245.4 247.2L243.9 248.2L241.5 248.8L240.7 249.7L239.5 249.3L237.7 252.6L237.7 251.2L236.8 251.9L235.5 252.1L235.0 253.9L234.4 254.9L234.5 253.6L233.4 253.8L232.3 253.2L231.1 255.2L229.8 255.4L228.7 257.2L227.2 257.0L225.7 258.8L224.8 260.1L223.6 260.2L222.3 261.2L221.1 261.8L220.0 262.0L218.9 262.3L217.8 261.6L217.6 263.1L216.4 262.7L215.3 262.3L214.8 261.1L214.9 262.4L215.4 263.7L214.7 262.8L213.4 262.5L212.2 261.8L213.2 263.4L212.1 263.7L213.0 265.5L211.6 265.3L210.9 264.5L211.0 265.7L209.7 265.9L210.4 267.3L207.0 266.2L205.7 265.1L204.6 264.1L203.2 264.2L202.2 263.3L201.2 262.3L198.9 262.1L198.4 261.0L197.4 259.6L197.7 257.5L198.6 256.7L199.7 256.5L201.1 257.1L201.8 258.6L205.0 258.3L206.6 256.5L201.1 247.7L198.4 240.5L198.0 239.4L196.4 238.9L195.1 237.2L191.8 231.4L190.7 230.4L189.4 229.9L182.4 230.0L178.6 228.2L177.8 230.4L177.7 231.6L174.0 229.9L173.1 228.9L173.3 227.8L173.0 226.0L171.8 224.4L173.3 223.0L174.3 221.8L173.0 221.4L172.8 220.1L172.7 219.0L172.6 217.8L172.6 216.7L170.5 215.9L166.0 214.4L161.6 212.8L164.1 205.9L166.5 199.4L167.5 198.4L168.9 197.7L170.5 195.9L171.2 194.6L171.6 193.2L171.4 191.8L170.5 190.7L167.8 188.7L168.0 181.8L169.1 175.3L169.5 174.2L174.0 172.0L175.2 170.8L176.4 169.4L176.7 167.6L175.7 166.3L175.8 165.2L176.6 164.2L176.1 163.2L177.8 162.0L178.6 160.5L179.2 159.6L180.8 158.5L182.0 158.8L183.1 160.3L184.2 161.0L185.0 161.9L186.1 163.0L187.1 164.1L187.8 165.1L188.7 166.0L189.1 167.1L190.0 167.8L190.5 169.2L190.9 170.7L191.5 172.0L192.6 173.2L193.5 174.2L195.0 175.0L196.1 175.6L197.2 174.7L200.8 173.3L202.6 172.3L204.0 170.7L204.2 168.7L202.6 167.6L202.7 166.0L201.6 163.5L201.1 161.7L200.7 157.8L200.7 156.0L200.2 154.6L198.8 154.1L201.8 154.7L203.4 154.7L206.7 152.4L208.3 150.4L211.5 149.2L213.0 148.6L214.0 147.1L213.1 145.6L212.8 144.2L213.4 143.0L213.8 141.7L214.6 140.9L216.1 141.3L220.3 141.2L221.4 139.9L224.0 137.8L227.9 136.9L230.0 135.9L230.3 134.6L230.9 133.4L232.1 132.7L233.2 131.8L233.5 129.3L234.5 128.3L234.6 127.1L235.6 127.6L236.0 128.6L237.1 128.9L238.3 128.1L237.5 125.1L237.9 123.8L239.2 124.1L240.0 125.2L245.1 126.1L246.2 125.7L247.0 126.6L248.3 127.0L248.8 128.3L248.1 129.2L246.3 129.5L246.7 130.5L247.5 131.4L248.8 131.5L250.3 131.3L251.5 130.4L252.4 129.7L253.1 131.2L254.4 131.9L256.0 130.8L255.7 129.0L256.6 127.1L257.5 126.1L259.0 126.1L260.5 126.6L261.8 126.1L262.5 124.9L263.9 124.7L265.0 123.6L266.1 124.5L266.6 126.4L267.7 128.5L268.2 130.3L268.8 131.2L270.1 131.5L271.6 131.6L272.7 131.1L273.7 130.4L275.4 130.9L276.4 131.8L277.4 131.4L280.4 131.0L281.6 130.8L283.1 130.8L284.2 130.8L285.5 132.0L287.5 132.9L288.5 133.6L287.8 134.6L288.1 135.8L288.8 136.8L289.6 138.1L292.9 139.0L294.3 139.0L295.3 139.9L296.1 141.0L297.4 141.4L297.7 142.8L298.0 144.2L298.9 145.1L299.8 145.8L300.8 146.8L302.2 147.0L303.7 147.7L303.9 148.9L302.9 150.1L302.8 151.8L302.3 153.5L302.5 155.2L303.5 156.3L305.1 156.4L306.9 155.3L307.4 153.7L306.8 151.8L307.0 150.2L306.6 149.0L306.8 147.0L305.8 146.5L304.4 145.9L304.8 144.2L306.8 143.2L308.0 143.5L309.9 144.7L310.7 145.7L314.1 147.0L314.3 148.7L318.7 152.9L319.7 153.2L321.1 153.0L322.2 153.8L323.4 154.9L324.2 155.9L325.6 156.2L326.8 154.9L329.8 153.4L332.4 151.3L333.5 147.4L334.1 146.4L335.6 147.0L337.0 146.7L337.3 145.3L338.4 144.9L338.5 143.5L339.0 142.5L340.1 142.2L341.6 144.4L343.3 144.8L343.2 143.1L343.8 142.0L345.5 142.4L346.9 142.5L349.3 142.3L351.3 141.4L352.2 143.0L353.4 143.8L354.1 144.9L354.5 146.3L356.2 147.6L357.6 147.5L358.3 146.4L359.4 146.2L361.1 146.7L361.9 145.6L361.8 143.0L362.2 141.4L363.8 141.1L365.0 141.2L366.4 141.6L368.0 141.4L369.1 142.4L370.2 141.7L370.6 140.7L372.1 140.0L373.1 141.1L373.7 142.3L375.9 142.3L377.2 143.3L377.3 144.5L376.8 145.7L376.4 146.8L377.1 147.7L378.2 147.9L378.1 149.2L379.4 149.4L380.6 150.6L382.4 152.2L387.9 152.9L388.8 153.8L391.3 153.8L392.9 154.2L394.2 155.0L392.9 155.9L392.7 157.1L393.7 157.9L394.9 157.1L396.4 156.5L398.2 156.4L399.7 154.0L400.5 153.0L400.7 151.2L401.5 148.5L402.6 147.8L403.7 147.8L404.9 149.1L405.3 150.8L406.6 151.9L415.0 153.2L416.8 152.9L421.7 151.3L426.6 149.7L427.6 148.4L427.9 147.3L428.1 144.9L429.1 139.7L429.5 138.5L430.9 137.3L430.0 136.1L428.9 133.3L427.8 132.5L426.3 131.7L425.2 131.9L424.1 131.4L422.9 131.5L421.8 131.2L420.7 131.2L419.5 130.2L418.9 129.1L418.8 128.0L411.4 127.5L408.9 126.3L408.8 125.2L410.0 124.6L410.5 123.5L407.1 121.8L405.3 120.5L403.8 121.2L402.1 119.1L402.3 117.6L405.8 117.6L408.4 115.0L409.8 113.9L411.2 113.3L413.2 113.6L415.1 112.8L415.8 111.8L417.8 110.8L419.1 109.7L420.1 109.0L419.6 107.0L419.1 105.1L417.0 103.7L416.7 101.8L416.5 100.7L415.1 100.7L414.2 99.7L414.6 97.8L416.2 97.2L417.2 96.5L417.9 95.4L421.0 92.8L419.6 91.5L420.9 91.5L422.2 91.0L423.4 90.4L424.6 91.0L426.2 91.2L427.5 90.3L429.1 91.0L430.2 91.9L431.3 91.8L432.8 91.6L434.6 91.3L436.4 92.4L438.4 92.0L439.5 91.0L439.8 89.6L439.7 88.4L438.7 87.4L434.9 86.7L433.6 86.3L432.5 85.3L431.8 84.4L429.7 85.1L428.5 85.0L426.7 83.8L424.4 83.6L422.9 82.8L422.4 81.5L422.8 80.2L423.6 79.2L423.9 77.7L425.1 77.4L425.8 78.2L426.8 79.2L428.7 78.0L429.9 77.3L429.4 75.6L426.9 75.1L425.6 76.3L422.5 75.8L421.7 74.8L418.3 74.4L418.3 73.3L420.1 73.8L420.8 72.7L421.9 71.8L422.7 70.4L423.5 69.6L422.5 68.4L421.7 67.6L420.0 67.4L419.6 66.1L421.1 65.3L422.6 65.5L423.4 66.6L424.1 65.7L423.6 64.4L424.9 63.4L426.0 62.5L427.4 62.7L428.2 63.9L429.8 64.4L430.0 65.4L431.0 64.8L432.7 64.4L433.8 64.2L434.7 64.9L435.9 65.9L437.8 66.0L437.8 64.4L445.1 63.5L444.9 64.8L445.0 66.2L446.3 66.9L447.4 67.4L447.2 66.2L448.2 65.0L447.6 63.4L449.0 62.3L451.3 62.0L452.6 61.7L453.8 62.1L455.3 61.7L457.1 61.9L457.8 60.8L457.8 59.5L459.4 59.4L461.4 59.8L462.6 59.6L463.6 58.9L465.3 58.7L468.2 57.5L469.3 57.8L470.8 58.8L472.3 58.4L473.5 58.1L473.3 56.7L474.2 56.1L475.3 55.5L476.5 55.6L477.9 55.2L479.3 55.0L481.1 54.8L482.3 54.4L483.7 53.9L485.0 54.9L486.2 55.3L487.3 54.8L488.5 53.9L489.6 53.4L490.8 53.9L492.2 55.5L493.3 56.0L494.4 55.9L494.4 52.2L494.7 51.1L497.2 49.2L498.8 49.5L499.1 47.8L501.4 47.5L503.9 48.3L504.9 47.7L505.9 46.3L507.8 45.5L508.3 47.5L510.7 47.2L516.9 45.2L518.0 45.1L520.3 45.2L521.4 45.0L522.5 44.2L526.4 43.8L528.0 43.2L529.9 43.1L531.0 42.5L531.8 41.5L533.5 41.6L534.6 41.4L537.8 41.4L539.2 41.1L540.2 40.3L541.0 39.2L541.8 38.5L543.0 38.4L544.7 39.1L547.5 38.7L548.3 37.6L548.7 36.5L550.0 36.2L548.6 34.9L548.2 33.5L548.8 32.5L550.0 32.7L551.3 32.4L553.1 32.7L554.2 32.3L555.5 32.1L555.8 30.8L556.7 29.9L556.8 28.4L559.2 28.4L560.6 29.8L561.8 30.1L561.9 28.3L560.9 27.7L560.6 26.6L564.5 27.0L565.3 28.3L566.4 28.7L567.9 27.4L570.8 28.3L574.3 28.7L576.6 29.8L578.6 31.9L580.5 32.4L583.7 34.0L584.8 32.9L586.8 32.2L587.3 31.0L588.0 30.0L589.7 30.4L590.9 30.1L592.0 29.3L594.0 29.4L594.2 30.5L595.5 32.8L597.2 34.8L597.5 35.8L597.5 37.1L597.2 38.3L597.1 39.6L597.1 40.9L597.9 42.0L598.0 43.6L599.7 44.7L601.2 44.8L602.4 46.0L602.7 47.2L601.1 48.0L600.5 49.2L600.6 51.1L601.0 52.2L601.1 53.3L601.4 54.6L601.3 55.7L600.0 55.9L598.6 55.3L597.4 56.0L598.6 57.0L598.9 58.2L599.4 59.5L600.5 61.1L601.8 61.1L603.2 59.1L604.7 59.1L605.8 59.2L606.4 61.2L607.7 60.8L608.9 61.2L610.1 61.0L610.6 59.1L611.1 57.7L615.0 57.9L616.1 58.4L617.1 60.2L618.5 60.7L619.1 59.4L617.7 58.7L616.9 57.7L617.5 56.2L616.4 55.0L618.4 54.4L619.7 55.3L620.5 56.9L621.5 57.4L621.1 59.4L622.6 60.0L624.3 60.6L623.3 61.3L622.1 61.7L622.5 63.0L623.0 64.4L622.4 65.9L623.3 66.7L625.0 65.7L625.6 64.8L627.7 65.5L628.1 64.4L627.4 63.0L624.8 63.0L625.0 61.8L625.9 60.7L629.2 60.8L631.5 61.0L632.8 61.0L633.1 62.9L634.2 63.6L634.6 64.7L636.9 65.2L639.9 65.8L640.5 64.8L641.9 65.6L642.8 64.4L644.0 63.6L644.0 62.4L645.2 62.1L646.7 62.6L645.9 66.8L645.3 67.9L642.2 67.5L640.8 68.1L641.3 69.3L639.7 69.8L639.0 72.5L637.9 72.8L637.5 74.0L637.6 75.5L640.5 76.9L639.7 78.5L640.8 79.3L642.9 77.7L643.6 76.8L644.2 75.8L645.1 74.9L646.6 74.5L647.8 74.8L649.1 73.9L650.2 73.7L652.1 74.0L652.4 75.1L653.4 75.6L655.1 74.9L655.8 75.9L656.1 77.1L657.7 78.4L659.5 75.6L659.0 73.4L662.3 72.7L662.8 71.2L664.2 70.6L664.8 69.3L665.7 68.5L667.1 68.5L669.1 69.3L671.9 67.7L674.1 66.3L676.8 64.5L675.5 62.6L676.8 61.8L678.0 61.4L679.9 61.6L681.4 61.1L682.5 60.7L684.5 59.8L687.7 58.5L690.2 57.5L690.1 56.0L690.7 55.1L694.6 55.7L696.5 54.8L697.7 54.7L698.4 53.4L699.4 52.4L700.8 52.5L702.1 51.9L703.0 52.7L701.2 53.2L700.3 54.1L701.4 54.7L701.8 56.3L701.2 57.2L700.6 58.5L699.8 59.4L698.7 60.6L695.4 59.8L694.3 59.8L695.4 63.0L695.7 64.4L697.8 66.3L700.0 67.8L703.3 70.2L706.6 72.5L709.9 74.9L713.2 77.2L715.6 79.0L717.8 81.1L718.7 82.0L720.1 83.5L722.1 86.3L723.3 88.2L725.2 91.2L727.1 94.3L729.1 97.3L731.0 100.4L733.5 104.7L736.0 109.0L738.5 113.3L741.1 117.6L743.0 120.9L744.9 124.2L745.7 125.7L746.8 127.5L748.7 130.9L750.3 134.0L751.8 137.2L753.4 140.4L755.0 143.6L755.8 145.3L756.8 147.2L757.3 148.6L757.9 149.6L759.1 150.5L758.7 149.0L759.0 147.9L759.9 148.7L761.1 147.7L762.3 146.8L763.8 146.2L765.3 145.7L766.3 144.2L766.4 142.8L765.6 141.5L765.4 140.3L765.6 139.0L766.6 138.4L768.1 138.6L769.0 137.7L769.4 136.6L770.2 135.9L772.6 137.0L773.8 136.4L774.4 137.7L775.5 138.9L776.7 139.3L777.9 138.7L778.7 139.8L777.3 143.1L776.9 144.8L777.8 145.6L780.8 144.9L783.0 145.0L783.3 146.9L784.2 148.4L783.5 149.6L783.6 150.9L787.9 151.0L788.8 150.0L790.1 150.1L791.8 150.0L793.5 150.4L795.0 151.5L796.3 151.9L797.5 151.4L798.6 150.8L799.8 150.6L801.0 150.6L802.2 151.6L804.4 150.1L805.7 149.5L806.1 147.1L807.3 146.4L808.7 146.8L811.1 147.1L812.5 146.2L813.4 144.2L814.7 144.3L817.2 143.9L819.2 144.2L820.0 145.2L822.3 145.8L823.8 146.8L825.3 147.2L826.4 147.8L827.2 149.0L828.4 149.8L828.4 151.5L830.9 153.7L831.6 154.6L832.0 155.9L832.8 157.0L832.4 158.9L833.2 160.5L833.6 162.0L833.5 163.2L834.5 164.0L835.2 164.9L836.5 164.4L837.7 164.5L838.8 165.5L840.1 165.6L841.1 166.0L842.1 166.9L843.4 167.0L844.0 168.2L845.1 168.0L846.6 168.6L847.4 169.7L846.4 170.7L846.2 172.3L846.6 173.4L848.1 173.9L848.4 175.5L850.0 177.6L850.5 180.5L851.8 181.7L852.8 181.2L853.9 180.8L855.1 181.5L856.2 181.6L857.4 180.8L858.5 181.8L860.0 181.9L861.2 182.7L862.4 182.3L863.8 182.3L863.7 183.6L864.5 184.3L865.4 183.4L866.9 183.3L868.0 184.8L869.3 182.5L870.7 180.9L871.8 180.5L873.0 179.4L873.3 178.3L874.4 177.5L875.5 176.4L877.1 176.5L878.2 176.3L878.0 177.6L878.7 178.7L877.6 179.4L876.4 179.8L875.5 181.1L875.9 182.3L877.5 182.4L879.2 183.3L879.4 184.6L880.1 186.0L881.5 186.8L881.0 187.8L882.7 189.5L883.1 190.5L885.5 190.7L887.5 191.7L888.2 194.1Z","M462.4 288.5L464.5 288.3L466.5 287.6L468.2 286.6L469.8 285.3L471.0 283.7L472.0 281.8L472.6 279.7L472.7 278.7L472.8 277.5L472.7 276.4L472.3 274.3L471.5 272.3L470.4 270.6L469.0 269.1L467.4 267.9L465.5 267.1L463.5 266.6L461.4 266.6L459.3 267.1L457.5 267.9L455.8 269.1L454.4 270.6L453.3 272.3L452.5 274.3L452.1 276.4L452.0 277.5L452.1 278.7L452.2 279.7L452.8 281.8L453.8 283.7L455.1 285.3L456.6 286.6L458.4 287.6L460.3 288.3L462.4 288.5Z","M228.9 303.3L229.1 302.1L230.1 301.4L230.0 302.7L230.0 304.3L228.8 303.9Z","M227.3 308.1L225.7 308.0L225.2 306.7L224.3 305.6L224.0 304.4L225.0 302.0L226.3 301.4L225.2 302.5L224.6 304.2L224.8 305.4L225.3 306.7L226.2 307.5L227.3 307.3Z","M272.2 291.3L272.3 292.8L271.0 292.6L269.8 291.4L270.2 290.2L271.1 289.6L272.1 290.9Z","M221.1 268.6L221.4 270.0L221.1 271.2L220.1 270.4L219.3 268.0L220.5 267.9Z"], + baglam: [], + }, + "bosna-hersek": { + ad: "Bosna-Hersek", + proje: { ax: 104.3965, bx: -1319.4237, ay: -144.9375, by: 6589.4272 }, + ulke: ["M523.5 372.9L513.4 366.6L515.2 366.6L518.1 367.9L519.8 368.5L518.3 366.9L515.9 365.5L521.6 364.3L524.5 362.1L524.1 358.1L520.9 350.4L517.7 346.5L516.6 345.2L502.4 335.6L501.5 335.0L499.9 333.1L498.7 330.3L497.8 327.3L497.1 325.8L496.0 324.8L493.9 323.4L489.6 319.4L485.6 313.1L483.3 305.9L485.2 293.7L483.6 290.0L480.3 287.8L470.2 286.2L464.1 282.7L461.8 280.6L458.5 277.6L453.4 271.6L436.9 254.6L425.3 245.3L423.8 242.9L422.9 239.8L422.6 237.4L421.8 235.3L417.5 231.2L414.1 226.5L408.9 221.2L406.0 216.8L404.8 215.1L403.2 213.2L401.4 211.8L396.8 210.1L396.0 208.4L395.5 206.3L394.1 204.1L393.1 203.7L390.4 203.9L389.3 203.7L388.2 203.2L387.1 202.3L385.0 200.2L383.5 197.7L381.2 192.0L379.7 189.4L375.2 184.5L373.4 182.0L371.5 175.8L370.5 171.2L370.4 169.0L370.7 167.5L371.8 165.1L372.1 163.9L372.4 161.5L372.1 160.0L371.0 158.9L368.8 157.5L366.9 157.0L365.7 157.0L366.1 155.7L367.6 154.1L367.6 151.9L366.9 149.1L364.3 142.0L363.8 139.1L363.1 136.6L361.9 135.0L359.7 134.6L355.9 136.3L353.7 136.1L351.6 133.8L352.4 131.4L354.1 129.2L354.6 127.3L355.6 126.8L355.2 124.8L354.7 123.0L353.9 121.6L352.6 121.0L350.0 120.7L348.7 120.2L347.7 119.5L346.3 117.5L345.5 113.9L344.4 112.3L342.7 112.7L341.0 112.1L340.7 110.9L340.4 109.4L340.0 108.0L338.0 107.1L337.3 108.0L336.7 109.3L335.9 110.2L333.2 110.6L330.6 111.2L329.7 110.2L329.0 108.8L328.3 107.4L325.8 105.8L322.6 100.7L321.4 98.2L321.3 95.8L322.8 93.8L324.9 93.1L326.8 92.3L327.3 89.7L326.3 86.9L324.6 84.3L323.2 81.4L322.8 77.8L323.7 75.2L326.2 70.8L326.6 68.2L325.4 63.8L325.4 61.1L327.9 54.9L328.3 52.6L328.0 44.0L328.1 42.9L329.2 39.7L330.3 38.8L332.6 36.7L338.3 35.8L348.3 36.0L350.7 35.6L351.8 35.6L353.1 36.2L354.0 37.5L353.9 38.8L353.5 39.9L354.4 41.2L356.7 41.7L358.0 42.7L359.6 45.3L361.8 50.9L363.6 53.3L373.2 62.7L376.1 64.5L380.1 66.2L383.9 67.1L386.5 66.4L387.0 64.3L388.2 60.2L390.3 56.3L390.8 55.1L391.0 53.4L390.8 51.6L391.6 50.3L392.5 49.6L395.3 48.8L396.4 48.0L397.8 45.8L401.2 38.3L406.1 35.0L412.2 35.2L433.0 41.3L435.7 41.0L437.0 39.8L437.1 37.5L437.6 35.8L438.7 34.8L439.9 34.3L440.9 33.6L441.5 32.0L443.4 30.2L444.2 29.0L447.4 26.0L448.3 26.8L449.1 29.9L449.3 31.0L449.2 32.3L452.0 32.8L451.3 30.9L452.8 31.4L454.1 33.0L455.2 33.7L456.2 31.8L456.6 33.0L456.6 34.7L456.2 35.9L458.5 34.3L461.1 38.2L465.6 41.5L468.3 42.7L474.8 45.7L476.0 45.1L480.9 44.7L483.4 39.8L487.5 42.4L489.4 43.2L492.8 45.4L493.8 46.2L495.2 47.0L497.2 46.8L500.6 45.7L501.1 44.3L502.4 44.3L503.0 45.2L502.8 46.9L502.1 47.8L503.4 48.2L504.6 48.0L507.1 46.7L506.2 49.7L511.6 49.7L513.9 49.9L515.1 49.8L517.2 48.5L521.1 44.4L523.3 43.3L526.8 43.5L529.9 45.2L532.7 47.9L538.6 55.4L540.5 57.1L542.6 57.9L546.7 56.5L549.5 56.0L552.2 53.9L558.5 46.4L560.1 45.6L561.7 45.6L563.4 46.5L569.1 51.6L571.4 52.7L573.5 53.1L574.7 53.1L578.0 52.6L579.8 51.5L580.5 50.0L580.6 48.2L580.8 46.4L582.0 44.9L584.5 44.4L587.1 45.4L591.8 48.8L593.4 49.4L600.7 50.0L602.7 50.9L604.5 52.4L606.9 54.9L608.4 56.5L610.0 57.5L611.0 58.1L613.7 59.1L616.2 59.2L616.0 57.2L615.5 55.4L615.6 54.1L617.1 53.5L619.6 54.0L621.2 53.7L622.6 52.9L624.1 53.1L625.3 55.6L625.9 56.8L626.6 57.8L628.4 57.6L629.0 56.1L629.8 54.6L631.1 54.9L635.5 63.4L636.8 64.9L638.0 65.5L640.9 65.7L642.1 66.4L642.7 67.9L642.8 69.4L643.5 70.5L643.4 72.5L641.1 74.2L640.4 75.6L641.5 79.7L645.1 83.5L647.6 85.2L649.4 86.3L652.6 87.4L661.5 87.1L664.6 87.0L665.8 86.7L669.1 85.7L671.3 85.4L672.9 84.8L682.3 78.0L683.6 77.7L684.7 79.8L686.2 80.5L688.1 79.7L693.7 80.5L695.6 79.9L698.6 81.9L700.7 82.2L702.0 83.0L703.0 84.4L703.3 85.6L703.4 87.1L702.1 88.3L698.4 105.8L697.3 108.5L696.3 110.0L694.2 111.7L693.1 112.9L692.3 114.3L690.8 118.6L685.9 126.9L684.3 128.0L683.6 129.7L683.7 132.0L682.9 134.2L682.2 135.1L677.7 137.1L677.4 139.3L679.1 145.8L678.9 149.7L677.6 151.9L676.2 153.7L675.3 156.7L675.5 159.5L676.3 162.4L678.6 167.3L680.5 169.6L682.6 170.6L687.1 171.6L689.2 172.7L691.6 173.0L695.0 172.2L696.2 172.4L698.0 173.9L699.8 176.5L701.1 179.7L701.3 182.6L701.9 184.5L703.9 186.5L708.5 189.9L709.6 191.0L710.9 191.2L712.1 190.0L713.6 191.2L713.8 193.8L714.5 194.7L716.1 196.2L718.0 199.0L722.0 201.8L723.7 203.9L724.7 204.7L725.7 203.4L727.9 204.3L728.7 207.0L727.8 209.4L726.1 211.4L721.8 214.6L719.3 215.5L716.7 215.7L710.8 215.1L705.2 215.5L703.7 216.0L702.2 216.0L700.8 215.2L698.1 212.7L695.5 210.8L694.1 210.3L692.6 210.4L690.4 211.1L689.5 211.9L689.0 213.3L689.5 216.1L688.1 218.3L689.3 219.1L692.9 221.8L696.0 226.0L701.6 235.0L712.3 246.7L714.4 251.4L716.9 259.5L717.1 263.3L714.4 266.0L714.0 267.7L713.8 269.8L713.9 271.8L714.4 273.3L715.4 274.7L714.4 275.8L710.5 274.2L709.2 274.3L707.9 277.5L707.0 278.7L706.2 277.4L705.3 275.0L703.8 272.2L702.0 269.9L700.3 268.9L699.2 269.2L696.8 271.1L695.5 271.8L694.3 271.9L691.6 271.5L690.5 271.8L689.0 274.2L688.1 277.4L686.8 279.9L684.5 279.9L679.5 279.1L676.9 279.4L674.1 282.8L672.1 283.6L669.9 283.7L668.1 283.0L666.7 281.3L665.6 279.2L664.1 277.7L661.8 277.9L660.2 279.1L657.7 281.9L655.8 282.9L654.8 283.6L654.2 284.8L654.3 286.0L655.3 286.8L656.9 287.2L659.0 289.9L658.5 292.0L660.8 292.2L665.1 297.5L668.2 306.3L671.4 312.4L667.9 313.1L666.7 313.8L665.9 314.9L665.2 316.2L664.4 317.4L663.3 318.4L660.8 314.8L659.9 313.1L659.6 311.9L659.7 309.9L658.9 308.8L656.1 306.8L653.6 306.1L647.4 306.7L645.4 307.6L646.4 309.6L644.0 311.0L630.7 321.0L629.1 323.3L631.6 324.6L627.1 331.0L625.4 334.7L624.6 339.1L624.6 343.1L626.4 354.2L622.2 353.6L616.0 353.7L610.1 355.0L607.0 358.1L605.0 363.8L605.0 366.3L606.1 369.2L608.5 374.3L609.1 377.0L608.4 378.4L607.1 379.5L606.0 381.1L606.1 383.6L607.1 387.1L608.5 390.6L612.1 396.6L614.3 398.9L616.1 401.3L617.1 405.2L617.1 409.4L616.4 411.3L615.9 412.4L613.7 414.7L612.6 415.3L610.5 416.6L611.3 418.0L611.5 419.3L610.0 420.4L608.8 419.6L607.6 419.5L606.5 420.0L605.4 421.0L603.7 420.4L599.9 419.9L598.4 418.9L596.2 415.6L595.1 414.7L592.2 414.9L586.6 412.9L583.1 411.0L564.9 398.5L559.2 394.7L556.8 392.6L552.3 387.4L549.7 385.4L546.1 384.4L544.9 383.6L541.7 378.4L541.5 376.7L541.6 373.3L541.3 371.8L540.1 370.2L538.3 370.9L535.2 371.0L530.9 369.3L528.6 368.8L526.3 369.3L524.8 370.9L523.5 372.9Z"], + baglam: [], + }, + "makedonya": { + ad: "Kuzey Makedonya", + proje: { ax: 194.1792, bx: -3693.9059, ay: -259.7076, by: 11029.8998 }, + ulke: ["M299.8 155.1L304.3 159.9L306.6 161.2L309.8 161.0L311.3 159.8L313.4 155.8L314.6 155.0L316.4 156.1L320.1 161.3L322.0 162.7L326.2 161.2L328.4 158.8L330.1 156.8L333.4 151.3L335.4 146.4L336.2 140.1L335.6 137.7L333.7 129.8L334.0 123.9L336.4 111.1L338.3 105.5L342.1 100.9L347.1 98.0L365.2 91.9L379.0 87.2L384.6 85.3L389.5 82.9L391.8 80.6L398.3 74.3L403.0 71.3L404.5 71.3L405.8 71.7L408.4 73.1L415.8 78.8L422.7 85.5L425.8 90.7L427.6 94.4L430.0 96.9L431.6 97.2L439.9 98.9L442.0 98.4L442.3 96.6L442.2 90.8L441.9 88.6L441.3 87.2L440.9 85.8L441.1 83.5L452.6 66.1L453.9 65.0L455.1 64.0L458.5 63.8L465.2 66.3L467.3 66.1L467.1 64.4L465.7 62.1L465.4 59.8L468.6 58.1L470.8 58.8L472.6 60.6L474.6 61.1L475.5 60.1L477.4 57.8L480.8 60.2L484.8 60.1L492.9 58.0L495.5 59.3L505.2 59.1L512.0 61.0L515.3 61.2L518.2 59.3L521.0 55.9L523.6 54.4L542.5 42.9L546.5 42.0L554.2 42.1L555.6 41.8L562.2 36.1L564.3 35.1L566.7 35.7L577.1 41.0L583.4 43.2L586.9 43.6L589.9 44.0L596.6 42.8L623.4 31.6L628.5 26.3L630.2 26.0L631.1 27.3L631.2 31.7L631.8 33.6L634.7 36.9L637.8 39.2L641.2 40.5L645.0 40.8L664.2 66.5L671.5 72.0L674.1 79.4L676.5 83.5L677.1 84.6L681.2 88.6L698.0 100.7L699.8 101.6L709.3 106.4L715.1 107.7L716.0 108.4L716.7 109.6L717.5 110.6L718.8 111.1L727.7 110.8L729.7 111.0L730.5 112.0L731.0 113.7L731.7 115.5L733.2 116.7L734.5 116.6L737.5 115.6L738.6 115.7L740.8 117.1L741.9 118.4L742.2 120.3L742.4 123.8L744.0 126.7L744.5 129.5L744.8 135.7L746.3 141.7L748.3 147.6L748.6 149.4L748.6 153.3L749.1 155.2L749.9 156.2L752.2 157.4L753.1 158.4L754.3 161.5L756.4 170.4L760.5 180.2L761.7 182.1L763.8 183.0L768.4 183.3L770.5 184.3L773.9 189.7L774.1 195.8L771.9 201.9L769.4 206.0L767.7 208.8L766.4 212.5L765.8 213.8L764.7 214.5L761.7 215.4L760.7 216.3L759.8 219.3L759.2 222.9L759.0 226.6L759.3 230.1L760.0 231.5L761.8 234.4L762.3 236.2L762.1 237.7L761.2 242.0L761.3 246.0L761.8 264.2L762.0 265.4L763.2 268.1L763.4 269.6L762.9 270.8L760.7 273.6L760.0 275.2L760.4 280.8L761.4 286.2L760.7 291.0L756.1 294.7L738.4 293.3L732.8 294.4L729.7 294.9L726.1 298.1L723.9 300.0L722.1 307.3L721.1 328.8L719.2 338.8L717.0 344.1L714.9 345.6L712.4 344.3L708.9 341.2L707.4 339.2L706.6 337.1L705.6 335.9L703.2 335.1L700.2 335.9L699.6 337.8L699.7 340.1L699.3 342.2L696.0 346.6L692.6 349.4L689.0 350.8L684.7 351.1L678.3 350.1L675.3 350.2L671.5 351.3L668.8 352.0L665.7 352.4L659.9 352.1L657.7 351.3L653.6 348.6L651.9 347.7L649.4 347.5L644.5 348.4L640.8 348.5L639.2 349.6L638.0 349.4L637.3 345.1L636.8 344.1L635.0 343.6L629.1 342.8L621.8 340.4L619.5 340.2L618.0 340.0L613.6 340.4L609.2 342.4L602.2 348.8L598.1 350.3L596.7 349.8L590.2 346.3L589.4 344.2L588.8 343.0L587.4 342.4L584.6 345.2L583.7 345.9L571.3 349.6L565.4 352.8L563.6 354.2L560.4 356.6L558.9 358.3L558.1 360.8L557.9 365.1L557.5 367.9L554.9 371.9L547.9 378.7L545.3 383.5L538.0 388.8L536.0 391.2L535.7 393.3L535.7 396.1L535.0 399.1L532.5 401.6L530.9 402.0L527.0 402.9L516.9 400.6L511.4 403.1L510.6 407.5L509.8 408.9L506.1 409.1L505.0 409.3L503.0 410.9L498.5 415.5L496.8 416.6L491.4 415.5L482.8 407.7L467.2 405.5L462.5 405.6L457.9 407.7L450.8 414.9L447.8 416.6L441.2 418.0L434.5 418.0L431.6 417.4L424.5 415.9L419.4 415.6L405.6 419.8L377.1 421.0L377.0 414.1L375.4 409.2L372.2 406.0L362.5 403.1L352.3 401.6L348.3 402.6L341.9 408.1L338.4 409.5L333.5 408.4L331.5 406.7L328.9 404.4L326.1 398.4L322.4 383.5L318.6 366.5L316.6 362.3L314.5 360.7L312.8 360.4L309.9 360.5L307.2 360.2L305.7 359.5L301.7 357.6L300.3 354.1L300.5 349.5L299.5 343.6L296.4 337.6L289.2 327.3L286.8 320.7L283.5 306.7L282.4 298.9L283.2 293.3L286.0 294.2L288.8 292.4L291.3 289.2L293.2 285.7L294.5 281.3L294.6 277.8L293.4 274.6L291.1 271.3L289.6 270.4L286.4 269.8L285.0 268.6L284.6 267.2L284.2 263.0L283.6 261.0L281.1 256.2L279.6 254.7L277.4 253.7L276.1 249.8L276.6 242.8L275.9 239.1L285.4 237.1L288.2 235.9L290.8 234.3L292.5 232.6L293.5 229.9L293.5 227.6L289.4 215.6L288.4 210.0L286.8 191.2L287.4 188.5L289.0 185.0L290.9 182.5L295.4 178.1L296.7 175.8L296.5 174.1L296.2 170.4L294.6 163.9L294.7 162.5L294.9 158.1L299.8 155.1Z"], + baglam: [], + }, + "arnavutluk": { + ad: "Arnavutluk", + proje: { ax: 98.5649, bx: -1461.5128, ay: -130.89, by: 5609.089 }, + ulke: ["M565.7 128.3L563.2 129.8L563.1 132.0L563.8 136.0L564.0 137.9L563.4 139.9L561.2 142.1L560.2 143.4L559.4 145.1L559.1 146.5L559.9 156.0L560.4 158.8L562.5 164.8L562.5 166.0L562.0 167.4L561.1 168.2L559.8 169.0L558.4 169.6L553.6 170.7L553.9 172.5L553.6 176.0L554.3 178.0L555.4 178.5L557.3 181.3L557.8 182.7L558.0 184.8L558.9 186.1L560.5 186.4L562.4 188.5L562.9 189.9L563.0 191.9L562.3 194.1L561.4 195.9L560.1 197.5L558.7 198.4L557.3 197.9L556.9 200.5L557.4 204.7L559.1 211.8L560.3 215.1L564.0 220.3L565.5 223.3L566.0 226.3L566.0 228.6L566.7 230.4L568.7 231.3L570.8 231.8L572.0 231.8L573.2 231.9L574.2 232.7L575.2 234.9L577.1 243.4L579.1 250.9L580.5 254.0L581.8 255.1L582.8 256.0L585.3 256.5L587.0 255.8L590.3 253.0L592.2 252.6L597.5 253.3L602.4 254.8L604.1 256.4L604.9 258.8L604.9 262.3L605.1 268.5L604.5 271.3L602.8 273.3L603.8 274.1L604.3 276.2L607.6 279.8L610.2 283.1L611.2 284.9L611.8 287.2L612.0 289.8L611.6 292.2L610.6 296.7L610.4 298.2L610.2 300.3L609.7 301.6L608.1 302.9L607.2 303.7L606.5 305.0L605.3 305.4L604.2 306.1L603.6 307.3L603.7 308.9L603.1 310.3L602.1 311.6L599.7 313.3L597.5 312.8L595.2 311.7L592.6 311.8L591.3 312.6L590.7 313.8L590.3 315.0L589.5 316.3L586.6 317.3L585.7 318.3L585.6 319.5L586.0 323.1L586.1 324.4L585.7 326.0L585.3 327.1L584.2 329.2L582.7 333.0L581.6 334.4L580.5 335.0L579.5 335.8L578.7 337.1L578.2 340.0L578.5 342.7L578.4 345.3L577.3 348.5L575.3 349.4L574.8 350.9L575.2 352.3L575.6 355.4L574.0 360.3L572.9 361.7L570.4 362.9L566.7 364.7L564.3 364.9L559.1 364.1L557.3 364.6L555.7 365.5L552.4 365.1L550.6 366.0L549.3 367.6L548.1 369.6L547.3 372.0L546.9 374.3L545.3 374.7L540.3 374.8L539.1 375.2L539.6 376.2L541.1 384.2L544.0 387.3L548.5 395.0L548.9 397.3L548.1 399.9L546.4 401.7L544.7 401.5L543.0 400.5L539.3 399.0L538.2 398.8L536.7 400.1L537.5 401.2L537.7 402.9L537.1 404.5L537.9 406.3L538.5 407.8L539.3 409.1L539.0 410.5L537.7 412.2L535.8 413.3L534.3 414.7L534.0 417.6L532.3 416.8L530.7 417.1L529.9 417.9L529.8 419.9L527.9 421.0L525.9 420.0L523.1 417.4L518.6 415.0L514.7 413.7L511.4 412.6L509.8 413.6L508.7 414.5L508.2 412.6L508.5 410.4L510.1 406.4L508.4 405.7L509.4 401.9L511.2 395.4L511.4 393.8L510.7 391.1L509.7 390.3L508.2 390.2L506.0 389.4L505.7 388.0L504.0 386.7L501.3 386.3L500.6 384.9L502.0 383.1L503.0 382.1L504.0 381.3L502.3 379.7L497.6 370.6L497.0 368.9L496.3 367.6L492.4 366.9L490.8 366.6L489.7 366.0L490.5 365.2L487.8 363.3L487.3 364.5L486.4 363.4L485.1 362.4L484.2 360.3L483.4 359.1L482.1 358.3L475.6 356.2L470.1 352.8L467.0 349.9L461.4 348.0L458.2 345.5L448.8 334.8L447.7 333.0L447.2 331.9L445.9 326.1L445.2 324.5L441.7 321.0L440.5 319.4L439.8 318.5L442.4 316.2L444.0 316.0L445.5 317.1L449.1 321.5L450.0 322.9L451.3 326.0L451.8 327.9L452.1 329.7L455.0 329.8L457.1 328.8L458.0 327.9L458.7 316.0L458.4 314.1L455.9 312.6L452.5 309.1L449.8 305.2L449.3 302.4L450.3 304.2L450.5 305.3L452.1 305.1L454.0 307.3L455.2 306.6L455.8 304.1L456.0 301.0L454.8 298.5L452.2 297.1L449.8 297.8L449.3 301.4L448.6 299.4L441.8 289.1L441.2 288.0L441.7 286.4L443.1 285.2L444.6 284.0L445.9 282.6L446.8 280.6L447.1 278.4L447.3 270.6L447.6 268.5L448.5 267.1L450.3 266.5L451.3 266.1L451.0 264.9L450.3 263.7L450.4 261.8L451.1 260.8L452.1 259.8L451.3 258.3L449.8 256.3L448.8 254.6L449.6 253.9L451.1 253.3L453.1 250.5L454.7 249.3L453.3 250.9L454.1 253.9L453.3 256.6L453.3 259.3L454.4 257.4L454.7 259.3L456.0 257.5L461.2 255.0L462.8 253.0L463.0 249.8L461.9 247.2L460.6 244.8L460.1 242.3L459.7 245.6L458.5 248.6L456.0 252.5L455.4 251.2L456.4 250.1L457.5 248.3L458.3 245.9L458.0 243.1L455.9 241.8L454.6 239.9L455.1 238.6L456.2 228.6L455.7 226.5L454.7 224.6L456.9 222.8L457.3 221.3L457.3 219.5L457.4 218.0L461.4 211.5L462.1 209.0L461.8 206.4L460.8 204.1L459.3 202.5L457.7 201.9L455.6 201.9L453.8 201.5L452.5 200.4L452.1 197.9L452.1 192.5L451.7 191.3L450.3 190.0L450.0 188.5L451.3 190.2L453.5 190.1L455.1 188.3L454.7 184.9L457.0 183.6L459.4 181.6L461.4 178.9L462.1 175.4L461.9 173.2L460.1 172.1L458.8 171.4L457.4 170.1L455.8 167.4L454.7 166.0L463.3 167.1L466.1 166.3L468.9 161.5L469.6 162.9L470.7 163.8L470.9 159.9L469.5 159.8L469.1 158.7L466.2 156.1L468.2 152.6L468.0 148.5L467.5 144.1L467.5 141.8L469.3 142.4L470.3 140.7L470.3 137.9L469.5 135.4L457.1 130.6L455.7 129.7L453.9 128.9L447.2 131.0L447.1 129.7L447.2 126.2L446.4 124.8L445.5 124.0L445.3 122.0L445.8 120.7L445.4 116.7L446.7 116.2L447.8 113.5L447.1 112.6L446.1 110.6L445.8 108.1L445.9 105.5L446.4 103.2L448.2 99.3L447.9 98.1L446.2 96.0L440.6 91.9L439.0 90.2L438.0 88.1L438.3 86.7L441.2 83.6L450.7 69.1L450.7 66.6L451.8 63.5L457.4 57.0L458.7 54.8L460.6 53.6L462.3 51.8L463.6 49.6L464.8 47.1L465.4 45.1L466.5 44.1L468.0 43.3L469.2 42.0L469.7 40.4L470.3 37.0L470.9 35.2L472.5 32.5L475.1 29.5L476.1 28.6L477.9 27.1L480.1 26.0L482.4 27.1L483.9 30.0L484.8 33.3L484.8 34.6L484.9 35.9L483.6 38.1L483.2 41.0L483.6 43.1L485.3 47.1L488.5 49.6L490.2 50.4L492.0 50.7L493.6 50.2L497.3 48.0L498.2 47.1L500.7 45.4L505.5 45.6L508.0 44.9L511.5 40.2L513.7 38.7L516.2 40.1L518.2 42.3L523.1 45.0L524.8 47.1L527.6 53.7L529.5 55.7L530.0 56.7L528.9 59.3L529.2 61.0L530.8 62.3L531.6 64.1L531.4 65.9L532.4 68.9L533.2 69.8L534.4 70.0L541.1 69.8L542.6 70.1L554.8 78.9L556.5 80.7L557.3 81.5L559.1 84.1L562.9 92.1L563.9 95.5L564.2 97.9L564.2 102.1L564.8 104.5L567.9 112.5L568.4 115.1L568.9 116.9L568.9 118.5L567.8 120.9L567.0 122.0L565.7 123.2L565.2 124.8L565.7 127.3Z"], + baglam: [], + }, +}; diff --git a/src/lib/harita-ulkeler.ts b/src/lib/harita-ulkeler.ts new file mode 100644 index 0000000..d9359f7 --- /dev/null +++ b/src/lib/harita-ulkeler.ts @@ -0,0 +1,115 @@ +// Türkiye dışındaki (KKTC ve yurtdışı) üniversitelerin ülke haritası çözümü. +// Kontür verisi harita-ulkeler-verisi.ts'te (scripts/ulke-harita-uret.ts üretir). + +import { + ULKE_HARITALARI, + type UlkeKodu, + type UlkeHarita, +} from "./harita-ulkeler-verisi"; + +export { + ULKE_HARITALARI, + ULKE_HARITA_GENISLIK, + ULKE_HARITA_YUKSEKLIK, +} from "./harita-ulkeler-verisi"; +export type { UlkeKodu, UlkeHarita } from "./harita-ulkeler-verisi"; + +/** Schema.org addressCountry için ISO 3166-1 alpha-2 kodları. */ +export const ULKE_ISO: Record = { + kktc: "CY", + azerbaycan: "AZ", + kirgizistan: "KG", + kazakistan: "KZ", + "bosna-hersek": "BA", + makedonya: "MK", + arnavutluk: "AL", +}; + +type Sehir = { ulke: UlkeKodu; ad: string }; + +/** DB'deki il değerlerinden ve düzeltme tablosundan şehir anahtarları. */ +const SEHIRLER: Record = { + GİRNE: { ulke: "kktc", ad: "Girne" }, + LEFKOŞA: { ulke: "kktc", ad: "Lefkoşa" }, + GAZİMAĞUSA: { ulke: "kktc", ad: "Gazimağusa" }, + GÜZELYURT: { ulke: "kktc", ad: "Güzelyurt" }, + LEFKE: { ulke: "kktc", ad: "Lefke" }, + "BAKÜ-AZERBAYCAN": { ulke: "azerbaycan", ad: "Bakü" }, + "BİŞKEK-KIRGIZİSTAN": { ulke: "kirgizistan", ad: "Bişkek" }, + "TÜRKİSTAN-KAZAKİSTAN": { ulke: "kazakistan", ad: "Türkistan" }, + "SARAYBOSNA - BOSNA - HERSEK": { ulke: "bosna-hersek", ad: "Saraybosna" }, + ÜSKÜP: { ulke: "makedonya", ad: "Üsküp" }, + TİRAN: { ulke: "arnavutluk", ad: "Tiran" }, +}; + +/** + * Kaynak verideki gürültü için üniversite adına göre düzeltme: + * - Uluslararası Balkan Üniversitesi Üsküp'tedir; YÖK Atlas satırlarının + * çoğu il'i yanlışlıkla "SARAYBOSNA - BOSNA - HERSEK" der. + * - Tiran New York Üniversitesi'nin il alanı boştur. + * - ODTÜ ve ASBÜ'nün KKTC kampüs satırları vardır ama ana kampüs Türkiye'de; + * null → Türkiye haritasında kalır. + * Anahtar: uniAdiNormalize edilmiş adın tr-TR büyük harf hali. + */ +const UNI_DUZELTME: Record = { + "ULUSLARARASI BALKAN ÜNİVERSİTESİ": "ÜSKÜP", + "TİRAN NEW YORK ÜNİVERSİTESİ": "TİRAN", + "KIBRIS AYDIN ÜNİVERSİTESİ": "GİRNE", // il alanı yalnızca "KIBRIS" + "ORTA DOĞU TEKNİK ÜNİVERSİTESİ": null, + "ANKARA SOSYAL BİLİMLER ÜNİVERSİTESİ": null, +}; + +/** il değeri Türkiye dışını mı gösteriyor? ("KIBRIS" genel değeri dahil) */ +const YURTDISI_IL = new Set([...Object.keys(SEHIRLER), "KIBRIS"]); + +export type UlkeKonum = { + ulke: UlkeKodu; + ulkeAd: string; + iso: string; + harita: UlkeHarita; + /** Şehir adı; genel "KIBRIS" gibi şehri bilinmeyen durumda null */ + sehir: string | null; +}; + +function sehirdenKonum(anahtar: keyof typeof SEHIRLER): UlkeKonum { + const sehir = SEHIRLER[anahtar]; + const harita = ULKE_HARITALARI[sehir.ulke]; + return { + ulke: sehir.ulke, + ulkeAd: harita.ad, + iso: ULKE_ISO[sehir.ulke], + harita, + sehir: sehir.ad, + }; +} + +/** + * Üniversite Türkiye dışındaysa ülke haritası + şehir konumu döner; + * Türkiye'deyse (veya çözülemiyorsa) null — Türkiye haritası kullanılır. + */ +export function uniUlkeKonum( + universite: string, + il: string | null, +): UlkeKonum | null { + const ad = universite + .replace(/\s*\([^)]*\)\s*$/, "") + .trim() + .toLocaleUpperCase("tr-TR"); + + if (ad in UNI_DUZELTME) { + const anahtar = UNI_DUZELTME[ad]; + return anahtar === null ? null : sehirdenKonum(anahtar); + } + if (!il || !YURTDISI_IL.has(il)) return null; + if (il in SEHIRLER) return sehirdenKonum(il as keyof typeof SEHIRLER); + + // il "KIBRIS": ülke bilinir, şehir bilinmez — haritayı işaretsiz göster + const harita = ULKE_HARITALARI.kktc; + return { + ulke: "kktc", + ulkeAd: harita.ad, + iso: ULKE_ISO.kktc, + harita, + sehir: null, + }; +} diff --git a/src/lib/katalog.ts b/src/lib/katalog.ts index 7cbfb48..a2ebbf8 100644 --- a/src/lib/katalog.ts +++ b/src/lib/katalog.ts @@ -259,16 +259,23 @@ export function getAllUniversiteler(): UniOzet[] { const map = uniMapGetir(); const rows = getDb() .prepare( - `SELECT universite, MAX(il) AS il, MAX(unitur) AS unitur, - COUNT(*) AS adet + `SELECT universite, MAX(unitur) AS unitur, COUNT(*) AS adet FROM programs GROUP BY universite`, ) .all() as { universite: string; - il: string | null; unitur: string | null; adet: number; }[]; + // il: MAX(il) alfabetik en büyüğü seçip yanıltıyordu (ör. Ankara Sosyal + // Bilimler'in 12 KKTC satırı 47 Ankara satırını eziyordu); üniversitenin + // en çok programının bulunduğu il esas alınır. + const ilRows = getDb() + .prepare( + `SELECT universite, il, COUNT(*) AS adet FROM programs + WHERE il IS NOT NULL GROUP BY universite, il`, + ) + .all() as { universite: string; il: string; adet: number }[]; // Fakülte sayısı: aynı üniversitenin iki yazımı ("X ÜNİV." / "X ÜNİV. (İL)") // birleştiği için GROUP BY universite üzerinden saymak çift sayardı; // (slug, fakulte) çifti üzerinden kesin sayılır. @@ -296,9 +303,30 @@ export function getAllUniversiteler(): UniOzet[] { if (!slug) continue; const u = bySlug.get(slug)!; u.programSayisi += row.adet; - if (!u.il && row.il) u.il = row.il; if (!u.unitur && row.unitur) u.unitur = row.unitur; } + const ilAdetleri = new Map>(); + for (const row of ilRows) { + const slug = slugByHam.get(row.universite); + if (!slug) continue; + let sayac = ilAdetleri.get(slug); + if (!sayac) { + sayac = new Map(); + ilAdetleri.set(slug, sayac); + } + sayac.set(row.il, (sayac.get(row.il) ?? 0) + row.adet); + } + for (const [slug, sayac] of ilAdetleri) { + let enIyi: string | null = null; + let enCok = 0; + for (const [il, adet] of sayac) { + if (adet > enCok) { + enIyi = il; + enCok = adet; + } + } + bySlug.get(slug)!.il = enIyi; + } const fakulteSetleri = new Map>(); for (const row of fakulteRows) { const slug = slugByHam.get(row.universite);