from pygeohash import encode, decode
import plotly
import plotly.plotly as pyf
import plotly.graph_objs as go
import numpy as np
import pandas as pd
import math
from matplotlib.path import Path
import numpy as np
import plotly.offline as of
import plotly.graph_objs as go
import plotly.plotly as py
import numpy as np
import pandas as pd
import folium
import webbrowser
from folium.plugins import HeatMap
import datetime
import time
import pymysql.cursors
import decimal
import geohash
def geo_demand(geo_top_number):
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
passwd='xu19931026',
db='cd_taxi',
charset='utf8'
)
if conn:
print("连接成功!")
cursor = conn.cursor()
sql = "SELECT Geohash,number,CAST(number/(SELECT count( 0 ) FROM Order_Data where FROM_UNIXTIME(BeginTime) <'2016-11-01 24:00:00') as CHAR(15))as demand FROM (select left(`order_data`.`Geo`,%s) AS `Geohash`,count(0) AS `number` from `order_data` where (from_unixtime(`order_data`.`BeginTime`)< '2016-11-01 24:00:00') group by `Geohash` order by `number` desc) AS T;"
cursor.execute(sql,geo_top_number)
conn.commit()
result = cursor.fetchall()
df = list(result)
conn.close()
print('数据库处理数据完毕')
geo_dict = {}
geo_list = []
order_number = []
demand = []
for point in df:
geo_list.append((point[0]))
order_number.append(point[1])
demand.append(float(point[2]))
num = len(geo_list)
geo_data = [[geo_list[i], demand[i]] for i in range(num)]
geo_nb = [[geo_list[i], order_number[i]] for i in range(num)]
return geo_data,geo_nb
def get_geohash(lon, lat):
geo = geohash.encode(lat, lon)
return geo
def most_geo(lon,lat,geo_data,geo_top_suzi):
n=1
mysql_controln=geo_top_suzi
taxi_geo=[]
most_geo_lis=[]
taxi_geo1=[]
taxi_geo1=get_geohash(lon,lat)
taxi_geo=taxi_geo1[0:int(geo_top_suzi)]
i=0
while i<len(geo_data):
if geo_data[i][0]==taxi_geo:
most_geo_lis.append([geo_data[i][0],geo_data[i][1]])
i+=1
if len(most_geo_lis)==0:
mysql_controln-=1
n=0
return most_geo_lis,mysql_controln,n
if __name__ == '__main__':
print(" 开始推荐!!! ")
print('*********************')
print('开始获取你的坐标')
print('*********************')
print(" 请按照格式输入经度:例:104.0360900 ")
lon = float(input("请输入:"))
print(" 请按照格式输入纬度:例:30.6226900 ")
lat = float(input("请输入:"))
taxi_geo1 = get_geohash(lon, lat)
a=len(taxi_geo1)
print(' 坐标geo已经生成:%s,geohash的长度是%d 请等候'%(taxi_geo1,a))
geo_data, geo_nb = geo_demand(a)
most_geo_lis,mysql_controln,n = most_geo(lon,lat,geo_data,a)
while n==0:
geo_data, geo_nb = geo_demand(mysql_controln)
most_geo_lis,mysql_controln,n = most_geo(lon,lat,geo_data,mysql_controln)