A.初始值,Python的字符是ascii,html是utf-8,转要转码
#__author__='ZHENGT'
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8') #Python默认ascii,需要转成utf-8
B.以静态图片形式展示图片
1)读取文件信息,这里用pandas库以dataframe形式.
2)高德地图添加点有50数量限制
3)将查询经纬度后的结果存为csv
import webbrowser
import pandas as pd
import urllib
import json
#http://lbs.amap.com/api/webservice/reference/staticmaps/#t6
#945ae54516979776ab3ee717012c24d4 #key
df = pd.read_table('WWT_Facility.txt') #读取目标文件
df['lon']=6.0 #插入lon列
df['lat']=7.0 #插入lat列
# print df.head(5) #显示开始5行
def getHtml(url): #<---获取网页信息--->
page = urllib.urlopen(url_amap) #访问网页
data = page.readline() #读入数据
data_dic = json.loads(data) #转换成python->字典
data_dic_geocodes = data_dic['geocodes'][0] #获取geocodes信息,也是以字典存储
data__dic_location = data_dic_geocodes['location'] # 获取location信息
location = str(data__dic_location).split(",") #处理locaiton成为List
#print location
return location #返回信息
def getStaticAmap(lonlat_str,str_city_center): #<---获取静态高德地图--->
# sh = '121.472644,31.231706' # 上海中心点
#高德地图-->静态地图API地址
url = r'http://restapi.amap.com/v3/staticmap?location=%s&zoom=10&size=1024*768&key=<YOURKEY>'
url_1 = url % str_city_center #加入城市
url_amap=url_1+'&markers=mid,0xFF0000,A:'+lonlat_str #增加marker点
print url_amap #
webbrowser.open(url_amap) #打开
def formatLocation(str,location): #<---格式化Location-->
#格式是lon1,lat1;lon2,lat2;lon3,lat3....
strTemp=','.join(location) #lon,lat
if len(str)==0: #判断是否是初始字符串
strLocation=strTemp
else: #不是初始字符串
strLocation=str+';'+strTemp #合并字符串
return strLocation #返回值
if __name__=='__main__': #<---主程序--->
countdf=len(df) #df的行号,用以循环
lonlat_str='' #定义空白定符串
str_city_center = '121.472644,31.231706' #城市中心点lonlat
i=0 #初始化i
while i<15: #循环,高德地图有<50个点限制
df_1=df.ix[i,1] #名称
df_2=df.ix[i,2] #地址
df_3=df.ix[i,5] #处理量
amap = r'http://restapi.amap.com/v3/geocode/geo?address=%s&city=上海&output=JSON&key=945ae54516979776ab3ee717012c24d4'
url_amap=amap % df_2
getLocation=getHtml(url_amap) #获取数据,返回List[lon,lat]
df.ix[i,6]=getLocation[0] #lon信息
df.ix[i,7]=getLocation[1] #lat信息
lonlat_str=formatLocation(lonlat_str,getLocation) #定义marker点格式--->静态地图用
# print lonlat_str #显示marker点
# print df[i:i+1] #显示相关行数据
i+=1
# print df #观察一下数据
getStaticAmap(lonlat_str,str_city_center) #打开静态地图
df.to_csv('WWT_lonlat.csv', index=False, sep=',', encoding='utf-8') #存储为csv格式
结果如下:
C.以交互形式展式
1)mako库可以将python传递给本地HTML模版
2)AMAP的marker需要一个一个添加
3)需将产生的结果存为本地HTML,再用browser调用
4)经纬信息是下载好的,如需要可以调用另一script来进行获取
#似乎marker只能一个一个点添加,不能以数组形式添加
#http://lbs.amap.com/api/javascript-api/guide/quickstart/#t1
#https://wiki.python.org/moin/Templating
#http://www.jb51.net/article/84425.htm
#http://www.yeolar.com/note/2012/08/28/mako-syntax/
#Python打开HTML文件需要引用webbrowser
import webbrowser
from mako.template import Template #导入模板对象
import codecs #导入转义库
import pandas as pd
#经纬度已经在R+Python中下载过,这里就不重复下载
df_lonlat=pd.read_table(r'C:\Users\zhengt\Desktop\Study\Python\BeginningPython\BeginningPython\result.txt',sep=",",header=None)
df_lonlat.head(5) #查看前5行
def get_dic_lonlat(df): #<---将lonlat转成字典,title:lon,lat--->
count_df=len(df) #df的行号,用以循环
i=0 #初始化变量
title=[] #初始化变量
lonlat=[] #初始化变量
dic={} #初始化变量
while i<count_df-1: #循环
title.append(df.ix[i,0]) #获取标题
lon=round(df.ix[i,3],4) #获取lon
lat=round(df.ix[i,4],4) #获取lat
lonlat.append(str(lon)+","+str(lat)) #lon,lat
# print title,lonlat
dic=dict(zip(title,lonlat)) #写入字典,title:lonlat
i=i+1
return dic #返回字典
def getInterAmap(str_city_center,dic_lonlat): #<---获取动态高德地图--->
# sh = '121.472644,31.231706' # 上海中心点
#高德地图-->静态地图API地址
url = r'C:\Users\zhengt\Desktop\Study\Python\BeginningPython\BeginningPython\amap_with_point.html'
tmple=Template(filename=url,input_encoding='utf-8') #根据amap构建模板对象
result=tmple.render(Locat=str_city_center,
Pt=dic_lonlat) #将location传递给mako的template
# result=tmple.render(Locat='121.74,31.24') #test only
print result #显示结果
f=codecs.open("text.html",'w',"utf-8") #另存为文件
f.write(result) #写入信息
f.close() #关闭文件
url_1=r'text.html' #文件名
webbrowser.open(url_1) #打开本地html
if __name__=='__main__': #<---主程序--->
dic_lonlat=get_dic_lonlat(df_lonlat) #返回字典
for key,value in dic_lonlat.items():
print key,'-->',value #观察字典内容
str_city_center = '121.47,31.23' #城市中心点lonlat
result=getInterAmap(str_city_center, dic_lonlat) #获取地图
结果如下:
HTML模版如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<style type="text/css">
body,html,#container{
height: 100%;
margin: 0px;
font: 12px Helvetica, 'Hiragino Sans GB', 'Microsoft Yahei', '微软雅黑', Arial;
}
</style>
</head>
<body>
<div id="container" tabindex="0"></div>
<div id='panel'></div>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=<YOURKEY>"></script>
<script type="text/javascript">
var mapObj = new AMap.Map('container',{
resizeEnable: true,
zoom: 10,
center:[${Locat}]
});
% for key in Pt.keys():
var marker = new AMap.Marker({
position:[${Pt[key]}],
title:"${key}",
map: mapObj
})
% endfor
</script>
</body>
</html>