ポリゴン内部に代表点を作成したい

1,025 views
Skip to first unread message

しゃむ

unread,
Aug 21, 2020, 5:32:10 AM8/21/20
to QGIS初心者質問グループ
お世話になります.

表記の通りなのですが,ポリゴンの代表点を作成したいのですが,
ベクタ→ジオメトリツール→ポリゴンの重心
で重心を作成すると,ポリゴンの形状が複雑だと重心がポリゴン外に作成されることがあります.

ポリゴン内部に代表点を作成する方法をご教授いただけませんでしょうか.

以下のサイトで紹介されているものをイメージしています.

よろしくお願いいたします.

福岡

unread,
Aug 21, 2020, 6:28:00 AM8/21/20
to QGIS初心者質問グループ
しゃむ 様

こんばんは

フィールド計算機でポイントのX座標とY座標を計算して、その結果からCSVファイルを作成し、読み込んでみるというのはどうでしょうか?

「point_on_surface」という関数の説明ですが、「ジオメトリの表面上に存在することが保証される点(内部保証点)を返します。」となっています。
これを使うと良いのではないかと思います。

X座標を得るための式:x ( point_on_surface ( $geometry ))
Y座標を得るための式:y ( point_on_surface ( $geometry ))

しゃむ

unread,
Aug 21, 2020, 6:51:07 AM8/21/20
to QGIS初心者質問グループ
福岡さま

早々の回答,ありがとうございます.
調べてみたところ,自分のやりたい作業ができそうです.
ありがとうございます.
本日は時間もないため,後日作業報告いたします.

1点だけ,追加で質問です.
こちらのpoint_on_surfaceで行われている,具体的な計算をご存知の方はいらっしゃらないでしょうか.
ぜひご教授いただきたいです.

よろしくお願いいたします.

キタ

unread,
Aug 21, 2020, 12:33:23 PM8/21/20
to QGIS初心者質問グループ
プロセッシングツールボックスに「内部保証点」がありますので、こちらを実行すれば、ポリゴンの中に入ったポイントを作成できます。

キタ

2020年8月21日金曜日 18:32:10 UTC+9 しゃむ:

ありた

unread,
Aug 22, 2020, 7:51:37 AM8/22/20
to QGIS初心者質問グループ
こんにちは

Point on Surface は、 QGIS の内部で GEOS というライブラリの機能を
呼び出すことで実行されています。

最終的には GEOS の以下のファイルで計算されています。

(実際にはドーナツ状のポリゴンの場合やマルチポリゴンを考慮してもう少し複雑ですが、)
おおまかなアルゴリズムとしては、ポリゴンの最上点と最下点の Y 座標の平均(中心線)の
両サイドからそれぞれ最近点を探し、その2点の Y 座標の平均を計算します。

その平均の線でポリゴンを切ったとき、大きな断面となる部位の中心点を求めているようです。

PointOnSurface.png



なぜ、単純にポリゴンの中心線を使っていないのかはよくわかりません。
こちらのアルゴリズムの方が、頑健なのかもしれません。

しゃむ

unread,
Aug 26, 2020, 9:06:10 PM8/26/20
to QGIS初心者質問グループ
みなさま

お返事が遅くなってしまい,申し訳ございません.
ご教授いただいた方法で,先ほど無事代表点を作成することができました.

また,計算の中身の解説もありがとうございました.
ソースコードがどこで公開されているのか,調べてもわからなかったので,大変助かりました.

ありがとうございました.

Reply all
Reply to author
Forward
0 new messages