SShen11's picture
Update foodlist.py
a9bbb93 verified
import requests
import json
import time
import cconv
import random
import geopandas as gpd
import pandas as pd
import numpy as np
from shapely import geometry
import time
import os
import matplotlib
from shapely.affinity import scale
import contextily as cx
import matplotlib.pyplot as plt
from shapely.geometry import Point
from geopandas import GeoDataFrame
from shapely.geometry import Point, Polygon
import random
def get_data(query, tag, cent):
api_key = "Tkln1WcdGhLNyhxR6KiMVVUKjY6TtrWV"
urls = []
for i in range(0, 1):
url = 'https://api.map.baidu.com/place/v2/search?query=' + query + \
'&tag=' + tag + '&location=' + cent + '&radius=1000&scope=2&output=json&page_size=20&page_num=' + \
str(i) + '&radius_limit=false&ak=' + api_key
urls.append(url)
gdf_allpage_points = gpd.GeoDataFrame()
for i, url in enumerate(urls):
try:
print('{},{}'.format(i, cent))
js = requests.get(url).text
data = json.loads(js)
if data['status'] == 0:
if data['total'] == 0:
print(url)
print(js)
else:
if len(data['results']) == 0:
print(url)
else:
print(url)
for item in data['results']:
if 'address' in item:
js = {}
js['name'] = item['name']
js['lat_bd'] = item['location']['lat']
js['lng_bd'] = item['location']['lng']
js['address'] = item['address']
js['uid'] = item['uid']
js['province'] = item['province']
js['city'] = item['city']
js['area'] = item['area']
js['category'] = query
js['tag_drop'] = item['detail_info']['tag']
if 'overall_rating' in item['detail_info']:
js['overall_rating'] = "评分:" + item['detail_info']['overall_rating']
else:
js['overall_rating'] = " "
if 'label' in item['detail_info']:
js['label'] = "类型:" + item['detail_info']['label']
else:
js['label'] = " "
if 'shop_hours' in item['detail_info']:
js['shop_hours'] = "营业时间:" + item['detail_info']['shop_hours']
else:
js['shop_hours'] = " "
if 'price' in item['detail_info']:
js['price'] = "人均价格:" + item['detail_info']['price'] + "¥"
else:
js['price'] = " "
if ";" in js['tag_drop']:
js['tag'] = js['tag_drop'].split(";")[1]
else:
js['tag'] = tag
js['lat_wgs84'] = cconv.bd09_to_wgs84(js['lng_bd'], js['lat_bd'])[1]
js['lng_wgs84'] = cconv.bd09_to_wgs84(js['lng_bd'], js['lat_bd'])[0]
js['geometry'] = [Point(js['lng_wgs84'],js['lat_wgs84'])]
gdf_item = gpd.GeoDataFrame(js)
gdf_allpage_points = pd.concat([gdf_allpage_points,gdf_item], ignore_index=True)
else:
js = {}
js['name'] = item['name']
js['lat_bd'] = item['location']['lat']
js['lng_bd'] = item['location']['lng']
js['address'] = '无'
js['uid'] = item['uid']
js['province'] = item['province']
js['city'] = item['city']
js['area'] = item['area']
js['category'] = query
js['tag_drop'] = item['detail_info']['tag']
if 'overall_rating' in item['detail_info']:
js['overall_rating'] = "评分:" + item['detail_info']['overall_rating']
else:
js['overall_rating'] = " "
if 'label' in item['detail_info']:
js['label'] = "类型:" + item['detail_info']['label']
else:
js['label'] = " "
if 'shop_hours' in item['detail_info']:
js['shop_hours'] = "营业时间:" + item['detail_info']['shop_hours']
else:
js['shop_hours'] = " "
if 'price' in item['detail_info']:
js['price'] = "人均价格:" + item['detail_info']['price'] + "¥"
else:
js['price'] = " "
if ";" in js['tag_drop']:
js['tag'] = js['tag_drop'].split(";")[1]
else:
js['tag'] = tag
js['lat_wgs84'] = cconv.bd09_to_wgs84(js['lng_bd'], js['lat_bd'])[1]
js['lng_wgs84'] = cconv.bd09_to_wgs84(js['lng_bd'], js['lat_bd'])[0]
js['geometry'] = [Point(js['lng_wgs84'],js['lat_wgs84'])]
gdf_item = gpd.GeoDataFrame(js)
gdf_allpage_points = pd.concat([gdf_allpage_points,gdf_item], ignore_index=True)
elif data['status'] == 302:
print('————————error—302———————')
elif data['status'] == 401:
print('————————error——401——————')
else:
print('————————error——unknow——————')
except:
print('————————error————unknow————————')
return gdf_allpage_points
def get_isochrone_from_mapbox(travel_mode,coordinates,contours_minutes):
url = f'https://api.mapbox.com/isochrone/v1/mapbox/{travel_mode}/{coordinates}?contours_minutes={contours_minutes}&polygons=true&denoise=1&access_token=pk.eyJ1IjoibGxsMzE5OTciLCJhIjoiY2w4anl6b2k5MGRxbjN4bXB1YzV6c3loaCJ9.ec49ySYxrKQWc5uyNHrzdA'
try:
data = requests.get(url,timeout=(3,7))
except:
return None
if data.status_code == requests.codes.ok:
data = json.loads(data.text)
else:
return None
time = []
travel = []
geometry = []
coords = []
for i in range(len(data['features'])):
for j in range(len(data['features'][i]['geometry']['coordinates'])):
time.append(data['features'][i]['properties']['contour'])
travel.append(travel_mode)
coords.append(coordinates)
geometry.append(
Polygon(data['features'][i]['geometry']['coordinates'][j]))
gdf = gpd.GeoDataFrame()
gdf['time'] = time
gdf['travel_mode'] = travel
gdf['coordinates_wgs84'] = coordinates
gdf.geometry = geometry
return gdf