Где / как получить бесплатные спутниковые изображения высокого разрешения для визуализации геопространственных данных с помощью Python - PullRequest
6 голосов
/ 26 января 2011

Я хочу наложить геопространственные данные (в основном тепловые карты) поверх спутниковых изображений с высоким разрешением, используя python.(я новичок, так что будьте осторожны со мной ;-))

Вот мой список пожеланий

  • достаточно подробный, чтобы показать улицы и здания
  • должно быть довольнопоследние (полученные в течение последних нескольких лет) координаты
  • и проекция изображений / карт должны знать, что созданные мной тепловые карты могут быть наложены
  • легкий поиск (надеюсь, несколько строк кода Python позаботятсяполучить правильные изображения)
  • бесплатно

Я думаю, что Google Map / Earth, Yahoo карта, Bing и т.д. ... могут быть потенциальными кандидатами, но я не уверен, как получить доступих легко.Примеры кода были бы очень полезны.

Есть предложения?

Ответы [ 4 ]

4 голосов
/ 20 марта 2011

Итак, вы хотите сделать что-то вроде этого:

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

, который я нашел, прибегнув к поиску "python heatmap".

Теперь выНемного неясно, что вы хотите делать с этими изображениями, поэтому помните, что изображения Google Планета Земля защищены авторским правом и есть ряд ограничений на то, что вы можете делать с ними.

4 голосов
/ 26 января 2011

Open Street Map - хороший эквивалент карт Google (которые я не очень хорошо знаю).

Их база данных увеличивается со временем.Это попытка приобретения карты с открытым исходным кодом.Иногда они немного точнее, чем карты Google, см. Пример Берлинский зоопарк .

. Он имеет несколько API-интерфейсов, которые доступны только для чтения: http://wiki.openstreetmap.org/wiki/XAPI.

По-видимому, используется протокол REST.

Для использования REST и Python я бы предложил SO link .

2 голосов
/ 14 сентября 2012

Карты Google явно запрещают использовать фрагменты карты в автономном режиме или кэшировать их, но я думаю, что Microsoft Bing Maps ничего не говорит против этого, и я полагаю, что вы не планируете использовать свою программу в коммерческих целях (?)

Тогда вы можете использовать это.Он создает кэш, сначала загружая плитку из памяти, либо с диска, либо из Интернета, всегда кэшируя все на диск для повторного использования.Конечно, вам придется выяснить, как настроить его, в частности, как получить координаты плитки и необходимый уровень масштабирования, и для этого я настоятельно рекомендую этот сайт .Хорошая учеба!

#!/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()
1 голос
/ 26 января 2011

Одним из возможных источников являются изображения от НАСА World Wind . Вы можете посмотреть на их источник , чтобы узнать, как они получают доступ к своим источникам данных, и сделать то же самое в вашем приложении.

...