ポリゴンからラインへ変換した地物の重複を削除したい

3,056 views
Skip to first unread message

Bun

unread,
Oct 12, 2017, 1:24:47 AM10/12/17
to QGIS初心者質問グループ
お世話になります。
ポリゴンからライン変換した場合、隣接したポリゴンだと重複したラインがいくつか生成されてしまいます。
このとき、重複を削除もしくは重複しないようにライン変換できないでしょうか。
結果としてほしいのは、ポリゴンの周囲延長なので、
ライン変換せずに計算可能であればその方法もご教授願いたいです。
よろしくお願い致します。

AAEE

unread,
Oct 12, 2017, 1:56:06 AM10/12/17
to QGIS初心者質問グループ
ポリゴンの周長であれば、数式ダイアログに「$perimeter」を入力すれば結果が得られます。
お試しください。

Bun

unread,
Oct 12, 2017, 6:59:09 AM10/12/17
to QGIS初心者質問グループ
すみません、書き方がわるかったです。
個々のポリゴンの周長ではなく、
いくつかの隣接したポリゴンのレイヤにおいて
ポリゴンを構成しているラインの延長を重複せずに求めたいです。

wata909

unread,
Oct 12, 2017, 10:18:53 PM10/12/17
to QGIS初心者質問グループ
こんにちは。

ひとつの解決方法としては、重複したラインを削除して、計算する方法があると思います。
mmqgisというプラグインに、「Delete Duplicate Geometries」という機能があるので、そちらを使って重複ラインを削除、そのあとの線の長さを計算するということが可能かと思います。

以下は、おまけのコメントです。
QGISではなく、GRASS GISを使う方法があります。
少し前に話題に上がりましたが、QGISで主に使うShapefile形式は、トポロジー構造を保持することができません。そのため、今回のような問題が起きます。
GRASS GISでは、ベクタ形式のデータがトポロジー構造を保持するので、重複のない境界を保持することが可能です。
QGISに比べるとちょっととっつきにくいのが玉に瑕(かつ、ここはQGIS初心者掲示板(^^;)なのですが、参考までにお知らせします。
以下のコマンドで重複のないラインの長さを算出することができます。
元データはpolyという名前でデータベースに格納され、それをboundという名前の境界データに変換し境界長を算出し、それをShapefileにエクスポートする例です。

v.category input=poly out=bound layer=2 type=boundary option=add
v.db.addtable bound layer=2 col=”length double precision”
v.to.db bound option=length col=length layer=2
v.out.ogr input=bound layer=2 type=boundary output=C:\tmp\boundary.shp format=ESRI_Shapefile

(このやり方を応用すると、Aという属性のポリゴンとBという属性のポリゴンが隣接する長さを算出、なんてこともできます)

GRASSの初心者向けの解説としては、以下が参考になると思います。

Bun

unread,
Oct 14, 2017, 12:09:52 AM10/14/17
to QGIS初心者質問グループ
wata909様

ありがとうございます。ご教授いただいた方法を試してみました。
mmqgisというプラグインをいれて「Delete Duplicate Geometries」をやってみたのですが、
ポリゴンをラインへ変換すると、ポリゴンの周囲の閉じたポリラインがひとつのフィーチャとなっており、
重複した線が一つのジオメトリとして認識されず、消去できませんでした。
そこで別の質問なのですが、ポリラインを単要素に分解できるようなプラグインはありませんでしょうか。
もしそれができれば重複ジオメトリが削除されてほしい結果が手に入るかと思います。

GRASSは以前かじったことはあるのですが、私には難解で。
ただ、もしかしたらですが、プロセッシングのGRASSコマンドから、ポリゴンからライン変換すると重複しないラインが手に入るのかもしれませんね。
いま、私のパソコンではプロセッシングのGRASSコマンドが使用できないので確認できないですが・・・。

きた

unread,
Oct 14, 2017, 12:48:39 AM10/14/17
to QGIS初心者質問グループ
ラインをノードごとに分割するのは、「プロセッシングツール→QGISジオアルゴリズム→ベクタジオメトリツール→Explode Lines」で分割することができます。

きた

きた

unread,
Oct 14, 2017, 1:13:51 AM10/14/17
to QGIS初心者質問グループ
ノードで分割したラインをつぎの2つの方法で重複地物の削除を行ってみました。
1.mmqgisプラグインのDelete Duplicate Geometriesを実行
2.プロセッシングツールの「重複ジオメトリの削除」を実行

<結果>
1.比較的早く処理が終わりますが、重複の削除は行なえませんでした。
2.かなり処理時間がかかりますが、重複の削除を行うことができました。

私の環境(Win10_64bit、QGIS2.14.18)ですので、処理時間等は環境によって変わる場合があります。
参考にしてください。

きた

wata909

unread,
Oct 14, 2017, 1:34:16 AM10/14/17
to QGIS初心者質問グループ
きたさん
フォローありがとうございます。

Bunさん
実はご紹介したコマンドは、processingツールからは使えない様でした。たぶん、GRASSのデータベースにインポートする必要があるからだと思います。

Bun

unread,
Oct 15, 2017, 9:54:13 PM10/15/17
to QGIS初心者質問グループ
きた様、wata909様

ありがとうございました。
ご教授頂いた方法でなんとか延長を求められそうです。
ただ、きた様の2の方法でも明らかに重複しているのに
削除されていないフィーチャもあり、いくつかは手で削除しました。
少し疑問が残りましたが、これはおそらく元のデータの問題なので、
この質問は解決とさせていただきます。
お世話になりました。
Reply all
Reply to author
Forward
0 new messages