import httplib import urllib import re import string import Image import StringIO image_url = 'http://farm1.static.flickr.com/29/52139344_21e210d829.jpg' lat = '37.507653' lon = '-122.339994' try : image_data = urllib.urlopen(image_url).read() image_obj = Image.open(StringIO.StringIO(image_data)) except Exception, e : raise e (image_width, image_height) = image_obj.size marker_args = map(str, ('example', lat, lon, image_width, image_height)) marker_args = ",".join(marker_args) mm_args = { 'filter' : 'atkinson', 'provider' : 'MICROSOFT_AERIAL', 'method' : 'center', 'latitude' : lat, 'longitude' : lon, 'zoom' : 17, 'height' : 1239, 'width' : 1771, 'marker' : marker_args, } mm_params = urllib.urlencode(mm_args) mm_url = '127.0.0.1:9999' mm_endpoint = "/?%s" % mm_params try : conn = httplib.HTTPConnection(mm_url) conn.request("GET", mm_endpoint) res = conn.getresponse() except Exception, e : raise e if res.status != 200 : if res.status == 500 : errmsg = "(%s) %s" % (res.getheader('x-errorcode'), res.getheader('x-errormessage')) raise Exception, errmsg else : raise Exception, res.message conn.close() meta = {} re_xheader = re.compile(r"^x-wscompose-", re.IGNORECASE) for key, value in res.getheaders() : if re_xheader.match(key) : parts = key.split("-") parts = map(string.lower, parts) major = parts[2] minor = parts[3] if not meta.has_key(major) : meta[major] = {} meta[major][minor] = value coords = map(int, meta['marker']['example'].split(",")) x_off = coords[2] y_off = coords[3] map_data = res.read() map_obj = Image.open(StringIO.StringIO(map_data)) map_obj.paste(image_obj, (x_off, y_off)) map_obj.show()