2011-01-26 19 views
5

Quiero superponer datos geoespaciales (principalmente mapas de calor) sobre imágenes satelitales de alta resolución usando python. (Soy novato, así que se gentil conmigo ;-))Dónde/cómo obtener imágenes de satélite de alta resolución gratuitas para la visualización de datos geoespaciales con python

Aquí está mi lista de deseos

  • lo suficientemente detallada para mostrar calles y edificios
  • debe ser bastante reciente (capturado dentro de los últimos varios años)
  • coordenadas y proyección de imágenes/mapas deben ser conocidos mapas de calor que creé pueden ser superpuestas
  • fácil recuperación (con suerte, varias líneas de códigos pitón se encargará de obtener imágenes de la derecha)
  • gratis

Creo que google map/earth, yahoo map, bing, etc ... podrían ser candidatos potenciales, pero no estoy seguro de cómo acceder a ellos fácilmente. Los ejemplos de código serían muy útiles.

¿Alguna sugerencia?

+1

Esto podría ayudar a http://code.activestate.com/recipes/496966-download-satellite-images-from-nasas-site/ – Benjamin

+0

no son códigos para Google Map/tierra, mapa yahoo, etc? – user186477

+1

"Gratis" como en Free Beer o "Free" como en Free Speech? – Spacedman

Respuesta

4

es un buen equivalente a Google maps (que no conozco muy bien).

Su base de datos aumenta con el tiempo. Es un intento de adquisición de un mapa de código abierto. A veces son un poco más precisos que los mapas de Google, vea Berlin zoo example.

Tiene varias API, que son de acceso de solo lectura: http://wiki.openstreetmap.org/wiki/XAPI.

Parece que utiliza el protocolo REST.

Para el uso de REST y Python, sugeriría esto SO link.

+1

OpenStreetMap carece de imágenes de satélite detalladas, recientes y de alta resolución. – Spacedman

4

Así que quieres hacer algo casi exactamente como esto:

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

la que he encontrado buscando en Google para "mapa de calor pitón".

Ahora no está nada claro sobre qué quiere hacer con estas imágenes, así que recuerde que las imágenes de Google Earth están protegidas por derechos de autor y hay un conjunto de restricciones sobre lo que puede hacer con ellas.

1

mapas de Google prohíbe explícitamente el uso de mosaicos de mapas fuera de línea o el almacenamiento en caché, pero me parece que Microsoft Bing Maps no dicen nada de forma explícita en contra de ella, y yo supongo que no está planeando utilizar su programa en el comercio (?)

Entonces, podrías usar esto. Crea un caché, primero carga un mosaico desde la memoria, si no desde el disco, o desde Internet, siempre guardando en caché todo en el disco para su reutilización. Por supuesto, tendrás que descubrir cómo modificarlo, específicamente cómo obtener las coordenadas de los mosaicos y el nivel de zoom que necesitas, y para esto sugiero fuertemente this site. ¡Buen estudio!

#!/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() 
Cuestiones relacionadas