POI是英文Point of Interest(兴趣点)的缩写,是指在地图或者导航系统中标注的各类地点信息,包括餐厅、酒店、景点、加油站、银行、医院等公共设施以及商业、文化、娱乐等各类场所。在地图应用和导航系统中,POI作为一种重要的信息资源,可以帮助用户找到目的地,并提供详细的位置、地址、电话等与兴趣点相关的重要信息。
百度网盘链接:https://pan.baidu.com/s/11hl7tOcs4kodNSnU8JOeAA?pwd=1yx0
提取码:1yx0
POI编码总共6位,最后四位为0000为大类,最后两位为00为中类,剩下就是小类。
# 定义一个POI类别编码表,参考中国国家标准GB/T 35648-2017
poi_code_table = {
"110000": "餐饮",
"110100": "中餐厅",
"110200": "西餐厅",
# ......你可以添加更多
}
# 定义一个工具类,实现POI名称-编码之间的映射
class POIMapper:
def __init__(self, code_table):
self.code_table = code_table # 传入编码表
self.name_table = {} # 创建一个空的名称表
self.build_name_table() # 构建名称表
def build_name_table(self):
# 遍历编码表,将编码-名称对调,存入名称表中
for code, name in self.code_table.items():
self.name_table[name] = code
def get_code_by_name(self, name):
# 根据名称查找对应的编码,如果找不到则返回None
return self.name_table.get(name)
def get_name_by_code(self, code):
# 根据编码查找对应的名称,如果找不到则返回None
return self.code_table.get(code)
# 创建一个工具类对象,并测试其功能
mapper = POIMapper(poi_code_table)
print(mapper.get_name_by_code("110000")) # 输出:餐饮
print(mapper.get_code_by_name("中餐厅")) # 输出:110100
print(mapper.get_code_by_name("海")) # 输出:None
print(mapper.get_name_by_code("0301")) # 输出:None
# 定义一个类来存储POI代码和名称
class POI:
# 用csv文件名初始化类
def __init__(self, file_name):
# 创建三个字典来存储所有类别的代码和名称
self.major_code_dict = {} # 大类
self.medium_code_dict = {} # 中类
self.minor_code_dict = {} # 小类
self.major_name_dict = {}
self.medium_name_dict = {}
self.minor_name_dict = {}
# 读取GB/T 35648-2017标准文件(假设它是csv格式)
import csv
with open(file_name, encoding='utf-8') as f:
reader = csv.reader(f)
# 跳过标题行
next(reader)
# 循环遍历每一行
for row in reader:
# 获取每个类别的代码和名称
code = row[0]
name = row[1]
# 检查代码的长度以确定类别级别
if code[2:] == "0000":
# 大类
self.major_code_dict[code] = name
self.major_name_dict[name] = code
elif code[4:] == "00":
# 中类
self.medium_code_dict[code] = name
self.medium_code_dict[name] = code
else:
# 小类
self.minor_code_dict[code] = name
self.minor_code_dict[name] = code
# 定义一个方法来通过名称获取代码
def get_code_by_name(self, name):
# 循环遍历每个字典,如果找到,返回第一个匹配的代码
for code, value in self.major_code_dict.items():
if value == name:
return code
for code, value in self.medium_code_dict.items():
if value == name:
return code
for code, value in self.minor_code_dict.items():
if value == name:
return code
# 如果没有找到匹配的代码,则返回None
return None
# 定义一个通过代码获取名称的方法
def get_name_by_code(self, code):
# 循环遍历每个字典,如果找到,返回第一个匹配的代码
for name, value in self.major_name_dict.items():
if value == code:
return code
for code, value in self.medium_name_dict.items():
if value == code:
return code
for code, value in self.minor_name_dict.items():
if value == code:
return code
# 如果没有找到匹配的代码,则返回None
return None
mapper = POI('./asserts/文件名称.csv')