search
LoginSignup
9

More than 1 year has passed since last update.

posted at

updated at

Organization

QGISで河川の上流からラベル番号をつける

image.png

はじめに

業界にほほえみを振りまく記事が集うMIERUNE Advent Calendar 2020 19日目の記事です。

先日社内で話題にのぼったときに昔よくやってたニッチな手法を思いだしたので、メモとしてインターネッツに放流しておきます、どのくらいニッチかというと華麗なアンコウのつるし切りのやり方マニュアルくらいニッチです。

河川の図はお決まりがそこそこあります。その中でけっこう厄介だったのが 上流(または下流)から各ポリゴンのラベルが順番についていないといけないというルールです 。根性と残業を投資して属性入力でポチポチやっている方がいるかもしれないので、さっさと作って家に帰りましょう。Pythonなどでもさっくり華麗にできそうですが、とりあえずQGISのGUIベースでやってみますね。

こんな方に

この記事は

  • QGIS歴2ヶ月くらいで一級河川案件の図面担当になってしまった。
  • 道路や水道管のデータの方向に沿ったポリゴンにNoをラベリングをしたい。
  • ポリゴン数百個に一生懸命手でNoを入力していたら「あ、ごめん追加」といわれて7個ほどポリゴンが書き足されてしまい、ナンバリングがやり直しになった(なお締切は明日)。

…というかた向けに書いています。

大まかな手順

image.png

処理

サンプルデータはこちらにあります。データはOpenStreetMapより多摩川周辺のデータをいただきました、いつもありがとうございます。
※Data by OpenStreetMap contributors, under ODbL

中心線を引く

QGISを立ち上げて、対象ポリゴンを開いたのち、これらの並びを決めるための中心線をラインデータで書きます、大雑把でも方向とカーブが大まかに合わせてあればよいです。
河川の場合は中心を示す流心線、道路の場合も道路中心線をQuickOSMプラグインなどを用いてOpenStreetMapから持ってきてもOKです(線分が切れている場合があるので、その際はつなげてくださいね)。waterway=stream をもらってきました。

image.png

等間隔ポイントを作成

では、中心線からQGISで等間隔ポイントを発生します。プロセッシングツールボックスの検索窓にpointと入力するとジオメトリに沿った点群という機能がでてきますので、起動します。
この機能は、読んで字のごとく入力レイヤに対して等間隔ポイントを生成してくれます。ラベルを付けたいポリゴンの分布具合にもよりますが、今回は50m間隔で生成してみます。

image.png

image.png

ちゃんとラインの上に等間隔でポイントが出ていますね

image.png

実行後生成されるポイントデータ(point)には始点からの距離がdistanceフィールドに入っています。これをポリゴンの並び順の参照にします。

image.png

ポリゴンと空間結合

では最も近いポイントをポリゴンと空間結合します。先程と同様にプロセッシングツールボックスの検索窓にnearと入力すると属性の最近傍結合という機能がでてきますので、起動します。この機能は、Aというレイヤに対し、もっとも近いBレイヤのフィーチャーの属性を取り込んでくれます。
image.png

起動後、入力レイヤ(くっつけたいデータ)にポリゴン…今回はparkを、第二の入力レイヤ(属性を持ってきたいデータ)に、さっき作成したpointのデータを指定して実行を押します。
image.png

そうすると、各ポリゴンに最も近いポイントの属性が結合されます
image.png

並び替え&ラベル付け

このあとは、河川のdistanceフィールドを並び替えて、その順番にラベルの属性を入れれば終わりです。

同様にプロセッシングツールボックスの検索窓にorderと入力すると式による並び替えという機能がでてきますので、起動…

image.png

とおもったのですが、2020/12現在この機能にはバグがあり、並び替えがちゃんと機能しづらいようで、GitHubでも報告もされています。そのうちなおるものと信じて、Sort and Numberプラグインで解決しましょう
image.png

Sort and Numberプラグインをインストール&起動後、さっき最近傍結合処理を行った結果のデータ(ここでは最近傍結合データ)を指定し、並び替えのフィールドにdistance を指定し、New field nameに新規で作成される最終的な結果のlabel_noを入力し、OKを押します(基本昇順ですが、降順にしたい場合はinvertにチェックを入れましょう)。

image.png

これで中心線の始点から順にラベルIDが付与されています
image.png

あとはよしなにラベルを付けると、ヘッダ画像のような並びで表示ができますね。これで1000個でも10000個でも流れに沿ったラベルがつけれます。なお、中心線との関係上多少前後することはありますので、その際はPOINTの配置を調整するか、右岸左岸などで別のラインを作るなどすればできるかと思います。

さいごに

並び替え機能の不具合さえがなければプロセッシングでモデラーを作って華麗に公開!とかしたかったんですけど、まあ今度時間ができたら考えますね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
9