我感谢所有的答案。我最终以另一种方式解决了该问题,使用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()


