首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将google地图数据绘制为图片,而无需生成html文件

将google地图数据绘制为图片,而无需生成html文件
EN

Stack Overflow用户
提问于 2016-06-07 15:28:34
回答 2查看 6.2K关注 0票数 5

我使用python库gmplot从GoogleMaps获取地图,并对一些点坐标进行地理参考。我想在一个独立的窗口中绘制我的Googlemap结果,就像我使用matplotlib生成的图像一样,但在gmplot中,我只能看到生成googlemaps代码的html的draw()函数。现在我使用以下函数:

代码语言:javascript
运行
复制
gmap = gmplot.GoogleMapPlotter(lat[0],lon[0],18)
gmap.scatter(lat,lon, 'r', 0.1, marker=False)
gmap.draw('map.html')

我应该使用另一个python库,或者我可以用gmplot生成一个图像吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-07 15:53:44

如果您希望将地图存储为图像,您可以参考this question来完成此操作。通过一些小改动,我能够获得.bmp格式的结果。

下面是我编辑过的小代码,供参考

代码语言:javascript
运行
复制
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模块。

希望它能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2017-09-27 22:48:19

这也是可行的:首先将chromedriver下载到你的硬盘上(例如下载到C:\chromedriver.exe)和pip install selenium

然后使用以下代码:

代码语言:javascript
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37673073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档