質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GIS

GISとは、地理情報システムの略称です。位置・空間などの様々なデータをコンピュータを使用して加工・管理することで、情報の分析や解析を行ったり、視覚的に表示します。行政や市民生活、ビジネスなどで利用されており、活用範囲が広がっています。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

3680閲覧

【Geotiff】フォルダ内の画像ファイルを全て読み込んで,合計を出す

py-python

総合スコア14

GIS

GISとは、地理情報システムの略称です。位置・空間などの様々なデータをコンピュータを使用して加工・管理することで、情報の分析や解析を行ったり、視覚的に表示します。行政や市民生活、ビジネスなどで利用されており、活用範囲が広がっています。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/11/14 03:43

Geotiffを利用して解析を行ってるものです。
フォルダ内にあるGeotiffを読み込んで,全ての合計値を出す作業をしています。
avetest.tifを初期値として,残りの*.tifを読み込んで,積算するプログラムを作成したのですが,
2回目以降にエラーが起きてしまいます。原因を調べているのですが,分かりません。
どこの部分がおかしいのか教えてください。

import

1import sys 2import numpy 3import numpy as np 4import subprocess 5from osgeo import gdal, gdalconst, gdal_array, osr 6import matplotlib.pyplot as plt 7import matplotlib.cm as cm 8import glob 9from PIL import Image 10import PIL 11 12path = "/media/student/data1" 13path1 = "/media/student/data1/test/" 14 15datalist = glob.glob(path1 + "*.tif") 16datalist1 = glob.glob(path1 + "avetest.tif") 17for data1 in datalist1: 18 for data in datalist: 19 name1 = data[len(path1)+0:-4] 20 with open(data, 'r') as target_file: 21 if target_file: 22 print name1+ "OK" 23 data = gdal.Open(data, gdalconst.GA_ReadOnly) # tif (read only) 24 data1= gdal.Open(data1, gdalconst.GA_ReadOnly) # tif (read only) 25 add = data.GetRasterBand(1).ReadAsArray() # Band1 numpy array 26        b1 = data1.GetRasterBand(1).ReadAsArray() #Band1numpyarray 27 sum_v = b1 + add #sum 28 pil_img = Image.fromarray(sum_v) 29 print "sum...ok" 30 outdata = path1+ "avetest.tif" 31 pil_img.save(outdata) 32 outdata = gdal.GetDriverByName('GTiff').Create(path1 + "avetest.tif" , 2500, 1500, 1, gdal.GDT_Float32) # empty_output path,xsize,ysize,band,dtype 33 xmin = 130 #latitude 34 ymax = 30 #longitude 35 resx = 0.02 #grid 36 resy = 0.02 #grid 37 outdata.SetGeoTransform([xmin, resx, 0, ymax, 0, -resy]) 38 srs = osr.SpatialReference() 39 srs.ImportFromEPSG(4326) # WGS84 40 outdata.SetProjection(srs.ExportToWkt()) # Combine spatial information 41 outdata.GetRasterBand(1).WriteArray(sum_v) # b1_numpy_2matrix 42 outdata.FlushCache() # read file 43 outdata = None 44
  • エラー部分
student@student:/media/student/data1$ python a_sum.py 20161001-0010OK sum...ok 20161001-0020OK Traceback (most recent call last): File "a_sum.py", line 27, in <module> data1= gdal.Open(data1, gdalconst.GA_ReadOnly) # tif (read only) File "/usr/lib/python2.7/dist-packages/osgeo/gdal.py", line 2943, in Open return _gdal.Open(*args) RuntimeError: not a string

どうやら,2回目の27行目がエラーを起こしているのですが,原因が分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

for data1 in datalist1:ループ初回ではdata1はファイルパス文字列ですが
data1= gdal.Open(data1, gdalconst.GA_ReadOnly)で同じdata1GDALオブジェクト?が代入されています。
よってfor data in datalist:の2回目以降のループで提示エラーが発生していると思われます。

投稿2017/11/14 03:59

編集2017/11/14 04:06
can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

py-python

2017/11/14 07:26

ありがとうございます。 お手数ですが,どう書き換えればいいでしょうか?
can110

2017/11/14 07:37

data1= gdal.Open(data1, gdalconst.GA_ReadOnly) の中のdata1のうち、どちらかを別(の名前)の変数とすればよいです。 また、たとえばdatalist,data,datalist1,data1などが何を表しているか変数名では分かりずらいので 分かりやすい変数名をつけるように心がけた方がよいです。 たとえば、data1 は file_path_base(初期値、基準となるデータファイルパス)など。
py-python

2017/11/15 02:39

出来ました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問