Lor*_*nni 5 python google-maps
我正在使用 python 库 gmplot 从 GoogleMaps 获取地图并对某些点坐标进行地理配准。我想在一个独立的窗口中绘制我的 Googlemap 结果,就像我使用 matplotlib 生成的图像一样,但是使用 gmplot 我只能看到生成 googlemaps 代码的 html 的 draw() 函数。现在我正在使用以下功能:
gmap = gmplot.GoogleMapPlotter(lat[0],lon[0],18)
gmap.scatter(lat,lon, 'r', 0.1, marker=False)
gmap.draw('map.html')
Run Code Online (Sandbox Code Playgroud)
我应该使用另一个 python 库还是可以使用 gmplot 生成图像?
如果您想将地图存储为图像,您可以参考此问题来执行此操作。经过一些小的改变,我能够得到 .bmp 格式的结果。
这是我编辑的小代码供参考
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()
Run Code Online (Sandbox Code Playgroud)
是的,要运行上面的代码,您将需要枕头模块。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
6094 次 |
| 最近记录: |