2017-06-14 3 views
0

J'utilise le module gdal de python pour analyser des images satellite - RADARSAT-2 et TerraSAR-X - enregistrées en fichiers .tif. J'ai besoin d'aller chercher des valeurs de pixels aux coordonnées lues dans un fichier de formes. Bien que le code fonctionne bien pour les images RS2, j'ai des problèmes avec les images TSX.La géotransformation lue par gdal à partir d'un Tiff TerraSAR-X est incorrecte

La géotransformation lue par gdal est désactivée pour les produits TSX, ce qui donne des indices de pixels négatifs pour l'emplacement des entités de formes sur l'image. Le même code fonctionne bien pour les produits RS2.

Une idée de ce qui se passe et comment y remédier?

Exemple d'un géotransformation correct d'un produit RS2:

(-74.98992283355103, 7.186522272956171e-05, 0.0, 62.273587708987776, 0.0, -7.186522272956171e-05) 

Exemple de geotransforms que je reçois des produits TSX:

(506998.75, 2.5, 0.0, 6919001.25, 0.0, -2.5) 

extrait de code:

import gdal 

gdal.UseExceptions() 

# Read image, band, geotransform 
dataset = gdal.Open(paths['TSXtiff']) 
band = dataset.GetRasterBand(band_index)   
gt = dataset.GetGeoTransform() 

# Read shapefile 
shapefile = ogr.Open(paths["Shapefile"])  
layer = shapefile.GetLayer() 

# Add pixel_value for each feature to associated list 
pixels_at_shp = [] 
for feature in layer : 

    geometry = feature.GetGeometryRef()    

    # Coordinates in map units 
    # In GDAL, mx = px*gt[1] + gt[0], my = py*gt[5] + gt[3] 
    mx,my = geometry.GetX(), geometry.GetY() 

    # Convert to pixel coordinates 
    px = int((mx-gt[0])/gt[1]) 
    py = int((my-gt[3])/gt[5]) 

    band_values = band.ReadAsArray(px,py,1,1) 

    pixels_at_shp.append(band_values) 

shapefile = None 

return pixels_at_shp 

Répondre

0

Le TSX produit a été projeté tandis que le produit RS2 a été simplement géoréférencé. Solution: retournez aux coordonnées lat/long degrees en reprojectant les fichiers GeoTIFF sur WGS84.

J'ai utilisé l'outil de ligne de commande GDAL pour faire le reprojection, comme ceci:

for f in *.tif 
do 
    gdalwarp "$f" "${f%%.*}_reproj.tif" -t_srs "+proj=longlat +ellps=WGS84" 
done