""" Vietnam Provinces After Administrative Merger (32 provinces) 32 tỉnh thành Việt Nam sau sáp nhập theo Nghị quyết 1211/2023 Bbox đã được mở rộng để bao phủ các tỉnh đã hợp nhất """ VIETNAM_PROVINCES_32 = { # Thành phố trực thuộc TW (5) "Hà Nội": { "bbox": [105.35, 20.53, 105.92, 21.33], "name_en": "Hanoi", "region": "Đồng bằng Bắc Bộ", "merged_from": None, "area_km2": 3359 }, "Hải Phòng": { "bbox": [106.14, 20.68, 107.07, 21.09], # Bao gồm cả Hải Dương "name_en": "Hai Phong", "region": "Đồng bằng Bắc Bộ", "merged_from": ["Hải Phòng", "Hải Dương"], "area_km2": 2914 }, "Đà Nẵng": { "bbox": [107.04, 14.93, 108.70, 16.28], # Bao gồm cả Quảng Nam "name_en": "Da Nang - Quang Nam", "region": "Duyên hải Nam Trung Bộ", "merged_from": ["Đà Nẵng", "Quảng Nam"], "area_km2": 11065 }, "Hồ Chí Minh": { "bbox": [106.36, 10.35, 107.04, 11.16], "name_en": "Ho Chi Minh City", "region": "Đông Nam Bộ", "merged_from": None, "area_km2": 2061 }, "Cần Thơ": { "bbox": [105.48, 9.77, 106.14, 10.35], "name_en": "Can Tho", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 1402 }, # Các tỉnh sau sáp nhập (27) # Vùng núi phía Bắc "Lào Cai": { "bbox": [103.22, 21.82, 104.45, 22.77], "name_en": "Lao Cai", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 6384 }, "Điện Biên": { "bbox": [102.72, 21.09, 103.72, 22.21], # Bao gồm cả Lai Châu "name_en": "Dien Bien - Lai Chau", "region": "Vùng núi phía Bắc", "merged_from": ["Điện Biên", "Lai Châu"], "area_km2": 15274 }, "Hà Giang": { "bbox": [104.42, 22.33, 105.59, 23.39], "name_en": "Ha Giang", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 7946 }, "Cao Bằng": { "bbox": [105.48, 21.95, 106.70, 23.04], # Bao gồm cả Bắc Kạn "name_en": "Cao Bang - Bac Kan", "region": "Vùng núi phía Bắc", "merged_from": ["Cao Bằng", "Bắc Kạn"], "area_km2": 11335 }, "Lạng Sơn": { "bbox": [106.22, 21.40, 107.18, 22.41], "name_en": "Lang Son", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 8327 }, "Tuyên Quang": { "bbox": [104.97, 21.65, 105.65, 22.42], "name_en": "Tuyen Quang", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 5868 }, "Yên Bái": { "bbox": [103.97, 21.35, 105.20, 22.21], "name_en": "Yen Bai", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 6899 }, "Thái Nguyên": { "bbox": [105.48, 21.27, 106.15, 22.07], "name_en": "Thai Nguyen", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 3534 }, "Phú Thọ": { "bbox": [104.83, 21.01, 105.48, 21.82], "name_en": "Phu Tho", "region": "Vùng núi phía Bắc", "merged_from": None, "area_km2": 3533 }, "Hòa Bình": { "bbox": [103.22, 20.35, 105.74, 21.82], # Bao gồm cả Sơn La "name_en": "Hoa Binh - Son La", "region": "Vùng núi phía Bắc", "merged_from": ["Hòa Bình", "Sơn La"], "area_km2": 19210 }, # Đồng bằng Bắc Bộ "Quảng Ninh": { "bbox": [106.48, 20.70, 108.26, 21.62], "name_en": "Quang Ninh", "region": "Đồng bằng Bắc Bộ", "merged_from": None, "area_km2": 6102 }, "Bắc Ninh": { "bbox": [105.83, 20.93, 106.70, 21.68], # Bao gồm cả Bắc Giang "name_en": "Bac Ninh - Bac Giang", "region": "Đồng bằng Bắc Bộ", "merged_from": ["Bắc Ninh", "Bắc Giang"], "area_km2": 4631 }, "Vĩnh Phúc": { "bbox": [105.31, 21.14, 105.81, 21.61], "name_en": "Vinh Phuc", "region": "Đồng bằng Bắc Bộ", "merged_from": None, "area_km2": 1236 }, "Hưng Yên": { "bbox": [105.83, 20.58, 106.26, 21.03], "name_en": "Hung Yen", "region": "Đồng bằng Bắc Bộ", "merged_from": None, "area_km2": 926 }, "Nam Định": { "bbox": [105.79, 20.04, 106.47, 20.73], # Bao gồm cả Hà Nam "name_en": "Nam Dinh - Ha Nam", "region": "Đồng bằng Bắc Bộ", "merged_from": ["Nam Định", "Hà Nam"], "area_km2": 2442 }, "Thái Bình": { "bbox": [106.23, 20.27, 106.70, 20.76], "name_en": "Thai Binh", "region": "Đồng bằng Bắc Bộ", "merged_from": None, "area_km2": 1570 }, # Bắc Trung Bộ "Thanh Hóa": { "bbox": [104.83, 19.33, 106.14, 20.66], # Bao gồm cả Ninh Bình "name_en": "Thanh Hoa - Ninh Binh", "region": "Bắc Trung Bộ", "merged_from": ["Thanh Hóa", "Ninh Bình"], "area_km2": 12490 }, "Nghệ An": { "bbox": [103.97, 17.98, 106.23, 19.89], # Bao gồm cả Hà Tĩnh "name_en": "Nghe An - Ha Tinh", "region": "Bắc Trung Bộ", "merged_from": ["Nghệ An", "Hà Tĩnh"], "area_km2": 22793 }, "Quảng Bình": { "bbox": [105.74, 16.97, 107.04, 18.06], "name_en": "Quang Binh", "region": "Bắc Trung Bộ", "merged_from": None, "area_km2": 8065 }, "Quảng Trị": { "bbox": [106.48, 16.38, 107.54, 17.20], "name_en": "Quang Tri", "region": "Bắc Trung Bộ", "merged_from": None, "area_km2": 4746 }, "Thừa Thiên Huế": { "bbox": [107.04, 16.01, 108.01, 16.95], "name_en": "Thua Thien Hue", "region": "Bắc Trung Bộ", "merged_from": None, "area_km2": 5033 }, # Duyên hải Nam Trung Bộ "Quảng Ngãi": { "bbox": [108.01, 14.66, 109.18, 15.53], "name_en": "Quang Ngai", "region": "Duyên hải Nam Trung Bộ", "merged_from": None, "area_km2": 5153 }, "Bình Định": { "bbox": [108.33, 12.75, 109.46, 14.72], # Bao gồm cả Phú Yên "name_en": "Binh Dinh - Phu Yen", "region": "Duyên hải Nam Trung Bộ", "merged_from": ["Bình Định", "Phú Yên"], "area_km2": 11092 }, "Khánh Hòa": { "bbox": [108.70, 11.75, 109.46, 12.95], "name_en": "Khanh Hoa", "region": "Duyên hải Nam Trung Bộ", "merged_from": None, "area_km2": 5218 }, "Bình Thuận": { "bbox": [107.54, 10.49, 109.18, 12.04], # Bao gồm cả Ninh Thuận "name_en": "Binh Thuan - Ninh Thuan", "region": "Duyên hải Nam Trung Bộ", "merged_from": ["Bình Thuận", "Ninh Thuận"], "area_km2": 11234 }, # Tây Nguyên "Gia Lai": { "bbox": [107.54, 13.17, 108.70, 15.17], # Bao gồm cả Kon Tum "name_en": "Gia Lai - Kon Tum", "region": "Tây Nguyên", "merged_from": ["Gia Lai", "Kon Tum"], "area_km2": 25536 }, "Đắk Lắk": { "bbox": [107.04, 11.75, 108.70, 13.40], # Bao gồm cả Đắk Nông "name_en": "Dak Lak - Dak Nong", "region": "Tây Nguyên", "merged_from": ["Đắk Lắk", "Đắk Nông"], "area_km2": 19850 }, "Lâm Đồng": { "bbox": [107.04, 10.99, 108.70, 12.52], "name_en": "Lam Dong", "region": "Tây Nguyên", "merged_from": None, "area_km2": 9776 }, # Đông Nam Bộ "Đồng Nai": { "bbox": [106.36, 10.49, 107.54, 12.24], # Bao gồm cả Bình Phước "name_en": "Dong Nai - Binh Phuoc", "region": "Đông Nam Bộ", "merged_from": ["Đồng Nai", "Bình Phước"], "area_km2": 13317 }, "Bình Dương": { "bbox": [106.36, 10.87, 106.96, 11.51], "name_en": "Binh Duong", "region": "Đông Nam Bộ", "merged_from": None, "area_km2": 2695 }, "Bà Rịa - Vũng Tàu": { "bbox": [107.04, 10.16, 107.77, 10.87], "name_en": "Ba Ria - Vung Tau", "region": "Đông Nam Bộ", "merged_from": None, "area_km2": 1990 }, "Tây Ninh": { "bbox": [105.74, 10.87, 106.70, 11.75], "name_en": "Tay Ninh", "region": "Đông Nam Bộ", "merged_from": None, "area_km2": 4040 }, # Đồng bằng sông Cửu Long "Tiền Giang": { "bbox": [105.74, 9.99, 106.70, 11.16], # Bao gồm cả Long An "name_en": "Tien Giang - Long An", "region": "Đồng bằng sông Cửu Long", "merged_from": ["Tiền Giang", "Long An"], "area_km2": 6935 }, "Bến Tre": { "bbox": [105.98, 9.77, 106.70, 10.35], "name_en": "Ben Tre", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 2360 }, "Vĩnh Long": { "bbox": [105.74, 9.33, 106.70, 10.35], # Bao gồm cả Trà Vinh "name_en": "Vinh Long - Tra Vinh", "region": "Đồng bằng sông Cửu Long", "merged_from": ["Vĩnh Long", "Trà Vinh"], "area_km2": 4567 }, "Đồng Tháp": { "bbox": [105.20, 10.16, 105.98, 11.16], "name_en": "Dong Thap", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 3377 }, "An Giang": { "bbox": [104.83, 9.99, 105.74, 10.99], "name_en": "An Giang", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 3537 }, "Kiên Giang": { "bbox": [103.22, 8.68, 105.48, 10.52], "name_en": "Kien Giang", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 6348 }, "Sóc Trăng": { "bbox": [105.31, 9.16, 106.23, 9.99], # Bao gồm cả Hậu Giang "name_en": "Soc Trang - Hau Giang", "region": "Đồng bằng sông Cửu Long", "merged_from": ["Sóc Trăng", "Hậu Giang"], "area_km2": 4750 }, "Bạc Liêu": { "bbox": [105.31, 8.93, 105.98, 9.60], "name_en": "Bac Lieu", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 2585 }, "Cà Mau": { "bbox": [104.58, 8.18, 105.48, 9.60], "name_en": "Ca Mau", "region": "Đồng bằng sông Cửu Long", "merged_from": None, "area_km2": 5332 }, } def get_all_provinces_32(): """Lấy danh sách tất cả 32 tỉnh thành sau sáp nhập""" return list(VIETNAM_PROVINCES_32.keys()) def get_provinces_by_region_32(): """Lấy danh sách 32 tỉnh thành theo vùng miền""" regions = {} for province, data in VIETNAM_PROVINCES_32.items(): region = data["region"] if region not in regions: regions[region] = [] regions[region].append({ "name": province, "name_en": data["name_en"], "bbox": data["bbox"], "merged_from": data.get("merged_from"), "area_km2": data.get("area_km2") }) return regions def get_province_bbox_32(province_name): """Lấy bbox của một tỉnh thành (32 tỉnh)""" if province_name in VIETNAM_PROVINCES_32: return VIETNAM_PROVINCES_32[province_name]["bbox"] return None def get_merged_info(province_name): """Lấy thông tin sáp nhập của tỉnh""" if province_name in VIETNAM_PROVINCES_32: data = VIETNAM_PROVINCES_32[province_name] return { "name": province_name, "bbox": data["bbox"], "merged_from": data.get("merged_from"), "region": data["region"], "area_km2": data.get("area_km2") } return None def search_province_32(query): """Tìm kiếm tỉnh thành theo tên (32 tỉnh)""" query = query.lower() results = [] for province, data in VIETNAM_PROVINCES_32.items(): if (query in province.lower() or query in data["name_en"].lower()): results.append({ "name": province, "name_en": data["name_en"], "bbox": data["bbox"], "region": data["region"], "merged_from": data.get("merged_from"), "area_km2": data.get("area_km2") }) return results def get_provinces_statistics(): """Thống kê các tỉnh đã sáp nhập""" total = len(VIETNAM_PROVINCES_32) merged = len([p for p in VIETNAM_PROVINCES_32.values() if p.get("merged_from")]) original = total - merged return { "total_provinces": total, "merged_provinces": merged, "original_provinces": original, "regions": list(set(p["region"] for p in VIETNAM_PROVINCES_32.values())), "total_area_km2": sum(p.get("area_km2", 0) for p in VIETNAM_PROVINCES_32.values()) }