当前位置: 首页 > news >正文

Python获取amap高德地图

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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>

 

转载于:https://my.oschina.net/tedzheng/blog/718433

相关文章:

  • 基于Oracle的SQL优化--学习(十七)
  • JDK、Spring、Quartz等几种不同定时器的用法,以及cronExpression表达式定义
  • hibernate,将原生SQL执行的结果转换为Map
  • Stimulsoft Reports.Net基础教程(四):创建主从报表②
  • IntelliJ IDEA解决创建maven web项目慢的问题
  • 一些使用IDEA的诀窍
  • Tomcat启动时,webapps目录下的项目没有加载
  • 马哥预习视频
  • Document base xxx does not exist or is not a readable directory
  • 一位资深程序员大牛给予Java初学者的学习路线建议
  • WITH AS的用法
  • pivot的用法
  • POJ1840 Eqs(hash)
  • Dangling meta character '+' near index 0,解决办法
  • swift - 将表格滚动条移动到底部
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS居中完全指南——构建CSS居中决策树
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Python 基础起步 (十) 什么叫函数?
  • Rancher如何对接Ceph-RBD块存储
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 阿里云前端周刊 - 第 26 期
  • 前端面试题总结
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 什么软件可以剪辑音乐?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 延迟脚本的方式
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 用quicker-worker.js轻松跑一个大数据遍历
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • (2.2w字)前端单元测试之Jest详解篇
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (十)c52学习之旅-定时器实验
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (算法)求1到1亿间的质数或素数
  • .apk文件,IIS不支持下载解决
  • .jks文件(JAVA KeyStore)
  • .Net Remoting常用部署结构
  • .NET 服务 ServiceController
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net8 Blazor 尝鲜
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [Angular] 笔记 6:ngStyle
  • [ARM]ldr 和 adr 伪指令的区别
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++] 统计程序耗时
  • [Codeforces] probabilities (R1600) Part.1
  • [C语言]一维数组二维数组的大小
  • [emacs] CUA的矩形块操作很给力啊
  • [IE9] IE9 beta版下载链接
  • [IE编程] 如何设置IE8的WebBrowser控件(MSHTML) 的渲染模式