日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python使用百度地图API实现地点信息转换及房价指数热力地图

發布時間:2023/12/16 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python使用百度地图API实现地点信息转换及房价指数热力地图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于地圖的可視化數據應用方便且易于實現,有很多方法來實現地圖可視化。包括excel的power map包、在線交互地圖可視化工具,如Echarts、Tableau Public、polyMaps等,及地圖庫。 這里實現的是通過軟件調用百度地圖的api,自己DIY可視化地圖,這種辦法需要軟件編程知識,并熟悉地圖api的具體用法。下面以一個簡單的需求出發,通過python調用百度地圖API實現地點信息轉換及房價指數熱力地圖,這其中需要申請密鑰、批量經緯度換算、轉換成js數據、百度熱力地圖api調參等過程。

? ? ? ? ?百度地圖開發平臺提供了各式各樣的API可供開發者調用,而本文則涉及到了其中的Place API和Geocoding API。?
其中Place API用于查詢某個地點信息的經緯度坐標;Geocoding API用于查詢某個經緯度坐標的結構化地址。?
參考文檔如下:?

Place API:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi

GeocodingAPI:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

一? ?問題需求?

? ? ? ? 根據房價指數數據,進行Python編程使用百度地圖API實現地點信息轉換,展示房價指數熱力地圖

二? 解決思路

? ? ? ? 百度地圖api上相關位置的展現是以經緯度為基礎的,如北京,其經度(longitude)為:116.395645,緯度(latitude)為:39.929986,在這里需要通過百度的Geocoding API來獲取不同城市的經緯度坐標。

? ? ? ?因此可通過csv數據文件導入python,通過調用百度地圖API,批量獲取所有城市的坐標信息。

? ? ? ?根據得到得json數據繪制熱力地圖。

三? 地點信息轉換

1. 開發第一步:注冊密鑰

在做所有工作之前,需要注冊百度地圖api(首先你要用百度的賬號)以獲取免費的密鑰,才能完全使用該api。登錄網址:http://lbsyun.baidu.com/? ?首頁點擊申請密鑰按鈕,經過填寫個人信息、郵箱注冊等注冊成功之后在開放平臺上點擊“創建應用”,填寫相關信息,填寫應用的名字,并在IP白名單框里輸入訪問白名單,如果不清楚自己的IP地址,可設置為:0.0.0.0/0,注意:百度提醒它會有泄露使用的風險。提交后,在你創建應用的訪問應用(AK)那一欄就是你的密鑰。

2.? 整理城市房地產數據

初始數據為2018年3月份70個大中城市商品住宅銷售價格變動情況,國家統計局網站公布的數據鏈接為:http://www.stats.gov.cn/tjsj/zxfb/201804/t20180418_1594610.html,數據整理為201803house.c's'v,為兩列(城市city、房價指數price),并保存為csv格式。? ??
3.? ?信息轉換實現

1)編寫中文城市地址獲取城市地圖信息函數getBaidulnglat

2)讀201803house.csv,逐個城市調用getBaidulnglat3)百度Web服務API下的Geocoding API接口來獲取你所需要地址的經緯度坐標并轉化為json結構的數據? ? ?import json,csv from urllib.request import urlopen, quotedef getBaidulnglat(address):url = 'http://api.map.baidu.com/geocoder/v2/'output = 'json' # 百度地圖API可以指定JSON或者XML的返回數據ak = 'MMMMMMMMMMMs9SG539999999xxxxx'add = quote(address) # 防止中文出現亂碼,先用quote進行編碼url = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + akreq = urlopen(url)res = req.read().decode() # 對返回的response對象,將其他編碼的字符串解碼成unicodetemp = json.loads(res) # 對json數據進行解析return tempfile = open(r'files\\baiduapi_point.json','w') file1 = open(r'files\\baiduapi_citys.json','w') with open(r'files\\201803house.csv', 'r') as csvfile:reader = csv.reader(csvfile)for line in reader:if reader.line_num == 1:continueb = line[0].strip() # 第一列cityc = line[1].strip() getcity = getBaidulnglat(b) # 調用函數獲取API返回包lng = getBaidulnglat(b)['result']['location']['lng'] # 調用函數獲取經度lat = getBaidulnglat(b)['result']['location']['lat'] # 獲取緯度str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},'file.write(str_temp) file1.write(str(getcity)) file.close() file1.close() baiduapi_point.json 的輸出內容如下:

四? 制作熱力地圖

1.? 從百度開發平臺獲取初始HTML代碼

我們先建立一個html文件,將http://developer.baidu.com/map/jsdemo.htm#c1_15?網址中源代碼復制過來,首先將代碼中的ak換成你自己的密鑰;(注意:這個密鑰和前面python里面調用百度API的密鑰不一樣, 需要在剛才創建密鑰的地方重新創建一個,并選擇密鑰類型為前端,用來支持調用baidu的javascriptAPI)


2.? 更新數據。將前面生成的baiduapi_point.json文件里的數據復制出來,替換掉HTML代碼中var points =[ ]里的內容


3.? ?設置熱力地圖中心點和地圖級別,這里以西安為中心點,級別為5。? ? ?百度地圖JavaScript API熱力圖默認的是以天安門為中心的北京區域地圖,因此需要對熱力圖中“設置中心點坐標和地圖級別”的部分進行修改成合適的中心點與地圖級別。(見下圖),具體設置可以參考百度創建地圖api中:http://api.map.baidu.com/lbsapi/creatmap/


4.?熱點圖代碼中的點最大值進行修改為150。 因為大部分price數據(也就是points里的count)都超過了100(默認最大為100)。

5.? 效果展示。 運行本地HTML文件即可。?


6. 擴展說明。 這里使用本地頁面進行實現, 動態頁面類似,不贅述。

五? 另一個例子(地址信息轉換)
? ? ? ? 另一個例子,百度地圖API可以指定JSON或者XML的返回數據,本例子展示不同返回格式的用法,Place API使用的返回格式為JSON,Geocoding API使用的返回格式為XML,兩種格式的處理方法稍有不同。 #encoding=utf-8 '''使用Place API把從文本中提取出的地址轉換為對應的經緯度坐標,再使用Geocoding API把經緯度坐標轉換為結構化地址。''' from xml.etree import ElementTree import json import urllib.requestsearch=urllib.parse.quote(u'武漢'.encode('utf-8')) region=urllib.parse.quote(u'西安'.encode('utf-8')) url="http://api.map.baidu.com/place/v2/search?query=%s&region=%s&city_limit=true&output=json&ak=你的AK"%(search,region)req = urllib.request.urlopen(url)#JSON格式的返回數據 res = req.read().decode("utf-8") #將其他編碼的字符串解碼成unicode temp = json.loads(res) print (temp) address = temp['results'][0]['address']#地址 location = temp['results'][0]['location'] #經緯度坐標 print (address,location) lat = str(location['lat'])#緯度坐標 lng = str(location['lng'])#經度坐標 url2 = 'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location='+lat+','+lng+'&output=xml&pois=1&ak=你的AK' req2 = urllib.request.urlopen(url2)#XML格式的返回數據 res2 = req2.read().decode("utf-8")#將其他編碼的字符串解碼成unicoderoot = ElementTree.fromstring(res2)#解析XML時直接將字符串轉換為一個Element,解析樹的根節點 node_find = root.find('result/formatted_address')#find()用于查找屬于某個tag的第一個element,這里查找結構化地址 print(node_find.text)#輸出結構化的地址

總結

以上是生活随笔為你收集整理的Python使用百度地图API实现地点信息转换及房价指数热力地图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。