Files
remote-sensing/core/vietnam_provinces_merged.py

462 lines
14 KiB
Python

"""
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())
}