记一次Echarts地图百度坐标使用


由于工作原因,需要用到echarts的中国地图图表,像往常一样引入ecchart.js 

然后。。。悲催,地图不加载,经过跟踪代码,发现地图接口报错,echart.js 报了地图js的错误,发现没有引用china.js 

由于这次引用的echarts的版本为3.0版本,发现集成之前项目的2.0的china.js 会有错误,便决定前往官网下载

随后前往http://ecomfe.github.io/echarts-map-tool/下载地图js,接着看到了可怕的界面:

居然不提供百度地图js的下载了。。。。。瞬间觉得心好痛

日子还要继续,代码还要交付,痛定思痛,稳定情绪,想到可以试下找找源码或者示例程序,就酱紫

带着忐忑的心情我打开了githubhttps://github.com/apache/incubator-echarts,寻找github的救赎,当看到

我不禁笑出了猪叫,啊不,笑声。。。因为刚好遇见你

立马进行download进行下载,引用china.js集成到项目,very well,中国地图不负所望的呈现了出来,

接着进行省份地图钻取的功能开发,嗯。。。没有,老毛病。。。没有省份的js

还好我有province文件夹,打开之后,整个人都开心了,慢慢的省份js,接着引入到页面

一顿ctrl+F5刷新,嗯,厉害了我的国,他可以钻取了。。。。

至此,地图的加载已经完成。

接下来是散点的坐标。。。根据echarts文档,散点图的地理地图坐标系需要百度的经纬度,没说的,百度之

百度百度地图百度到了百度地图的百度地图拾取系统 http://api.map.baidu.com/lbsapi/getpoint/index.html,没语病~~~~

输入地点名称,百度,真好,拿到了经纬度坐标,然鹅,没有批量的操作。。。。但是我有好几百个低点位置啊。。。让我如何是好

没办法,只能需求百度地图api的指引。。。打开http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5

经过一番查找,找到地点检索服务,看到。。。

 接着就是按这个流程进行了注册。。顺利拿到服务秘钥。

接下来就是调用接口了,简单点,python的实现简单点,参考百度api开发文档,贴上一段简单的轮询api的python程序,作为记录

# -*- coding: UTF-8 -*-
import urllib
import urllib2
import hashlib
import json
import sys
import codecs

adressFile = 'plazaname.txt'
coordsFile = 'coords.txt'

def getAddressCoord(address):
    coord = []
    AK = 'myak'
    SK = 'mysk'
    url = 'http://api.map.baidu.com'
    # 以get请求为例http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak
    queryStr = '/geocoder/v2/?address='+address+'&output=json&ak=' + AK
    # 对queryStr进行转码,safe内的保留字符不转换

    encodedStr = urllib.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    # 在最后直接追加上yoursk
    rawStr = encodedStr + SK
    # md5计算出的sn值7de5a22212ffaa9e326444c75a58f9a0
    # 最终合法请求url是http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0
    SN= hashlib.md5(urllib.quote_plus(rawStr)).hexdigest()

    url = urllib.quote(url+queryStr+"&sn="+SN, safe="/:=&?#+!$,;'@()*[]")  
    
    response = urllib2.urlopen(url)
    html = response.read()
    decoded = json.loads(html)
    
    print decoded
    
    if decoded["status"] != 302:
        coord.append(decoded["result"]["location"]["lng"])
        coord.append(decoded["result"]["location"]["lat"])
    return coord
    
def getAddressList():
    file = codecs.open(adressFile,'r')
    lines = [line.strip() for line in file] 
    file.close()
    return lines

def getAdressCoords():
    dict_t = {}
    content = getAddressList()
    for address in content:
        key = str(address).decode("utf-8")
        dict_t[key] = getAddressCoord(address)
    with codecs.open(coordsFile,'w') as f:
        f.write(json.dumps(dict_t, ensure_ascii=False))
        
getAdressCoords()

接着顺利的拿到了各个地点的经纬度数据,引入到js,地图有了点点。。。。

啊。。。多么有意义的一天~~~~