2017-06-30 1 views
0

J'ai l'image géoréférencée avec des valeurs de coordonnées comme (475224.0, 4186282.0). La dimension de mon image est (647, 2180). c'est-à-dire qu'il y a 647 colonnes et 2180 lignes. Je voudrais prendre les valeurs de coordonnées dans un tableau numpy avec la taille (647, 2180), de sorte que j'obtiendrai les coordonnées de chaque pixel comme tableau. Je code comme ci-dessous.Comment mettre une valeur séparée par des virgules à une cellule numpy

rr = rasterio.open(fname) #fname is the georefered image 
col = rr.width 
row = rr.height 
coord = np.empty(shape=(col,row),dtype=rr.dtypes[0]) 

for i in range(0,col): 
    for j in range(0,row): 
     coord[i,j] = rr.transform*(i,j) 

Le problème est rr.transform * (i, j) donnera des valeurs telles que (475224,0, 4186282,0). Comment l'enregistrer dans une cellule. Pour le programme ci-dessus, je reçois l'erreur comme ci-dessous

Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "", line 3, in coord[i,j] = rr.transform*(i,j) ValueError: setting an array element with a sequence.

+0

Que voulez-vous dire par "valeur séparée par des virgules"? Est-ce un «tuple»? – JohanL

Répondre

1

En supposant que votre sortie rr.transform*() est valide Python tuple Je pense que vous faites cela un peu plus compliqué que cela doit être. Par défaut, numpy gère les tuples et les listes égaux lors de la création et/ou de l'assignation à np.array: s. Ainsi, une solution beaucoup plus simple pour vous, serait juste ajouter une dimension supplémentaire et affecter vos valeurs directement:

rr = rasterio.open(fname) #fname is the georefered image 
col = rr.width 
row = rr.height 
coord = np.empty(shape=(col,row,2) 

for i in range(0,col): 
    for j in range(0,row): 
     coord[i,j] = rr.transform*(i,j) 

Comme vous pouvez le voir, la seule différence est que j'ajouter des dimensions supplémentaires à la taille de rr . Ici j'ai dur codé la troisième dimension à 2. Il est probablement possible de trouver cela dynamiquement, à partir de l'objet rr à la place. Dans le cas général, nous ne sommes pas limités à tuple de deux valeurs.