栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Python捕获嵌入式Google地图图像,而无需使用浏览器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Python捕获嵌入式Google地图图像,而无需使用浏览器

我感谢所有的答案。我最终以另一种方式解决了该问题,使用Google Maps Static
API和一些公式将坐标空间转换为像素空间,以便获得可以很好地“拼接”在一起的精确图像。

对于任何有兴趣的人,这里是代码。如果可以帮助某人,请发表评论!

============================

import Image, urllib, StringIOfrom math import log, exp, tan, atan, pi, ceilEARTH_RADIUS = 6378137EQUATOR_CIRCUMFERENCE = 2 * pi * EARTH_RADIUSINITIAL_RESOLUTION = EQUATOR_CIRCUMFERENCE / 256.0ORIGIN_SHIFT = EQUATOR_CIRCUMFERENCE / 2.0def 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, pydef 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############################################# a neighbourhood in Lajeado, Brazil: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(','))# Set some important parametersscale = 1maxsize = 640# convert all these coordinates to pixelsulx, uly = latlontopixels(ullat, ullon, zoom)lrx, lry = latlontopixels(lrlat, lrlon, zoom)# calculate total pixel dimensions of final imagedx, dy = lrx - ulx, uly - lry# calculate rows and columnscols, rows = int(ceil(dx/maxsize)), int(ceil(dy/maxsize))# calculate pixel dimensions of each small imagebottom = 120largura = int(ceil(dx/cols))altura = int(ceil(dy/rows))alturaplus = altura + bottomfinal = 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.urlenpre({'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()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645033.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号