[英]How to batch download large number of high resolution satellite images from Google Map directly?
[英]Where / how to get free high resolution satellite images for geospatial data visualization with python
我想使用 python 在高分辨率衛星圖像上疊加地理空間數據(主要是熱圖)。 (我是新手,所以請對我溫柔;-))
這是我的願望清單
我認為谷歌地圖/地球、雅虎地圖、bing 等...可能是潛在的候選者,但我不確定如何輕松訪問它們。 代碼示例將非常有幫助。
有什么建議嗎?
Open Street Map是一個很好的等效於谷歌地圖(我不太了解)。
他們的數據庫隨着時間的推移而增加。 是一次開源的地圖獲取嘗試。 它們有時比谷歌地圖更准確,請參閱柏林動物園示例。
它有幾個 API,它們是只讀訪問: http : //wiki.openstreetmap.org/wiki/XAPI 。
它似乎使用 REST 協議。
對於 REST 和 Python 的使用,我建議使用這個SO link 。
所以你想做一些幾乎完全像這樣的事情:
我通過谷歌搜索“python 熱圖”找到了它。
現在您有點不清楚要對這些圖像做什么,所以請記住,Google 地球圖像受版權保護,並且對您可以對它們做什么有一系列限制。
谷歌地圖明確禁止離線使用地圖圖塊或緩存它們,但我認為微軟必應地圖沒有明確反對它,我猜你不打算將你的程序用於商業用途(?)
那么,你可以使用這個。 它創建一個緩存,首先從內存中加載一個磁貼,或者從磁盤加載,或者從互聯網加載,總是將所有內容緩存到磁盤以供重用。 當然,你必須弄清楚如何調整它,特別是如何獲得你需要的瓷磚坐標和縮放級別,為此我強烈建議這個網站。 好好學習!
#!/usr/bin/env python
# coding: utf-8
import os
import Image
import random
import urllib
import cStringIO
import cairo
#from geofunctions import *
class TileServer(object):
def __init__(self):
self.imdict = {}
self.surfdict = {}
self.layers = 'ROADMAP'
self.path = './'
self.urltemplate = 'http://ecn.t{4}.tiles.virtualearth.net/tiles/{3}{5}?g=0'
self.layerdict = {'SATELLITE': 'a', 'HYBRID': 'h', 'ROADMAP': 'r'}
def tiletoquadkey(self, xi, yi, z):
quadKey = ''
for i in range(z, 0, -1):
digit = 0
mask = 1 << (i - 1)
if(xi & mask) != 0:
digit += 1
if(yi & mask) != 0:
digit += 2
quadKey += str(digit)
return quadKey
def loadimage(self, fullname, tilekey):
im = Image.open(fullname)
self.imdict[tilekey] = im
return self.imdict[tilekey]
def tile_as_image(self, xi, yi, zoom):
tilekey = (xi, yi, zoom)
result = None
try:
result = self.imdict[tilekey]
except:
filename = '{}_{}_{}_{}.jpg'.format(zoom, xi, yi, self.layerdict[self.layers])
fullname = self.path + filename
try:
result = self.loadimage(fullname, tilekey)
except:
server = random.choice(range(1,4))
quadkey = self.tiletoquadkey(*tilekey)
print quadkey
url = self.urltemplate.format(xi, yi, zoom, self.layerdict[self.layers], server, quadkey)
print "Downloading tile %s to local cache." % filename
urllib.urlretrieve(url, fullname)
result = self.loadimage(fullname, tilekey)
return result
if __name__ == "__main__":
ts = TileServer()
im = ts.tile_as_image(5, 9, 4)
im.show()
一種可能的來源是來自 NASA World Wind的圖像。 您可以查看他們的來源以了解他們如何訪問他們的數據源,並在您的應用程序中執行相同的操作。
我利用了 Bing Maps API 以及Map Tiling的知識。 請在我的Github Repository 中找到相同的代碼。
您可能會發現這也很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.