Spaces:
Runtime error
Runtime error
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 | |