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
def mysql():
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
passwd='xu19931026',
db='cd_taxi',
charset='utf8'
)
if conn:
print("连接成功!")
cursor = conn.cursor()
sql = "select CAST(BeginLongitude as CHAR(11)) as BeginLongitude,CAST(BeginLatitude as CHAR(10)) as BeginLatitude FROM Order_Data where FROM_UNIXTIME(BeginTime) <'2016-11-01 00:05:00' "
cursor.execute(sql)
result=cursor.fetchall()
df=list(result)
lon = []
lat = []
for point in df:
lon.append(float(point[0]))
lat.append(float(point[1]))
num=len(lon)
data = [ [lon[i],lat[i]] for i in range(num) ]
print('**************************************')
print('数据库处理数据完毕')
return lon,lat,data
def get_lonandlat(geo):
lon, lat = decode(geo)
return lon, lat
def get_geohash(lon, lat):
geo = encode(lon, lat)
return geo
def get_geolist(lon,lat):
p = []
for i in range(len(lon)):
result = get_geohash(lon[i],lat[i])
p.append(result)
return p
def new_geohash(lon,lat):
z = list(zip(lon,lat))
return z
def get_dict(central_points, lons_jia, lats_jia):
point_dict = {}
for central_point in central_points:
border_points = []
lons = [central_point[0] +lons_jia, central_point[0] - lons_jia]
lats = [central_point[1] + lats_jia, central_point[1] - lats_jia]
for lon in lons:
for lat in lats:
border_points.append([lon, lat])
point_dict[str(central_point)] = border_points
return point_dict
def geo_paint(dict, lon, lat,new_geohash):
datas = [
go.Scattermapbox(
lat=lat,
lon=lon,
text=new_geohash,
mode='markers',
marker=go.scattermapbox.Marker(
size=5,
color='red',
opacity=0.8
)
)
]
for key in dict.keys():
borders = dict[key]
lons = []
lats = []
for border in borders:
lons.append(border[0])
lats.append(border[1])
lons1 = list(set(lons))
lats1 = list(set(lats))
lats1.sort()
lons1.sort()
lons = [lons1[0], lons1[0], lons1[1], lons1[1], lons1[0]]
lats = [lats1[0], lats1[1], lats1[1], lats1[0], lats1[0]]
datas.append(
go.Scattermapbox(
lat=lats,
lon=lons,
mode='lines',
marker=go.scattermapbox.Marker(
size=3,
color='red',
opacity=0.8
)
)
)
mapbox_access_token = '''pk.eyJ1IjoiemhhbmdwZW5neHUiLCJhIjoiY2s1ZGwxbXpzMHhjdTNlbnFteTdlcXk5eiJ9.vzYUBRLW8vw7L_H9ybiJYg'''
layout = go.Layout(
title="chengdu",
autosize=True,
hovermode='closest',
showlegend=False,
mapbox=go.layout.Mapbox(
accesstoken=mapbox_access_token,
bearing=0,
center=go.layout.mapbox.Center(
lat=30.67,
lon=104.06
),
pitch=0,
zoom=10,
style='light'
),
)
fig = go.Figure(data=datas, layout=layout)
of.plot(fig, filename='Chengdu_geo.html')
if __name__ == "__main__":
start = time.clock()
lon,lat,data=mysql()
end1=time.clock()
print('mysql处理完毕;')
print("耗时", end1 - start)
print('*********************************')
geohash1=get_geolist(lon,lat)
end2 = time.clock()
print('MySQL出的经纬度生成Geohash处理完毕;')
print("耗时", end2 - end1)
print('*********************************')
new_geohash_lonlat = new_geohash(lon,lat)
end3 = time.clock()
print('经度纬度合并得到经纬度列表;')
print("耗时", end3 - end2)
print('*********************************')
dict=get_dict(new_geohash_lonlat,0.001,0.001)
end4 = time.clock()
print('得到经纬度前后左右加0.01用于画方块;')
print("耗时", end4 - end3)
print('开始画方块;')
print('*********************************')
geo_paint(dict, lon, lat,geohash1)
end5 = time.clock()
print("已画完一共耗时", end5 - start)
print('*********************************')
