1. 程式人生 > >記一次Echarts地圖百度坐標使用

記一次Echarts地圖百度坐標使用

urlopen 操作 tor ctrl+ 是我 span .html 個人 stat

由於工作原因,需要用到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,地圖有了點點。。。。

啊。。。多麽有意義的一天~~~~

記一次Echarts地圖百度坐標使用