2016-06-07 100 views
1

我正在使用python庫gmplot從GoogleMaps獲取地圖以及地理參考點座標。我想將我的Googlemap結果繪製在一個獨立的窗口中,就像我用matplotlib生成的圖像一樣,但是使用gmplot我只能看到生成googlemaps代碼的html的draw()函數。現在,我使用了以下功能:將Google地圖數據繪製爲圖片而不生成html文件

gmap = gmplot.GoogleMapPlotter(lat[0],lon[0],18) 
gmap.scatter(lat,lon, 'r', 0.1, marker=False) 
gmap.draw('map.html') 

我應該使用其他Python庫或者我可以生成與gmplot的圖像?

回答

1

如果你想存儲一張地圖作爲圖像,你可以參考this question來做到這一點。隨着一些小的變化,我能夠以.bmp格式獲得結果。

這裏是參考

from PIL import Image 
import urllib, StringIO 
from math import log, exp, tan, atan, pi, ceil 

EARTH_RADIUS = 6378137 
EQUATOR_CIRCUMFERENCE = 2 * pi * EARTH_RADIUS 
INITIAL_RESOLUTION = EQUATOR_CIRCUMFERENCE/256.0 
ORIGIN_SHIFT = EQUATOR_CIRCUMFERENCE/2.0 

def latlontopixels(lat, lon, zoom): 
    mx = (lon * ORIGIN_SHIFT)/180.0 
    my = log(tan((90 + lat) * pi/360.0))/(pi/180.0) 
    my = (my * ORIGIN_SHIFT) /180.0 
    res = INITIAL_RESOLUTION/(2**zoom) 
    px = (mx + ORIGIN_SHIFT)/res 
    py = (my + ORIGIN_SHIFT)/res 
    return px, py 

def pixelstolatlon(px, py, zoom): 
    res = INITIAL_RESOLUTION/(2**zoom) 
    mx = px * res - ORIGIN_SHIFT 
    my = py * res - ORIGIN_SHIFT 
    lat = (my/ORIGIN_SHIFT) * 180.0 
    lat = 180/pi * (2*atan(exp(lat*pi/180.0)) - pi/2.0) 
    lon = (mx/ORIGIN_SHIFT) * 180.0 
    return lat, lon 

############################################ 

upperleft = '-29.44,-52.0' 
lowerright = '-29.45,-51.98' 

zoom = 18 # be careful not to get too many images! 

ullat, ullon = map(float, upperleft.split(',')) 
lrlat, lrlon = map(float, lowerright.split(',')) 
scale = 1 
maxsize = 640 
ulx, uly = latlontopixels(ullat, ullon, zoom) 
lrx, lry = latlontopixels(lrlat, lrlon, zoom) 
dx, dy = lrx - ulx, uly - lry 
cols, rows = int(ceil(dx/maxsize)), int(ceil(dy/maxsize)) 
bottom = 120 
largura = int(ceil(dx/cols)) 
altura = int(ceil(dy/rows)) 
alturaplus = altura + bottom 


final = Image.new("RGB", (int(dx), int(dy))) 
for x in range(cols): 
    for y in range(rows): 
     dxn = largura * (0.5 + x) 
     dyn = altura * (0.5 + y) 
     latn, lonn = pixelstolatlon(ulx + dxn, uly - dyn - bottom/2, zoom) 
     position = ','.join((str(latn), str(lonn))) 
     print x, y, position 
     urlparams = urllib.urlencode({'center': position, 
             'zoom': str(zoom), 
             'size': '%dx%d' % (largura, alturaplus), 
             'maptype': 'satellite', 
             'sensor': 'false', 
             'scale': scale}) 
     url = 'http://maps.google.com/maps/api/staticmap?' + urlparams 
     f=urllib.urlopen(url) 
     im=Image.open(StringIO.StringIO(f.read())) 
     final.paste(im, (int(x*largura), int(y*altura))) 
final.show() 

是的運行上面的代碼,你將需要pillow模塊我的小編輯代碼。

希望它可以幫助!

0

這也行得通:首先將chromedriver下載到您的硬盤(例如C:\ chromedriver.exe)和pip install selenium

然後使用此代碼:

from selenium import webdriver 
import time 

driver = webdriver.Chrome(r"C:\chromedriver.exe") 
driver.get(r"C:\route.html") 
time.sleep(3)  
driver.save_screenshot('map.png') 
driver.quit()