# Riyadh Districts Database
# Contains district names (English & Arabic), coordinates (lat, lng)
# Sourced from alioh/Saudi-Districts-Dataset
RIYADH_DISTRICTS = {
"Ad Dar Al Baida": {"name_ar": "دار البيضاء", "lat": 24.566842, "lng": 46.790295},
"Ad Dhubbat": {"name_ar": "الضباط", "lat": 24.679383, "lng": 46.721847},
"Ad Dirah": {"name_ar": "الديرة", "lat": 24.573161, "lng": 46.847922},
"Ad Diriyah": {"name_ar": "الدرعية", "lat": 24.74862, "lng": 46.53538},
"Ad Duraihimiyah": {"name_ar": "الدريهمية", "lat": 24.590332, "lng": 46.695121},
"Al Aarid": {"name_ar": "العارض", "lat": 24.898154, "lng": 46.600623},
"Al Amal": {"name_ar": "العمل", "lat": 24.647275, "lng": 46.721814},
"Al Andalus": {"name_ar": "الأندلس", "lat": 24.745224, "lng": 46.788379},
"Al Aqiq": {"name_ar": "العقيق", "lat": 24.775692, "lng": 46.629516},
"Al Awali": {"name_ar": "العوالي", "lat": 24.55957994, "lng": 46.609661},
"Al Badi'ah": {"name_ar": "البديعة", "lat": 24.634622, "lng": 46.685165},
"Al Bateiha": {"name_ar": "البطيحا", "lat": 24.623417, "lng": 46.719613},
"Al Dobah": {"name_ar": "الدوبية", "lat": 24.621563, "lng": 46.711001},
"Al Faisaliyah - Ad Diriyah": {"name_ar": "الفيصلية - الدرعية", "lat": 24.7508334, "lng": 46.57687369},
"Al Faisaliyyah": {"name_ar": "الفيصلية", "lat": 24.638318, "lng": 46.779262},
"Al Fakhiriyyah": {"name_ar": "الفاخرية", "lat": 24.643702, "lng": 46.682296},
"Al Falah": {"name_ar": "الفلاح", "lat": 24.79805, "lng": 46.708355},
"Al Faruq": {"name_ar": "الفاروق", "lat": 24.658135, "lng": 46.77268},
"Al Fayha": {"name_ar": "الفيحاء", "lat": 24.684169, "lng": 46.811291},
"Al Futah": {"name_ar": "الفوطة", "lat": 24.643228, "lng": 46.710529},
"Al Ghadir": {"name_ar": "الغدير", "lat": 24.772627, "lng": 46.652865},
"Al Hada": {"name_ar": "الهدا", "lat": 24.66127494, "lng": 46.64148067},
"Al Haeer": {"name_ar": "الحائر", "lat": 24.438205, "lng": 46.841267},
"Al Hamra": {"name_ar": "الحمراء", "lat": 24.776654, "lng": 46.751945},
"Al Hazm": {"name_ar": "الحزم", "lat": 24.53961, "lng": 46.645542},
"Al Iskan": {"name_ar": "الإسكان", "lat": 24.57131, "lng": 46.846304},
"Al Izdihar": {"name_ar": "الازدهار", "lat": 24.783203, "lng": 46.717036},
"Al Jaradiyah": {"name_ar": "الجرادية", "lat": 24.615772, "lng": 46.696974},
"Al Khaleej": {"name_ar": "الخليج", "lat": 24.778177, "lng": 46.802836},
"Al Khalidiyyah": {"name_ar": "الخالدية", "lat": 24.624695, "lng": 46.753851},
"Al Khuzama": {"name_ar": "الخزامى", "lat": 24.711176, "lng": 46.60651},
"Al Mahdiyah": {"name_ar": "المهدية", "lat": 24.65066116, "lng": 46.50224653},
"Al Maizilah": {"name_ar": "المعزيلة", "lat": 24.79398923, "lng": 46.85000625},
"Al Malaz": {"name_ar": "الملز", "lat": 24.666453, "lng": 46.733141},
"Al Malqa": {"name_ar": "الملقا", "lat": 24.799829, "lng": 46.597227},
"Al Malqa - Ad Diriyah": {"name_ar": "الملقاه - الدرعية", "lat": 24.81725025, "lng": 46.54431556},
"Al Manakh": {"name_ar": "المناخ", "lat": 24.609322, "lng": 46.801097},
"Al Manar": {"name_ar": "المنار", "lat": 24.725786, "lng": 46.795964},
"Al Mansourah": {"name_ar": "المنصورة", "lat": 24.519665, "lng": 46.798574},
"Al Marqab": {"name_ar": "المرقب", "lat": 24.638344, "lng": 46.723345},
"Al Masani": {"name_ar": "المصانع", "lat": 24.57616368, "lng": 46.73452502},
"Al Maseef": {"name_ar": "المصيف", "lat": 24.767072, "lng": 46.680414},
"Al Mathar Ash Shamali": {"name_ar": "المعذر الشمالي", "lat": 24.68972315, "lng": 46.66727337},
"Al Mohammadiyyah": {"name_ar": "المحمدية", "lat": 24.732801, "lng": 46.649029},
"Al Munsiyah": {"name_ar": "المونسية", "lat": 24.832128, "lng": 46.767119},
"Al Mursalat": {"name_ar": "المرسلات", "lat": 24.753535, "lng": 46.68867},
"Al Muruj": {"name_ar": "المروج", "lat": 24.757634, "lng": 46.661267},
"Al Mutamarat": {"name_ar": "المؤتمرات", "lat": 24.672195, "lng": 46.685886},
"Al Olaya": {"name_ar": "العليا", "lat": 24.693947, "lng": 46.683598},
"Al Olaya - Al-Ma'ather": {"name_ar": "العليا - المعذر", "lat": 24.694934, "lng": 46.67517689},
"Al Olaya - Al-Malaz - Albatha": {"name_ar": "العليا - الملز والبطحاء", "lat": 24.6778297, "lng": 46.69702466},
"Al Oud": {"name_ar": "العود", "lat": 24.624087, "lng": 46.726742},
"Al Qari": {"name_ar": "القرى", "lat": 24.628658, "lng": 46.714833},
"Al Quds": {"name_ar": "القدس", "lat": 24.753675, "lng": 46.752347},
"Al Raed": {"name_ar": "الرائد", "lat": 24.706093, "lng": 46.635637},
"Al Rayyan": {"name_ar": "الريان", "lat": 24.713411, "lng": 46.776915},
"Al Ruqiyah - Ad Diriyah": {"name_ar": "الروقية (سمحان) - الدرعية", "lat": 24.74074872, "lng": 46.56963947},
"Al Safarat": {"name_ar": "السفارات", "lat": 24.681001, "lng": 46.620863},
"Al Salmaniya - Ad Diriyah": {"name_ar": "السلمانية - الدرعية", "lat": 24.78717466, "lng": 46.56223378},
"Al Sharafeyah": {"name_ar": "الشرفية", "lat": 24.658866, "lng": 46.667618},
"Al Shemaysi": {"name_ar": "الشميسي", "lat": 24.62413794, "lng": 46.69826453},
"Al Sina'iyah": {"name_ar": "الصناعية", "lat": 24.64405, "lng": 46.746166},
"Al Surayheah - Ad Diriyah": {"name_ar": "السرحية - الدرعية", "lat": 24.72721861, "lng": 46.57648928},
"Al Thlema - Ad Diriyah": {"name_ar": "الثليما - الدرعية", "lat": 24.76249755, "lng": 46.55894006},
"Al Traif - Ad Diriyah": {"name_ar": "الطريف - الدرعية", "lat": 24.73832689, "lng": 46.5688199},
"Al Uraija": {"name_ar": "العريجاء", "lat": 24.629573, "lng": 46.655988},
"Al Uraija Al Gharbiyah": {"name_ar": "العريجاء الغربية", "lat": 24.59063276, "lng": 46.59988656},
"Al Uraija Al Wusta": {"name_ar": "العريجاء الوسطى", "lat": 24.60792088, "lng": 46.63790741},
"Al Uyaynah & Al Jubaylah": {"name_ar": "العيينة والجبيلة", "lat": 24.86321382, "lng": 46.39792471},
"Al Wadi": {"name_ar": "الوادي", "lat": 24.789772, "lng": 46.690454},
"Al Wahah": {"name_ar": "الواحة", "lat": 24.741978, "lng": 46.715933},
"Al Wisham": {"name_ar": "الوشام", "lat": 24.643231, "lng": 46.697182},
"Al Wizarat": {"name_ar": "الوزارات", "lat": 24.678217, "lng": 46.712638},
"Al Wurud": {"name_ar": "الورود", "lat": 24.725225, "lng": 46.677357},
"Al Wusaita": {"name_ar": "الوسيطا", "lat": 24.62772, "lng": 46.715387},
"Al Yamamah": {"name_ar": "اليمامة", "lat": 24.598163, "lng": 46.716532},
"Al Yarmuk": {"name_ar": "اليرموك", "lat": 24.809435, "lng": 46.781743},
"Al Yasmin": {"name_ar": "الياسمين", "lat": 24.829554, "lng": 46.641144},
"Al Zahra": {"name_ar": "الزهرة", "lat": 24.579737, "lng": 46.645615},
"An Nada": {"name_ar": "الندى", "lat": 24.806224, "lng": 46.6819},
"An Nafal": {"name_ar": "النفل", "lat": 24.782669, "lng": 46.673148},
"An Nahdah": {"name_ar": "النهضة", "lat": 24.765098, "lng": 46.81501},
"An Nakheel": {"name_ar": "النخيل", "lat": 24.746455, "lng": 46.63723},
"An Namudhajiyah": {"name_ar": "النموذجيه", "lat": 24.658387, "lng": 46.694247},
"An Narjis": {"name_ar": "النرجس", "lat": 24.877773, "lng": 46.645736},
"An Nasim Al-Gharbi": {"name_ar": "النسيم الغربي", "lat": 24.72504219, "lng": 46.82868785},
"An Nasim Ash Sharqi": {"name_ar": "النسيم الشرقي", "lat": 24.74301104, "lng": 46.84032936},
"An Nasiriyah": {"name_ar": "الناصرية", "lat": 24.655247, "lng": 46.679583},
"Ar Rabi": {"name_ar": "الربيع", "lat": 24.797832, "lng": 46.661065},
"Ar Rabwah": {"name_ar": "الربوة", "lat": 24.700069, "lng": 46.753763},
"Ar Rafiah": {"name_ar": "الرفيعة", "lat": 24.640535, "lng": 46.660677},
"Ar Rawdah": {"name_ar": "الروضة", "lat": 24.735057, "lng": 46.765943},
"Ar Rimal": {"name_ar": "الرمال", "lat": 24.869555, "lng": 46.81836},
"As Saadah": {"name_ar": "السعادة", "lat": 24.698475, "lng": 46.838954},
"As Safa": {"name_ar": "الصفاء", "lat": 24.666983, "lng": 46.764231},
"As Sahafah": {"name_ar": "الصحافة", "lat": 24.801021, "lng": 46.63835},
"As Salam": {"name_ar": "السلام", "lat": 24.70865643, "lng": 46.81332627},
"As Salhiyah": {"name_ar": "الصالحية", "lat": 24.63393, "lng": 46.73298},
"As Sulay": {"name_ar": "السلي", "lat": 24.655667, "lng": 46.84701},
"As Sulimaniyah": {"name_ar": "السليمانية", "lat": 24.69749, "lng": 46.70808},
"As Suwaidi": {"name_ar": "السويدي", "lat": 24.594635, "lng": 46.672686},
"As Suwaidi Al Gharabi": {"name_ar": "السويدي الغربي", "lat": 24.576271, "lng": 46.624529},
"Ash Shamal": {"name_ar": "الشمال", "lat": 25.02867041, "lng": 46.84639687},
"Ash Sharq": {"name_ar": "الشرق", "lat": 24.873552, "lng": 46.848662},
"Ash Shifa": {"name_ar": "الشفاء", "lat": 24.56477, "lng": 46.697498},
"Ash Shuhada - Ad Diriyah": {"name_ar": "الشهداء - الدرعية", "lat": 24.71980434, "lng": 46.59002231},
"At Taawun": {"name_ar": "التعاون", "lat": 24.774575, "lng": 46.698681},
"Az Zahra": {"name_ar": "الزهراء", "lat": 24.687678, "lng": 46.729465},
"Badr": {"name_ar": "بدر", "lat": 24.52617, "lng": 46.724581},
"Banban": {"name_ar": "بنبان", "lat": 24.979926, "lng": 46.563881},
"Central Al Jubaylah": {"name_ar": "الجبيلة الوسطى", "lat": 24.89599522, "lng": 46.44749468},
"Central Al Uyaynah": {"name_ar": "العيينة الوسطى", "lat": 24.90469123, "lng": 46.38603673},
"Dahiat Namar": {"name_ar": "ضاحية نمار", "lat": 24.486974, "lng": 46.587028},
"Dhahrat Al Badi'ah": {"name_ar": "ظهرة البديعة", "lat": 24.598647, "lng": 46.649279},
"Dhahrat Laban": {"name_ar": "ظهرة لبن", "lat": 24.633398, "lng": 46.546091},
"Dhahrat Namar": {"name_ar": "ظهرة نمار", "lat": 24.561323, "lng": 46.610664},
"Dirab": {"name_ar": "ديراب", "lat": 24.512786, "lng": 46.617887},
"East Al Jubaylah": {"name_ar": "الجبيلة الشرقية", "lat": 24.9206444, "lng": 46.4538855},
"East Al Khalidiyyah - Ad Diriyah": {"name_ar": "الخالدية الشرقية - الدرعية", "lat": 24.75214414, "lng": 46.56652279},
"East Al Uyaynah": {"name_ar": "العيينة الشرقية", "lat": 24.8976846, "lng": 46.39762388},
"East Bodh": {"name_ar": "بوضة الشرقية", "lat": 24.88171025, "lng": 46.32257607},
"Ghubairah": {"name_ar": "غبيرة", "lat": 24.617412, "lng": 46.729339},
"Hada - Ma'athar": {"name_ar": "الهدا - المعذر", "lat": 24.68002162, "lng": 46.64340108},
"Hijrat Laban": {"name_ar": "هجرة وادي لبن", "lat": 24.64080178, "lng": 46.60788649},
"Hittin": {"name_ar": "حطين", "lat": 24.762741, "lng": 46.600873},
"Hyt": {"name_ar": "هيت", "lat": 24.48463, "lng": 46.968014},
"Imam Muhammad bin Saud University": {"name_ar": "جامعة الامام محمد بن سعود", "lat": 24.813256, "lng": 46.702761},
"Irqah": {"name_ar": "عرقة", "lat": 24.691151, "lng": 46.586998},
"Ishbiliyah": {"name_ar": "أشبيلية", "lat": 24.794375, "lng": 46.791282},
"Janadriah": {"name_ar": "الجنادرية", "lat": 24.82069, "lng": 46.864522},
"Jarir": {"name_ar": "جرير", "lat": 24.682338, "lng": 46.750052},
"Jubrah": {"name_ar": "جبرة", "lat": 24.625976, "lng": 46.718175},
"Kairouan": {"name_ar": "القيروان", "lat": 24.877907, "lng": 46.561604},
"Khashm Al Aan": {"name_ar": "خشم العان", "lat": 24.701097, "lng": 46.898542},
"King Abdulaziz": {"name_ar": "الملك عبدالعزيز", "lat": 24.719387, "lng": 46.722449},
"King Abdullah": {"name_ar": "الملك عبدالله", "lat": 24.734659, "lng": 46.742376},
"King Fahd": {"name_ar": "الملك فهد", "lat": 24.743288, "lng": 46.670085},
"King Faisal": {"name_ar": "الملك فيصل", "lat": 24.763416, "lng": 46.774542},
"King Khaled Airport": {"name_ar": "مطار الملك خالد", "lat": 24.816371, "lng": 46.698559},
"King Saud University": {"name_ar": "جامعة الملك سعود", "lat": 24.724559, "lng": 46.623133},
"Laban": {"name_ar": "لبن", "lat": 24.61321631, "lng": 46.57778352},
"Ma'athar": {"name_ar": "المعذر", "lat": 24.670023, "lng": 46.672216},
"Manfoha": {"name_ar": "منفوحة", "lat": 24.602697, "lng": 46.727884},
"Manfouhah Al Jadidah": {"name_ar": "منفوحة الجديدة", "lat": 24.612148, "lng": 46.718208},
"Marwah": {"name_ar": "المروه", "lat": 24.541427, "lng": 46.674484},
"Mikal": {"name_ar": "معكال", "lat": 24.623496, "lng": 46.714152},
"Mugharrazat": {"name_ar": "المغرزات", "lat": 24.76463, "lng": 46.725384},
"Nadheem": {"name_ar": "النظيم", "lat": 24.805005, "lng": 46.894393},
"Namar": {"name_ar": "نمار", "lat": 24.571124, "lng": 46.677346},
"North Ad Diriyah": {"name_ar": "الدرعية الشمالية", "lat": 24.83437911, "lng": 46.45395368},
"North Al Jubaylah": {"name_ar": "الجبيلة الشمالية", "lat": 24.90616546, "lng": 46.41234345},
"North Al Uyaynah": {"name_ar": "العيينة الشمالية", "lat": 24.90998486, "lng": 46.38011442},
"Nozha": {"name_ar": "النزهة", "lat": 24.756727, "lng": 46.706456},
"Okaz": {"name_ar": "عكاظ", "lat": 24.515849, "lng": 46.664346},
"Qadisiyah": {"name_ar": "القادسية", "lat": 24.820767, "lng": 46.823207},
"Qerioh - Ad Diriyah": {"name_ar": "قريوة - الدرعية", "lat": 24.74274643, "lng": 46.58017627},
"Rawabi": {"name_ar": "الروابي", "lat": 24.696845, "lng": 46.789128},
"Salah al-Din": {"name_ar": "صلاح الدين", "lat": 24.731187, "lng": 46.69605},
"Salam": {"name_ar": "سلام", "lat": 24.62123757, "lng": 46.70840417},
"Shubra": {"name_ar": "شبرا", "lat": 24.577851, "lng": 46.668191},
"Siyah": {"name_ar": "صياح", "lat": 24.608214, "lng": 46.701184},
"South Al Jubaylah": {"name_ar": "الجبيلة الجنوبية", "lat": 24.91208179, "lng": 46.46761841},
"Southern Capital - Ad Diriyah": {"name_ar": "العاصمه الجنوبية - الدرعية", "lat": 24.75706137, "lng": 46.57638816},
"Square": {"name_ar": "المربع", "lat": 24.663103, "lng": 46.707359},
"Sultanah - Ad Dirah": {"name_ar": "سلطانة - الديرة", "lat": 24.6100801, "lng": 46.6928688},
"Sultanah - Al Uraija": {"name_ar": "سلطانة - العريجاء", "lat": 24.60383722, "lng": 46.68939266},
"Taybah": {"name_ar": "طيبة", "lat": 24.543711, "lng": 46.829248},
"The King - Ad Diriyah": {"name_ar": "الملك - الدرعية", "lat": 24.77987017, "lng": 46.54813051},
"Thulaim": {"name_ar": "حي ثليم", "lat": 24.643405, "lng": 46.726853},
"Tuwaiq - Utaiqah": {"name_ar": "طويق - عتيقة", "lat": 24.58197054, "lng": 46.55650373},
"Tuwaiq- Irqah": {"name_ar": "طويق - عرقة", "lat": 24.58336556, "lng": 46.51957722},
"Uhud": {"name_ar": "أحد", "lat": 24.490836, "lng": 46.634581},
"Ulaishah": {"name_ar": "عليشة", "lat": 24.61712, "lng": 46.679387},
"Umm Al Hamam Al Gharbi": {"name_ar": "ام الحمام الغربي", "lat": 24.690389, "lng": 46.642723},
"Umm Al Hamam Al Sharqi - Ad Dirah": {"name_ar": "أم الحمام الشرقي - الديرة", "lat": 24.67259495, "lng": 46.66451986},
"Umm Al Hamam Al Sharqi - Al-Ma'ather": {"name_ar": "ام الحمام الشرقي - المعذر", "lat": 24.68637082, "lng": 46.65799044},
"Umm Salim": {"name_ar": "أم سليم", "lat": 24.635273, "lng": 46.697213},
"Uraidh": {"name_ar": "عريض", "lat": 24.46223, "lng": 46.767003},
"Utaiqah": {"name_ar": "عتيقة", "lat": 24.602432, "lng": 46.707206},
"West Ad Diriyah": {"name_ar": "الدرعية الغربية", "lat": 24.71767169, "lng": 46.47177178},
"West Al Jubaylah": {"name_ar": "الجبيلة الغربية", "lat": 24.8924634, "lng": 46.43723435},
"West Al Uyaynah": {"name_ar": "العيينة الغربية", "lat": 24.89566038, "lng": 46.37153135},
"West Bodh": {"name_ar": "بوضة الغربية", "lat": 24.9032911, "lng": 46.2747512},
"Al Rehab": {"name_ar": "الرحاب", "lat": 24.7790, "lng": 46.5610},
"King Salman District": {"name_ar": "حي الملك سلمان", "lat": 24.7365, "lng": 46.7060},
}
def get_all_districts():
"""Return all district names."""
return list(RIYADH_DISTRICTS.keys())
def normalize_arabic(text):
"""Normalize Arabic text for fuzzy matching."""
if not text:
return text
# Normalize alef variations (أ إ آ ا)
text = text.replace('أ', 'ا').replace('إ', 'ا').replace('آ', 'ا')
# Normalize taa marbuta and haa
text = text.replace('ة', 'ه')
# Normalize yaa variations
text = text.replace('ى', 'ي')
# Remove diacritics (tashkeel)
diacritics = 'ًٌٍَُِّْٰ'
for d in diacritics:
text = text.replace(d, '')
# Remove tatweel (kashida)
text = text.replace('ـ', '')
return text
def similarity_score(s1, s2):
"""Calculate simple similarity score between two strings."""
s1, s2 = s1.lower(), s2.lower()
if s1 == s2:
return 1.0
if s1 in s2 or s2 in s1:
return 0.8
# Character-level similarity
set1, set2 = set(s1), set(s2)
intersection = len(set1 & set2)
union = len(set1 | set2)
return intersection / union if union > 0 else 0
def get_district_info(name):
"""Get information about a specific district. Only matches exact or normalized Arabic."""
# Try exact match first
if name in RIYADH_DISTRICTS:
return {"name": name, **RIYADH_DISTRICTS[name]}
# Normalize input for Arabic
name_normalized = normalize_arabic(name)
name_lower = name.lower()
# Try normalized/case-insensitive match
for district_name, info in RIYADH_DISTRICTS.items():
if district_name.lower() == name_lower:
return {"name": district_name, **info}
# Check Arabic name (exact)
if info["name_ar"] == name:
return {"name": district_name, **info}
# Check normalized Arabic (handles إ vs ا, ة vs ه, etc.)
if normalize_arabic(info["name_ar"]) == name_normalized:
return {"name": district_name, **info}
# No match found - return None (don't guess)
return None
def search_districts(query):
"""Search districts by partial name match with fuzzy support."""
query_lower = query.lower()
query_normalized = normalize_arabic(query)
results = []
for district_name, info in RIYADH_DISTRICTS.items():
name_ar_normalized = normalize_arabic(info["name_ar"])
# Check partial matches
if (query_lower in district_name.lower() or
query in info["name_ar"] or
query_normalized in name_ar_normalized):
results.append({"name": district_name, **info})
# If no exact matches, try fuzzy
if not results:
scored = []
for district_name, info in RIYADH_DISTRICTS.items():
score = max(
similarity_score(query, district_name),
similarity_score(query_normalized, normalize_arabic(info["name_ar"]))
)
if score > 0.4:
scored.append((score, {"name": district_name, **info}))
scored.sort(reverse=True, key=lambda x: x[0])
results = [item[1] for item in scored[:5]]
return results
if __name__ == "__main__":
print(f"Total districts in database: {len(RIYADH_DISTRICTS)}")
print("\nAll districts:")
for name in sorted(get_all_districts()):
info = RIYADH_DISTRICTS[name]
print(f" - {name} ({info['name_ar']}): {info['lat']}, {info['lng']}")