现在很多找房软件都提供便捷的功能,输入公司地址,就可以查询30分钟以内通勤的房源。比如某如:
公司地址就是我们找房的中心点,30分钟通勤时间就是中心点的辐射半径。但是这些软件无法解决的是,当你和你女友公司处在不同的相隔较远的位置时,如何找一个对于你俩都比较合适的地点来租房呢?也就是说当中心点有两个的时候,如何兼顾这两个地点,找一个合适的房源位置。
“合适”这个词对于不同的人来说不一定相同。“合适”可能是:“通勤时间较短”、“通勤时间对某一中心点较短”、“通勤时间对于两个中心点差不多”等等。今天的例子以第三种为准:如何在两个工作地点之间找一个相对于这两个地点通勤时间差不多同时又相对较短的小区。
far_most = 60 * 60 * 1000
while flag:
url = 'https://restapi.amap.com/v5/place/text?key=' + key + '&types=120300|120302®ion=010&page_num=' + str(
page_num) + '&page_size=' + str(page_size)
r = request.urlopen(url).read()
res = json.loads(r)
if res['status'] != '1':
raise ValueError(
"get_location error "
"cadefault"
)
pois = res['pois']
for poi in pois:
print(poi['name'], poi['location'], poi['adname'])
sheet.append([poi['name'], poi['location'], poi['adname']])
if len(pois) < page_size:
flag = False
wb.save(path)
page_num = page_num + 1
这里是使用了高德地图提供的API,可以直接查询出北京市所有的小区信息。为了复用数据,也为了减少API的重复调用(每日免费调用次数是有限的),将这些数据,包括小区名称,所在行政区和经纬度坐标地址存储到了excel里
for part in parts:
if part.adname == '海淀区' or part.adname == '石景山区' or part.adname == '西城区':
f_dur = get_path_duration(part.location, f, '010')
m_dur = get_path_duration(part.location, m, '010')
std2 = np.std([f_dur, m_dur])
sum_dur = f_dur + m_dur
if sum_dur > far_most * 2:
continue
part.set_far(sum_dur)
part.set_score(std2)
sheet.append([part.location, part.adname, part.name, part.square, part.far])
print("写入结果:", part.location, part.adname, part.name, part.far, part.square)
selected_part.append(part)
wb.save(result_path)
get_path_duration()这一步就是查询通勤时间(使用的还是高德地图的API),f_dur是到第一个点的通勤时间,m_dur是到第二个点的通勤时间,如果大于我们能够接受的通勤时间上限,那么就过滤掉,最终留下可接受范围内的小区列表。
其实上边那一个代码块里,已经把第四步要做的计算工作做完了。part.set_score()记录了小区到两个中心点位置通勤时间的标准差。我们只需要根据这个标准差做一个排序就好了。
这样就筛选出了小区啦,之后的步骤就跟普通找房一样了,OK大功告成😄