Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FOSS4G 山陰Meetup 2024/ QGIS Processing でのGRASSのエ...
Search
OSGeo.JP
September 20, 2024
0
4
FOSS4G 山陰Meetup 2024/ QGIS Processing でのGRASSのエラーの調査
FOSS4G 山陰Meetup 2024 もくもく会で @picaosgeoさんが行われた、QGIS Processing でのGRASSのエラーの調査に付いての報告。
OSGeo.JP
September 20, 2024
Tweet
Share
More Decks by OSGeo.JP
See All by OSGeo.JP
Advancing the 3D Geospatial Ecosystem in Japan via Global Collaborations
osgeojp
0
330
農業用ダム監視を目的とした衛星SAR 干渉解析の適用性について
osgeojp
0
340
FOSS4G 2023 Japan@FUKUI 佐橋 功一様、 新垣 仁様 発表資料
osgeojp
0
190
FOSS4G 2023 Japan@FUKUI 白土 洋介様 発表資料
osgeojp
0
590
FOSS4G 2023 Japan@FUKUI 熊谷康太様発表資料
osgeojp
0
150
FOSS4G 2023 Japan@FUKUI 小林裕之様発表資料
osgeojp
0
540
吉中輝彦様 QGISで扱うラスタレイヤ (FOSS4G 2022 Japan Online)
osgeojp
0
46
原田 豊様 Windows版『聞き書きマップ』のQGISプラグイン化
osgeojp
0
320
吉中輝彦様 QGISと点群とPLATEAUと
osgeojp
0
1.7k
Featured
See All Featured
Building Applications with DynamoDB
mza
92
6.1k
The World Runs on Bad Software
bkeepers
PRO
66
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Navigating Team Friction
lara
183
15k
The Invisible Side of Design
smashingmag
299
50k
Adopting Sorbet at Scale
ufuk
74
9.1k
Facilitating Awesome Meetings
lara
50
6.2k
Thoughts on Productivity
jonyablonski
68
4.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
YesSQL, Process and Tooling at Scale
rocio
170
14k
Transcript
QGIS processing の GRASS/SAGA バッチ 処理時の unicode エラーについての調査 FOSS4G ⼭陰
Meetup 2024 @picaosgeo QGIS の processing ツ ー ル に お い て 、 GRASS/SAGA の フ ァ ン ク シ ョ ン を バ ッ チ 処 理 す る 際 に UnicodeDecodeError が発⽣するケースが存在することについて、原因と対応状況をまとめました。 【現象報告と経過】 2022 年 11 ⽉ 14 ⽇⽉曜⽇ 16:15:11 UTC+9 GuLaNak 22: いつもお世話になっております。 私は GRASS 機能の v.set.distance 機能を⽤いて、点から避難施設位置への最短経路探索を⾏い、 避難者の割り当てを⾏いたいのですが、エラーで UnicodeDecodeError: 'cp932' codec can't decode byte 0x84 in position 35: illegal multibyte sequence と出てしまい、これは⽂字コードの違いによるエラーとはわかるの ですが、これは⽤いているレイヤのデータの⽂字コードを shift-JIS にしなければいけないという認識でよろ しいでしょうか? それともパスに全⾓⽂字が含まれてはいけないという認識でしょうか? 私はユーザーフォルダ名に全⾓⽂字とスペースが使われておりますが、違うアカウントでユーザー名に半⾓ しか⽤いていないアカウントでも同様のエラーが発⽣してしまいます。 もしなにか解決策があればお願いします。 これ以外に必要な情報があればお願いします。 初めての質問で、ご迷惑をおかけします QGIS のバージョン:3.22.10 OS:Windows 10 2022 年 11 ⽉ 14 ⽇⽉曜⽇ 17:01:06 UTC+9 GuLaNak 22: エラーメッセージ Traceback (most recent call last): File "C:\PROGRA~1/QGIS32~1.10/apps/qgis-ltr/./python/plugins\grassprovider\Grass7Algorithm.py", line 433, in
processAlgorithm Grass7Utils.executeGrass(self.commands, feedback, self.outputCommands) File "C:\PROGRA~1/QGIS32~1.10/apps/qgis-ltr/./python/plugins\grassprovider\Grass7Utils.py", line 397, in executeGrass
for line in iter(proc.stdout.readline, ''):UnicodeDecodeError: 'cp932' codec can't decode byte 0x84 in position 35: illegal multibyte sequence Execution failed after 0.62 秒(seconds) 出⼒レイヤの読み込み 次のレイヤは正しく⽣成されませんでした。 C:/Users/◦◦◦◦/AppData/Local/Temp/processing_odreTI/38bad66d5c174a9295bf22b9d4ad8c6a/output. gpkg QGIS メインウィンドウの"ログメッセージパネル"をチェックすると、アルゴリズムの実⾏に関する詳 細情報が表⽰されます。 2022 年 11 ⽉ 14 ⽇⽉曜⽇ 17:01:06 UTC+9 GuLaNak 22: 嘉⼭と申します (ご本⼈には重複返信してしまったかもしれません) このエラーは以前も報告されていて GRASS のコマンドを QGIS の Python の⼦プロセスとして 動かしてみて、その時の出⼒結果⽂字列を Python プログラム内で取り込んで解釈しようとしたら デコードできなかったという話だったと思います。 データやら実⾏環境やらをいろいろ変えてもうまくいかなかったです。 エラーの修正はむつかしそうなので 単体の GRASS で同じデータに対して処理を⾏ったらうまくいったと いう話が以前はありました。去年の今頃の話題になってました。 Windows での問題で Mac や Linux ではうまくいくみたいな話だったかな ワールドワイド⾔語サポートで Unicode UTF-8 を使⽤という設定にすると警告: マップセットの平⾏ロック はウィンドウズではサポートされていません。が出るという感じだったかな。 早い解決策はコマンドラインの GRASS で処理してみるのがいいみたいです。 mooya 2022/11/15 12:09:32 To: QGIS 初⼼者質問グループ こんにちは 3.16 の exe 版をインストールして、with Grass のショートカットで起動すると使えると思います。この場 合も多バイト⽂字は使えません。 https://download.qgis.org/downloads/QGIS-OSGeo4W-3.16.16-1-Setup-x86_64.exe 本家にも issue が上がっますが、なかなか、 、
https://github.com/qgis/QGIS/issues/29712 Missing CP949 (Korean) encoding at GRASS processing #29712 https://github.com/qgis/QGIS/issues/29712
v.clean UnicodeDecodeError when special character (German Umlaute) in path #29845 https://github.com/qgis/QGIS/issues/29845 【バグフィックス】 本件に関して、MIERUNE の Kanahiro Iguchi さんがパッチを提供して、Sep 26, 2022 でマージされていま す。 Fix GRASS7/SAGA UnicodeDecodeError in QGIS of Windows-Japanese or others #49226 https://github.com/qgis/QGIS/pull/49226 https://github.com/qgis/QGIS/pull/49226/commits/3908efb4ba1db51394c17dcebc14eab98067a781 python/plugins/grassprovider/Grass7Utils.py ex) C:\Program Files\QGIS 3.34.10\apps\qgis-ltr\python\plugins\grassprovider\Grass7Utils.py 原因:GRASS の stdout の⽂字列リードに失敗した場合、エラーとして''(空⽂字)を返していた。 変更:UnicodeDecodeError の場合に''(空⽂字)を返す様にした。 上記のファイルの python コードを確認して、 この様になっていれば、発⽣しないということになっています。 対応/⾮対応のチェック結果は下記の通りです。 QGIS3.1.x〜QGIS3.21.x:パッチ⾮対応(未チェック) QGIS3.22.0:パッチ⾮対応 def readline_with_recover(stdout): """A method wrapping stdout.readline() with try-except recovering. detailed in https://github.com/qgis/QGIS/pull/49226 Args: stdout: io.TextIOWrapper - proc.stdout Returns: str: read line or replaced text when recovered """ try: return stdout.readline() except UnicodeDecodeError: return '' # replaced-text
QGIS3.24.3:パッチ⾮対応 QGIS3.28.0:パッチ対応済 QGIS3.28.1:パッチ対応済 QGIS3.34.1:パッチ対応済 旧バージョンで発⽣する場合、Grass7Utils.py の該当箇所を同じ様に修正すると良いと思われます。 なお SAGA についても同様のパッチがマージされています。 【その他の確認事項】
QGIS から GRASS processing サービスの起動については下図のバッチ処理を経由しています。 ・apps\grass\grass84\etc\env.bat(13)で、GRASS_PYTHON 環境変数を作成する ・bin\grass84.bat(18)で、%GRASS_PYTHON% %GISBASE%\etc\grass84.py %* を ⼦プロセス起動する ・bipython-grass84.bat(16)で、%GRASS_PYTHON% %* を ⼦プロセス起動する 上記のバッチ処理部分では、⼦プロセス起動の場合の UTF8 コードページ 65001 を固定しておらず、英語環 境以外では、起動時の状況で 932 からデフォルトのコードページ 437 に変化する可能性があります。 コードページ 65001 の状態では、ANSI 出⼒に UTF8 のテキストが流れてくることを前提にしていて、ANSI 出⼒でテキスト出⼒したりするときに⽂字コードの変換は⾏いませんので、既存の Shift_JIS のテキストを ANSI 出⼒するようなコマンドを実⾏すると標準出⼒が⽂字化けします。 フォントの環境変数の問題 apps\grass\grass84\etc\env.bat(16)で、FONTCONFIG=%GISBASE%\etc\fonts.conf 環境変数が設定され るが windows 版インストーラ版では fonts.conf ファイルがない。 qt および GRASS-GIS/SAGA で画⾯上のフォント表⽰が異常になる場合、 fonts.conf を参照しようとして失敗 したあとの処理に問題があると考えられます。 processing についてはコミット:3908efb4ba1db51394c17dcebc14eab98067a781 で回避されるはずです。 -以上-