簡體   English   中英

在哪里/如何獲得免費的高分辨率衛星圖像,用於使用 python 進行地理空間數據可視化

[英]Where / how to get free high resolution satellite images for geospatial data visualization with python

我想使用 python 在高分辨率衛星圖像上疊加地理空間數據(主要是熱圖)。 (我是新手,所以請對我溫柔;-))

這是我的願望清單

  • 足夠詳細以顯示街道和建築物
  • 必須是最近的(在過去幾年內捕獲的)
  • 必須知道圖像/地圖的坐標和投影,我創建的熱圖可以疊加
  • 易於檢索(希望有幾行 python 代碼將負責獲取正確的圖像)
  • 免費

我認為谷歌地圖/地球、雅虎地圖、bing 等...可能是潛在的候選者,但我不確定如何輕松訪問它們。 代碼示例將非常有幫助。

有什么建議嗎?

Open Street Map是一個很好的等效於谷歌地圖(我不太了解)。

他們的數據庫隨着時間的推移而增加。 是一次開源的地圖獲取嘗試。 它們有時比谷歌地圖更准確,請參閱柏林動物園示例

它有幾個 API,它們是只讀訪問: http : //wiki.openstreetmap.org/wiki/XAPI

它似乎使用 REST 協議。

對於 REST 和 Python 的使用,我建議使用這個SO link

所以你想做一些幾乎完全像這樣的事情:

http://www.jjguy.com/heatmap/

我通過谷歌搜索“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM