2016-06-07 5 views
1

Ich benutze die Python-Bibliothek gmplot für eine Karte von GoogleMaps und Georeferenzierung einige Punktkoordinaten. Ich möchte mein Googlemap-Ergebnis in einem freistehenden Fenster darstellen, wie ich es mit Bildern mache, die mit Matplotlib erzeugt wurden, aber mit gmplot kann ich nur die draw() -Funktion sehen, die einen HTML-Code von googlemaps erzeugt. Jetzt verwende ich die folgenden Funktionen:Plot google maps Daten als Bild ohne HTML-Datei

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

Sollte ich eine andere Python-Bibliothek verwenden oder kann ich ein Bild mit gmplot erzeugen?

Antwort

1

Wenn Sie eine Karte als Bild speichern möchten, können Sie dafür this question verwenden. Mit ein paar kleinen Änderungen konnte ich das Ergebnis in einem .bmp Format erhalten.

hier ist mein kleiner editierten Code als Referenz

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() 

und ja den obigen Code ausführen Sie pillow Modul benötigen.

hoffe es kann helfen!

0

Das würde auch funktionieren: Zuerst laden Sie chromedriver auf Ihrer Festplatte (z. B. zu C: \ chromedriver.exe) und pip install selenium.

Dann diesen Code verwenden:

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()