// turkey-map-react SVG uzayı (viewBox 0 0 1050 585) ile coğrafi koordinatlar // arasındaki dönüşüm ve üniversite konum çözümü. // // Afin katsayılar, 81 il path'inin bbox merkezleri ile il merkezlerinin // (lat, lng) değerleri arasında en küçük kareler uyumuyla hesaplanıp // sabitlendi; ölçek doğrulaması: ~0.6 px/km her iki eksende de tutarlı. import { UNI_KOORDINAT, IL_MERKEZ, type LatLng } from "./uni-koordinatlar"; export const HARITA_GENISLIK = 1050; export const HARITA_YUKSEKLIK = 585; /** Ülke çizimi y≈144'te başlıyor; üstteki ölü bant her haritada kırpılır. */ export const HARITA_UST_KIRPMA = 138; export function latLngToXy([lat, lng]: LatLng): { x: number; y: number } { return { x: 52.5215 * lng - 1332.1743, y: -65.4185 * lat + 2917.4061, }; } /** Harita il adını DB formatına çevirir: "Hakkâri" → "HAKKARİ". */ export function normalizeIlAdi(name: string): string { return name .toLocaleUpperCase("tr-TR") .replace(/Â/g, "A") .replace(/Î/g, "İ") .replace(/Û/g, "U"); } /** DB'deki üniversite adının "(İL)" ekini ayıklar. */ export function uniAdiNormalize(ad: string): string { return ad.replace(/\s*\([^)]*\)\s*$/, "").trim(); } export type UniKonum = { x: number; y: number; /** true: kampüs koordinatı; false: il merkezine düşen yaklaşık konum */ kesin: boolean; }; /** * Üniversitenin harita üzerindeki konumu. Sıra: "AD|İL" → "AD" → il merkezi. * KKTC ve yurtdışı kampüsler için null (harita dışı). */ export function uniKonum(universite: string, il: string | null): UniKonum | null { const ad = uniAdiNormalize(universite); const koord = (il ? UNI_KOORDINAT[`${ad}|${il}`] : undefined) ?? UNI_KOORDINAT[ad]; if (koord) return { ...latLngToXy(koord), kesin: true }; const merkez = il ? IL_MERKEZ[il] : undefined; if (merkez) return { ...latLngToXy(merkez), kesin: false }; return null; } /** İl merkezinin harita konumu (kilitli/adsız pinler için). */ export function ilKonum(il: string | null): { x: number; y: number } | null { const merkez = il ? IL_MERKEZ[il] : undefined; return merkez ? latLngToXy(merkez) : null; }