寫在前面:所有數(shù)據(jù)記得選擇對應(yīng)的坐標(biāo)系,例如百度地圖和原始GPS坐標(biāo)系就不同,需要轉(zhuǎn)化再將它投射到地圖上,否則就會(huì)造成偏差,導(dǎo)致"汽車從你家客廳穿過"
第一種是用python。
這里原理是用matplotlib里面的scatter畫散點(diǎn)圖辫塌,設(shè)置好橫軸和縱軸的單位距離斟珊,然后把橫軸和縱軸數(shù)據(jù)放在兩個(gè)列表里面就行霸褒,具體可以看看matplotlib的官方文檔郊丛,或者參照這篇博客焙矛,且看代碼:
import matplotlib.pyplot as plt
import os
#定義讀取txt的函數(shù) 返回一個(gè)列表 列表里包含經(jīng)度
def get_longitude(filename,i):
fopen = open(filename,'r')
longitude = []
for eachline in fopen:
group = eachline.split(",")
longitude.append(float(group[i]))
fopen.close()
return longitude
#定義讀取txt的函數(shù) 返回一個(gè)列表 列表里包含緯度
def get_latitude(filename,i):
fopen = open(filename,'r')
latitude = []
for eachline in fopen:
group = eachline.split(",")
latitude.append(float(group[i]))
fopen.close()
return latitude
#filename文件路徑 size點(diǎn)的大小 color為點(diǎn)的顏色 i為自己定義 如果每一行前面有代表行數(shù)的數(shù)字毫玖,i為1否則i為0
def draw_image(filename,size,color,i):
latitude = get_latitude(filename, i)# 緯度
longitude = get_longitude(filename, i+1) # 經(jīng)度
plt.scatter(longitude, latitude, size,color)
plt.ylim(Ymin,Ymax)#Ymin和Ymax表示縱軸的最大值和最小值
plt.xlim(Xmin廉沮,Xmax)#同上
plt.plot(longitude,latitude,'b')#顏色的設(shè)置 'r' 紅色 'm' 粉紅'g' 綠色 'c' 青色'b' 藍(lán)色 'w' 白色'y' 黃色 'k' 黑色
plt.show()
這里的可視化的容易懂逮壁,但有個(gè)不好的地方就是背景不是地圖孵坚,效果不太好。不過python有個(gè)庫是可以在地圖上標(biāo)點(diǎn)的窥淆,叫BaseMap卖宠,但我這里沒寫的原因,一是當(dāng)時(shí)沒時(shí)間學(xué)祖乳,二是這個(gè)網(wǎng)上資料不多逗堵,不想看英文文檔,就沒寫眷昆,這回我有空就去學(xué)一學(xué)蜒秤,之后也寫一篇博客汁咏,這里貼一篇可以參考的,感興趣的小伙伴可以看看BaseMap
第二種可視化作媚,就是用百度地圖了攘滩,百度地圖API提供了很多東西,只要注冊申請密鑰之后就能用纸泡。
值得注意的是漂问,如果你要可視化的是海量數(shù)據(jù),個(gè)人建議女揭,還是用LBS麻點(diǎn)蚤假,百度地圖API,在控制臺(tái)里找數(shù)據(jù)管理那部分吧兔,然后上傳數(shù)據(jù)磷仰,不過切記別把上傳的格式搞錯(cuò)了,先把百度提供的模板下下來然后自己錄入數(shù)據(jù)生成csv文件境蔼,然后再上傳灶平。最后還有一個(gè)要注意的地方就是,百度地圖的坐標(biāo)跟原始的GPS坐標(biāo)是不同的,如果不轉(zhuǎn)換的話,點(diǎn)標(biāo)就標(biāo)得不準(zhǔn),百度官方提供了轉(zhuǎn)換方法原始GPS轉(zhuǎn)百度坐標(biāo)
上傳數(shù)據(jù)成功后會(huì)有一個(gè)geotableId,然后就是顯示了箍土,這里可以直接在地圖上看了
之前的geotableId在前端頁面調(diào)用的時(shí)候會(huì)要用到
請看代碼
// 百度地圖API功能
varmap = new BMap.Map("l-map"); // 創(chuàng)建地圖實(shí)例
varpoint = new BMap.Point(116.403694,39.927552); // 創(chuàng)建點(diǎn)坐標(biāo)
map.centerAndZoom(point, 15); // 初始化地圖逢享,設(shè)置中心點(diǎn)坐標(biāo)和地圖級別
varcustomLayer=new BMap.CustomLayer({
geotableId: 30960,//換成你自己的數(shù)據(jù)表geotableId
q: '', //檢索關(guān)鍵字
tags: '', //空格分隔的多字符串
filter: '' //過濾條件
});
map.addTileLayer(customLayer);
customLayer.addEventListener('hotspotclick',callback)
如果數(shù)據(jù)不多,可以用這個(gè)例子吴藻,多個(gè)點(diǎn)示例瞒爬,不難,這里就不贅述了调缨,效果還不錯(cuò),但是要注意性能問題,點(diǎn)太多會(huì)造成瀏覽器卡頓甚至卡死
第三種方法疮鲫,就是地圖無憂,如果你不想理睬上面的那些代碼弦叶,那么俊犯,地圖無憂可以暫時(shí)解決一下你的問題,不過問題就是他不免費(fèi)伤哺,試用是七天燕侠。不過他的便利之處就是他只用你上傳數(shù)據(jù)文件(支持Excel和csv),樣式等也可以自己隨意設(shè)置立莉,很方便绢彤。送上網(wǎng)址地圖無憂,效果也很好