GRASSの使用方法/シェープファイルのデータ位置(座標)変更

484 views
Skip to first unread message

ななか

unread,
May 25, 2020, 2:12:08 AM5/25/20
to QGIS初心者質問グループ
はじめまして

ある地図の上に建物データ(シェープファイル)を重ねて配置したいと考えております.
しかし,その建物データは,地図を基準とすると,南北東西方向に数メートルずれてしまっています.
そのため,QGISにてシェープファイルのx,y方向(南北東西方向)をずらし,建物の位置を地図と合致させたいと考えております.

上記を行うために,QGISにおいてGRASSのプラグインを使用したいと考えております.
GRASSのインストールは,各webサイトにて使用方法を調べた結果,以下の方法でできるということがわかりました.

プラグイン>プラグインの管理とインストール>GRASSにチェックをつけて有効にする
有効にすることで,GRASSを使用するためのアイコンがツールバーに出る

しかし,当方のQGIS(バージョンは3.12)においては,プラグインの管理とインストールを開いても,未インストール,すべてのプラグインの中にGRASSというものはありませんでした.


以上より,GRASSを使用している方がおられましたら,QGISにGRASSをインストールするために何が足りていないのか,また,GRASSのインストール手順について教えていただけませんか.
そして,QGIS内でシェープ形式のデータをx,y方向(南北東西方向)に任意の距離移動させる方法として,GRASSを使用する以外に何か方法がありましたら,教えていただけると幸いです.

よろしくお願い申し上げます.

吉田光宏

unread,
May 25, 2020, 2:50:36 AM5/25/20
to QGIS初心者質問グループ
ななかさん
ご苦労様です。
1.ちなみに建物データは基盤地図情報からの取得でしょうか。それとも自分でお作りになった物でしょうか。
2.使用されている地図は何でしょうか。

ななか

unread,
May 25, 2020, 2:53:38 AM5/25/20
to QGIS初心者質問グループ
吉田光宏様

早速のご質問ありがとうございます.
以下に回答いたします.

1,基盤地図情報から取得したデータです
2.地図は衛星画像です(両者とも座標系は統一しております)

福岡

unread,
May 25, 2020, 2:55:30 AM5/25/20
to QGIS初心者質問グループ
ななか 様

こんにちは
Windows10 Pro、QGIS3.12.2 の環境で試してみました。

まず、QGISは「QGIS DeskTop 3.12.x with GRASS 7.8.2」をお使いください。
次にプラグインですが「Processing」を有効にしてください(GRASSも有効にすることができます)。
※「QGIS DeskTop 3.12」でもプロセッシングツールにGRASSが表示されますが、うまく動作しないようです。

画面右側にプロセッシングツールボックスが表示されます。
この中から「GRASS - ベクタ(v.*) - v.transform」をお使いになれば良いと思います。
なお、移動元のファイルのパスに日本語が含まれていると正常に動作しないようです。

GRASS本体をお使いになっても良いと思いますが、私は使い慣れていなので、もっぱらプロセッシングツールでGRASSの機能を使っています。
Message has been deleted

ななか

unread,
May 25, 2020, 3:21:38 AM5/25/20
to QGIS初心者質問グループ
福岡様

これまでQGIS Desktopを使用していたため,GRASSが使用できなかったようですね.
QGIS with GRASSというものが併せてインストールされていることを失念しておりました.
こちらを使うことで,無事,GRASSの使える環境にすることができました.

これから,教えていただいた通り,操作していきます.
ご丁寧に説明いただきありがとうございます.

ななか

unread,
Jun 3, 2020, 3:14:14 AM6/3/20
to QGIS初心者質問グループ
福岡様

先日はご丁寧に教えていただき,ありがとうございました.
仰っていた通り,「GRASS - ベクタ(v.*) - v.transform」を実行するところまではできたのですが,実行時にエラーが出てしまいます.
まず,マップセット内で編集する必要があると別のwebサイトで拝見したので,マップセットを新規で作成し,その状態で,ベクタレイヤを追加しました.
そして,v.transformを選択し,シフト値等を入力したのですが,「出力するベクトルマップ名:値がありません」というエラーが出てしまします.

このようなエラーが出るのは,エラー文にもある通り,ベクトルマップ名が原因だと考えております.
「入力するベクトルマップ」という項目にはドロップダウンリストがあり,候補としてはマップセット名とPERMANENTという2つがあります.
しかし,別のwebサイトで,ベクトルマップはシェープファイル等という記載がありましたので,この度はベクタレイヤのファイル名を入力しております.

一応,ベクトルマップにマップセット名,PERMANENT,シェープファイル名の3つをそれぞれ入れ,実行してみたのですが,どれも同じ結果でした.
「入力するベクトルマップ名」には,どの名前を入力すればよいのでしょうか.
また,上記のエラーが出てしまった場合,どのように対処すればよいでしょうか.

前回ご回答いただいてからずいぶん遅い質問となってしまいましたが,お答えいただけると幸いです.
よろしくお願いいたします.

福岡

unread,
Jun 3, 2020, 4:53:53 AM6/3/20
to QGIS初心者質問グループ
ななか 様

こんにちは

前にも書いたようにGRASSは本格的に使ってませんので、プロセッシングツールでGRASSの機能を使う方法で説明します。
この方法だとマップセットの設定など、GRASS特有の設定をする必要がありませんので使いやすいと思います。

まず、普通にベクタファイルをQGISに読み込んでください。
プロセッシングツールボックスが表示されていない場合は、メニューの「プロセッシング」で「ツールボックス」をクリックして表示させてください。
 ※「ツールボックス」が無い場合は、「プラグインの管理とインストール」で「Prosessing」を有効にしてください。

GRASSの中に「ベクタ(v.*)」がありますので、これを展開します。

fig_1.png


「v.transform」をダブルクリックして立ち上げます。
画像の例はXシフトとYシフトに「200」と入力しています。これで「実行」ボタンを押します。

fig_2.png


シフトした地物のレイヤが作成されます。
このレイヤは一時的なものなので、レイヤの上で右クリックして「エクスポート - 地物の保存」でお望みの形式で保存します。

fig_3.png


ななか

unread,
Jun 3, 2020, 12:30:07 PM6/3/20
to QGIS初心者質問グループ
福岡様

早速のご返信ありがとうございます.
プロセッシングツールを有効にしたものの,使い方を存じておりませんでしたので,上記のような手順を踏んでしまっておりました.
使用方法までご丁寧に教えていただきありがとうございます.

教えていただいた通り実行しましたが,UnicodeDecodeError 'cp932'というエラーが出てしまい,実行完了できませんでした.
シェープデータのヘッダーを別の可視化ソフトで見てみると,整備完了日や表示区分といった日本語のリストがありましたので,それらをエディタで英語に編集しました.
そうすると,先ほどのエラーは解消されたのですが,新たにwrong field type for fidというエラーが出てしまいました.
シェープデータのヘッダーにもfidというものはあったので,そちらを削除してみて,再度実行したのですが同様のエラーが出てしまいました.
これは何が原因で起こっているのでしょうか.

福岡

unread,
Jun 3, 2020, 8:00:20 PM6/3/20
to QGIS初心者質問グループ
ななか 様

おはようございます。

お知らせくださったエラーメッセージは、2バイト文字(日本語)が絡んでいる場合が多いです。
そこでデータをいじりながら、どのような時に不具合が発生するかを試してみました。

1 パスに日本語が入っている
 ファイル名やフォルダ名が日本語の場合、エラーが発生して処理してくれません。

2 文字のエンコードがSystem(shift-jis)の場合
 処理はしてくれますが、属性テーブルの日本語が文字化けします。

3 文字のエンコードがUtf-8の場合
 フィールド名が日本語の場合、エラーが発生して処理してくれません。
 フィールド名が英数文字の場合、地物データの日本語は文字化けせずに処理してくれます。

結論としてはパスに日本語が入っていなことと、文字のエンコードをUtf-8にしてフィールド名に日本語を使わないことがポイントのようです。
フィールド名の変更は、プロセッシングツールの「ベクタテーブル - 属性のリファクタリング」をお使いになると良いと思います。

ななか

unread,
Jun 3, 2020, 8:41:50 PM6/3/20
to QGIS初心者質問グループ
福岡様

おはようございます.

手元のデータでは,エンコードがshift-js,データは英語の状態でした.
パスにも日本語が入っていないことを確認済みです.

そのため,エンコードをUTF-8にし,ベクターデータを開く際にもUTF-8を選択しました.
そうすると,再度,赤字でWrong field type for fid,その下にグレーでエラー:Unable to create columnという文章が出ました.
フィールド名はすべて英数字となっていることを教えてくださった属性のリファクタリングで確認しております.

エラーが出ているので,データ自体は出力されておりませんが,レイヤ一覧のところにアフィン変換済みベクタという項目だけは増えておりました.
その情報を見ると,やはりフィールドが3つしか生成されておりませんでした.
他に原因となることはありますか.
よろしくお願いいたします.

福岡

unread,
Jun 3, 2020, 9:26:56 PM6/3/20
to QGIS初心者質問グループ
ななか 様

うーん、なかなか原因が特定できないですね?

そこで代替案です。
プロセッシングツールにお求めの機能がある他のツールを探してみたところ、「ベクタジオメトリ - 平行移動(translate)」というツールをみつけました。
このツールですと、文字のエンコードにも悩まされないようですので使いやすいと思います。

よろしければお試しください。

ななか

unread,
Jun 3, 2020, 9:56:34 PM6/3/20
to QGIS初心者質問グループ
エンコードなどは先ほどと同じ条件とし,ベクタジオメトリ - 平行移動(translate)を実行いたしました.
無効な地物があるとのことでエラーが出ましたが,「無効な地物のフィルタリング」の設定を「フィルタリングしない」あるいは「不正なジオメトリを無視」に変更することで,無事,問題なく平行移動することができました.
どこが無効な地物として判断されたのかは不明ですが(IDは出ておりましたが,そこがどこなのかは把握できておりません),全体を見る限り,大きな欠損は見られないので,上記の設定で平行移動を行おうと思います.

何度も当方の質問に答えていただきありがとうございました.
おかげさまで,無事,解決いたしました.

福岡

unread,
Jun 3, 2020, 11:05:40 PM6/3/20
to QGIS初心者質問グループ
ななか 様

うまくいったようで、ほっとしました。

余力のあるときで良いと思いますが、プロセッシングツールの「ジオメトリ - 有効性チェック」(前のバージョンでは「妥当性チェック」)をお試しになられると良いと思います。
これを使うと、どこに不正な箇所があるか発見しやすいと思います。

私自身の体験では「ポリゴンの自己交差」しか見かけたことがありません。輪ゴムの先が捻れているようなイメージですね。
おそらく最も多い原因だと思われます。

ななか

unread,
Jun 4, 2020, 3:44:47 AM6/4/20
to QGIS初心者質問グループ
福岡様

本当に助かりました.
また,不正な箇所の探し方まで教えてくださり,ありがとうございます.
問題の箇所を特定することができました.

これからは自身でプロセッシングツールを使いこなせるよう,頑張ります.
改めて,ありがとうございました.
Reply all
Reply to author
Forward
0 new messages