「GIS」カテゴリーアーカイブ

QGIS でラインに対して平行なラベルを付けるには

QGISでラインに平行なラベルを付ける

QGIS 3.4が発表されているのに、今更2.18について何で書いてるのか・・・?という疑問は無視して、QGIS 2.xでラインに平行なラベルを書くための設定を説明します。

 

デフォルトの表示

QGISでラインに対し平行なラベルを表示させようとすると、回転角が上手く計算できずに困ったことはありませんか?
私は、いつも悩みます。
2点で構成された直線aに水平なラベルを描くのですが、回転角によって表示にバラツキが生じます。

デフォルトでは、こんな感じに表示されます。


図1 デフォルト表示

図1に示した表示はデフォルトでの表示例です。
一見、回転角に合わせて表示されている様にも見えますが、線分を360度回転させた時に必ず上もしくは左に表示されています。
今回の目的は、線分の始点(P1)と終点(P2)が反転した場合には、反転して表示して欲しいので、目的とは合いません。

この現象は、QGIS 3.xでも同じようになります。

ちなみに、図1の線分に平行して表示されている数値はP1→P2に向けた線分の回転角になります。

線分の回転角は以下の計算で算出しています。

【数式1】

 

線分の回転に合わせてラベルを回転させる

ここから、線分の回転角に合わせてラベルを回転させる設定を施します。

 

図2 ラベルの配置設定

ラベルの配置設定で以下の項目を設定します。
①「配置」→「許容される位置」→「ラインの方向に依存した位置」を指定します。
②回転の角度を指定します。
回転の角度は以下に示す数式を指定します。

【数式2】

数式1で示した計算で表示出来れば良いのですが、どうも線分の回転角とラベルの回転角は、回転方向が異なっている様です。
その為、「360-」とすることで、回転角を逆方向にしています。
更に、このままですと線分に対して垂直にラベルが表示されてしまうため、最後に「+90」をすることで水平な角度へ変換しています。

QGIS 3.xでは、この計算が異なります。
「360-」を除いた以下の数式になります。

【数式3】

 

次に、レンダリングの設定を変更します。

図3 ラベルのレンダリング設定

ラベルの「レンダリング」で「ラベルを逆さまに表示する」を「回転が指定されている場合」に設定します。

設定は以上になります。

結果は以下の通りです。

図4 結果表示

P1とP2が逆の場合は、応用問題ですから適当に数式を変更するなどの対処が必要となるかも知れませんが、概ねこれで参考情報にはなるでしょう。

QGIS2.18と3.0.1のインストールした環境設定一覧

QGIS3.0.1と2.18を共存させた結果のインストーラのパッケージ選択画面を公開しておきます。
私の個人環境なので、他の人が必ずしも同じになるとは限りません。参考情報です。

トライされる方は、前の記事は以下です。

QGIS 3.xをインストールしてみた。QGIS 2.18と共存。

通常不要なものも含まれていると思いますので、ご自身でご判断下さい。

 

QGIS 3.xをインストールしてみた。QGIS 2.18と共存。

背景

QGIS 3.0がリリースされて、OSGeo4Wがインストールされていない綺麗な環境にインストールするのは、何も気にせずにインストール出来たのですが、QGIS 2.18がインストールされている環境にインストールしようとしたら、ちょっとだけ引っかかったので、記録に残します。

既に、QGIS 2.18.xがインストールされている環境を前提に進めます。
インストールを行った環境はWindows 10です。

追記:どうも、QGIS 2.18.xからだと上手く3.0.1をインストール出来たのですが、2.12からだとNGでした。そこで、私の環境設定内容を下記に貼り付けておきます。

QGIS2.18と3.0.1のインストールした環境設定一覧

はじめに

私は、QGIS 2.18.xを使用しており、いきなりQGIS 3.xへ更新するには抵抗がありました。使えなくなるプラグインなどがあり、仕事で使うにはちょっと困ります。
そこで、QGIS 2.18.xを残しつつ、QGIS 3.xをインストールしたいと思いました。

と言うことで、以下ではQGIS 2.18.xを残しながら、QGIS 3.xをインストールしてどちらも使用できる環境を構築します。
ただし、OSGeo4Wを使用していることを前提とします。

準備

準備と言いましても、特に何をダウンロードしてとか必要ありません。
新規でインストールされる方は、下記URLより環境に応じたインストーラをダウンロードしてください。

https://qgis.org/ja/site/forusers/download.html

 

OSGeo4WのSetupを起動します。

ここで、「アドバンスインストール」を選択します。

「インターネットからのインストール」で次へ

次も特に気にせず次へ

更に、次へ。

まだまだ次へ。

 

こいつも次へ・・・・楽々インストール?

やっと来ました!ここから本番です\(^o^)/

「Desktop」の前にある「+」ボタンをクリックして展開します。

ここでは既に3.xがインストールされた状態の画面を示していますが、上記の状態になる様に、インストール対象を選択します。

具体的には、以下の内容になります。

qgis:QGIS Desktop
qgis-dev
qgis-dev-pdb   <==必要ないかも?
qgis-full
qgis-full-dev
qgis-ltr            <==これは2.18を残すためです。それ以前のバージョンを使っている方は、更新されてしまいます。
qgis-ltr-full
qgis-rel-dev
qgis-rel-dev-pdb

これ以外は気にしないで大丈夫です。
上記の中にも不要なものが含まれているかも知れませんが、私の環境ではこんな感じでした。
間違って、3.0.0-4をインストールすると、上手く動作しませんでした。

これで、設定が終わりましたので、次へ進みます。

後は勝手にインストールが進みます。

!!!!!!!!!!!
ここで問題が!!!!!!!
!!!!!!!!!!!

OSGeo4WのSetupでインストールすると、qgis(Desktop)が最初は3.0.0-4しかインストール出来ません。
それが原因でQGIS 3.0を起動してもエラーで落ちる現象が確認できました。

解決方法は、再度、上記のインストール方法を繰り返すと、今度は3.0.1-1がインストール出来る様になります。
これでインストールし直すと、正常に起動出来る様になるみたいです。

Windowsメニューから両方のバージョンのQGISが起動することを確認してみてください。
一つの環境だけしか試していないので、大丈夫かな?

地図タイルの404エラーで文句を言われた時の対策

地図タイルを扱っていると、セキュリティ関係の方から、こんなことを言われることがある。

「大量のアクセスが発生していて、エラーがたくさん出ています。」
「攻撃されているんじゃないか?」

待て!
アクセスしている方向は、内部から外部への閲覧であり、そのエラーは外部のサーバへアクセスして、外部のサーバに存在しないファイルがたくさんあるということであり、方向が逆だろう!

と、まあこんなことです。

Web地図では、タイル配信されている場合に必要な領域だけタイル画像を作成ます。
例えば、日本の領域だけに限った地図タイルを作成した場合、日本以外の地域におけるタイル画像は存在しない為エラーが発生します。

地理院地図の西之島関係のレイヤを表示してみると、ほとんど404エラーが出っぱなしですw

プログラム上で404エラーは無視する設定を行っていますので、ブラウザで見る限りにおいてエラーは見掛け上発生していませんが、デバッガーで見てみると404エラーが大量発生しているのが解ります。

本題に戻ります。
セキュリティ担当者の勘違いも甚だしいと怒りを感じつつ、「このどド素人が!」と憤慨しても相手は遠い存在であり、面倒ですよね。

こんなこと遣りたくないんですよ。
理解してもらえる人はやらない方が良いのですが・・・・
でも、止むを得ず対策を講じなければならない時があったら、以下を参考にしてください。

画像が無いところは、透過状態な訳ですよね。
透過状態のファイルを無い時に送ってあげれば良いんですよね。

ということで、まずは透過画像を作成しました。
以下の画像を作成しました。

←ここに画像があります。

解らない人のために、ここからダウンロードできます。

そして、公開しているデータの存在しない番号に名前を変えてコピーしまくる・・・・・・嘘です(-_-メ)

次に、以下のファイルを作成します。

.htaccess

webmap_dirは、実際にalpha_plane.pngを保存した場所を指定してください。
ドメインは必ず指定してください。ドメインを指定しないと、代替画像へのリダイレクトを行いますが、404エラーは発生してしまいます。
ドメインを指定すると404エラーは発生しなくなります。

この.htaccessファイルを地図タイルのあるディレクトリの最上部においてあげることで404エラーを回避することが出来ます。

 

 

QTiles/QMetaTiles Pluginで作成したタイル画像の要らない部分を削除する

QGISでタイル作成したタイル画像で不要なタイル画像を削除する方法をまとめました。
透過のみのタイル画像というよりも、1カラーだけのタイル画像を削除する方法になっています。
厳密に透過画像のみを削除したい場合には、identifyの出力内容を調整する必要があります。

QGISで簡単にタイル画像を作成しようと思って、QTilesやQMetaTilesプラグインでタイルを作成したまでは良かった。

おぉ~!タイル画像が出来てるではないか!!

と、意気揚々で「次はこれ作ってぇ~!」とかお願いしていたら・・・・
やたら時間は掛かるんだけどねw

で、しばらくお願いして放置していたら・・・

「なんかエラーが出て、出来ません。」との連絡が。

なんで?

見てみると、ディスクがパンパン(爆)

よく見ると、タイル画像が重すぎて一杯やないですか!

でも部分的に削除すると言っても・・・・と悩みながらも、透過しているだけのタイル画像は必要ないわなw

どうやって判定しようかなぁ?

ちょうど、そのWindowsマシンには下記のツールが入っていた。

  • ImageMagick
    Linuxで画像弄るなら必須アイテム。Windows版も当然ある。
  • Gow
    Linux風のコマンドを使えるようにするツール。

で、使ったのがこんなコマンド

identify

今回扱った画像には以下の条件がある。

①PNG画像
②1つのタイル画像に含まれる色は、対象物があった場合は2色以上になる。
③対象物が無い場合は透過のみとなるため、1色のみになる。

上記を整理すると、「単色のpng画像は不要」ということになる。

で、どうやってそのリストを作って削除するか・・・・

まずはWindowsでやってみた。
以下のバッチファイルを準備する。

Gowを入れると、xargsやsedなどLinux標準のコマンド類が使える様になります。sedのみを使いました。
xargsを使って渡せば簡単じゃないか!と思われますが、これがWindows側の「|(パイプ)」とxargsの相性が悪く、受け渡す標準出力を溜めこんでします様です。
その為、大量のファイルを扱う場合には、ファイルのパスがバッファに積まてしまいエラーが発生するという問題を解決出来ませんでした。

使い方はこんな感じです。

タイル画像のあるフォルダーの根元に移動してから、この以下のコマンドを実行します。

①で削除対象ファイルの削除用コマンドをrun_del.batファイルへ書き出します。
それを②で実行する。

それだけですw

せっかくここまで読んで頂いたのに済みませんが、時間にメッチャ余裕のある方や、タイルファイル数がそれ程多くない方はこれでも全然OKです。
でも、タイル数が数十万とか数百万とかになってくると、Windowsのコマンドプロンプトは使い物になりません。
Power Shellを使え?とか言わないでください。信用してませんからw

で、仕方が無いのでLinuxにファイルをコピーしてから同じことをLinux上で実施して、結果をダウンロードしてくることにしました。

下手すりゃ、ファイル共有掛けて実行してもそこそこLinuxの方が速いかも知れないのですが・・・・

確実に速かったのでこれにした。

まずは、全てのファイルを圧縮しようと思うのですが、7zを使いました。

とは言え、数百万ファイルのファイルを圧縮するには相当な時間が掛かりますし、纏まったファイルの容量もデカくて取り扱いが不便です。
こまめに分けました。

それぞれのフォルダー毎に圧縮ファイルを作成します。

これでフォルダー単位の圧縮ファイルが作成されます。

圧縮ファイルをLinuxに転送します。

転送したファイルを今度はLinux上で解凍します。

次に、以下のコマンドで透過(1つのカラーだけ)のファイルを削除します。

Windows環境でやる何倍も速く実行できます。

 

 

 

QGISに地理院地図を追加する。

QGISで地理院地図が表示できるようにしたい!

業務で使用する地図は地理院地図がメインになっている。

そこでQGIS上でも地理院地図と整合性を取る為に、背景地図として地理院地図を表示させたいと思っています。

ねっとで調べてみると、TileLayer Pluginの情報が入手できた。

ということで、TileLayer Pluginをインストールする。
1)QGISのメニューから「プラグイン」→「「プラグインの管理とインストール」画面を表示

2)TileLayer Pluginを選択して、右下の「プラグインをインストール」をすればインストールが開始される。

#ここまでは至って簡単な操作で済む。

3)インストールの確認
QGISのメニューから「Web」→「タイルレイヤプラグイン」→「タイルレイヤを追加する」をクリックする。

こんな感じで表示されていればインストールは正常に行われています。

4)タイル情報の入手
以下のサイトからタイルの情報を入手します。

https://gist.github.com/minorua/7654132/download#

右側に表示されている「Download Gist」からファイルをダウンロードします。

解凍すると以下のファイルがあります。

GSIMaps.tsv
GSIMapsDisaster.tsv

この2本のファイルを適当なフォルダーへコピーします。
デフォルトの保存先に保存したり、プラグインの入っているフォルダーへコピーすると、プラグインを再インストールした時にこれらのファイルが消えてしまいます。
それを避けるためにも、適当なフォルダーを作成して保存しておく方が良いと思います。

ということで、今回は以下のフォルダーへコピーしました。

C:\Tools\TileLayerPlugin_AddLayer

5)タイルレイヤを追加する。

改めて、QGISのメニューから「Web」→「タイルレイヤプラグイン」→「タイルレイヤを追加する」をクリックし、以下の画面を表示します。

 左下の設定ボタンをクリックすると「タイルレイヤプラグイン設定」画面が表示されます。

先程保存したパスを指定します。

C:\Tools\TileLayerPlugin_AddLayer

おぉ〜!表示された!!

試しに「標準地図」を表示してみると。。。。あれ?表示されない????

マウスのホイールボタンをグリグリ・・・ズームレベルを変えてみると、表示されました。

 初期表示はなんか少しアクションが必要な様です。

また、タイルレイヤによってはサポートされているズームレベルが限定されているので、エラーが表示される場合があります。

重ね合わせたい適当なレイヤを表示させた後で、このツールで地理院地図を表示させてみると、すんなり表示出来たりします。

以下は、一時メッシュを表示させた状態です。

この状態で先程と同じように、「標準地図」を表示させてみると、

すんなり表示されました。レイヤの順番を入れ替えて

タイルのスタイル変更で透過率を適当に入れて、ラベルを表示させて、ズームアップしてみると・・・・

こんな感じに。

白地図に重ねてみるとこんな感じですね。

自前で作成したタイル画像や、今回追加した地理院地図以外のタイルレイヤを追加したい場合には、ダウンロードしたGSIMaps.tsvやGSIMapsDisaster.tsvを参考に新たなファイルを作成することで独自にタイルレイヤを追加することが可能です。

 

以上

 

 

CentOS 7にGDALとprojを入れる。

CentOS 7にGDALを入れます。

メンテナンス性を考えると、yumで入れたい。

ということで、EPELのリポジトリを登録してGDALをインストールする。

1)EPELリポジトリの登録

まずはyumを使ってepel-releaseのリポジトリをインストールします。

こんな感じでインストール完了!

epel-releaseリポジトリを明示的に使用する(通常は使用しないで、必要な時だけ使用する)場合は、以下の設定を行う。

この設定を行った場合には、yumのオプションに–enablerepo=epelを指定していないとEPEL-Releaseリポジトリは参照されません。

試しに、enabled=0の時と1にした時とでインストール対象が変わることを示します。

<EPEL-Releaseが参照されない(enabled=0)場合>

 

<EPEL-Releaseを参照する(enabled=1)場合>

19-23行目でprojが参照されていることを確認できます。
この状態になると、projをyumでインストールすることが出来ます。

以下では、enabled=1(明示的に指定しないで使用する)で作業を進めます。

2)projのインストール

ここまで来たら簡単です!
projをインストールします。

おしまし!。。。じゃない、まだGDAL入れてないしw

3)GDALのインストール

GDALのインストール手順を書きすれていました(^^;

こんな感じです。

出力されているコメントを見るとOGRの名前が見当たりませんが、OGRもしっかりと入っています!

試しにこんな感じで確認できます。

ということで、今度こそおしまい!

 

QGISインストール(OSGeo4W)

 

QGISインストールしておいて〜と言おうと思って、QGISのインストール方法を探そうとしたら、古いバージョンのインストール方法ばかりが検索上位に出てきて・・・(TT)
更に、OSGeo4Wを使ったインストール方法はなかなか出て来ないみたい。

ということで、誰かにお願いする時様に自分のブログに残しておかなければ・・・と言うよりも、なぜ今まで書いてなかったんだ!?ということもあり、今から記録に残します。

対象は
Windows 64bit環境。(Windows Serverへインストールさせるつもり) 現在は、2016-02-04時点での方法になります。

1.インストール準備

まずは、インストールする為の準備です。
下記のURLをブラウザで開いて、対象のインストーラーをダウンロードします。

https://trac.osgeo.org/osgeo4w/wiki/OSGeo4W_jp

img_579eee687c6f6

 

面倒だったら、一応、以下のURLから直接ダウンロードできるはず。

64ビット版はこちら→https://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe

32ビット版はこちら→https://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe

2.インストール開始

インストーラーを起動する。

 

img_56b2d0dcd7b37

 

文字が欠けているかも知れませんが、「エクスプレス デスクトップインストール」(デフォルト)を選択して「次へ」でインストール作業を進めます。

img_56b2d15863b5c

QGISを使いたいだけなら、「QGIS」だけチェックすれば良いと思うんだけど、GDALとかやっぱ使うので、デフォルトのままインストールしちゃいますw

後は、画面の指示に従って操作して待つだけ。

インストール完了しているはずなので、

img_56b2d3fe2c5c6

QGIS Desktopを起動するとQGISが起動します。

インストール直後はプラグインなどが入っていない状態なのでもっとシンプルな画面になっていると思いますが、こんな感じの画面が起動します。

img_56b2d45e17591

<サイト内参考情報>
QGISに地理院地図を追加する。
地域メッシュをQGISで作成する。

 

OpenLayers マルチサーバーで高速表示?

OpenLayersで地図画像を表示させる時には、タイル画像を表示させているが、そのタイル画像をサーバーからダウンロードしてくるのが遅いと、表示に掛かる時間が遅いように思える。

そこで、サーバーから同時並行的にダウンロードを行う方法として、複数のサーバーから並行して取り出すことにする。

単純に対象となるURLを配列に入れて指定するだけ。

さて、まだ試していないが、これくらいなら試してみる価値ありですね。

試してみたら、速い!

でもCPUコア食うねぇ~w
負荷設計なども考慮して使わないと、たくさんの人が見に来るサーバだと大変かも知れない。

諸刃の剣ですね。

 

OpenLayersでタイル画像のキャッシュを消したい!!(追記:ダメだった)

OpenLayers 2.13.1の環境で、一度表示されたタイル画像が邪魔になる場合がある。
開発途中などで、画像を差替えたりする場合には良く発生する為、ごっそりタイル画像を更新した場合などは、ブラウザのキャッシュクリアを行っていた。
この操作は、ブラウザ毎に設定があったり、消したくないキャッシュまでクリアしなければならず面倒だし不便。

そこで、以下のファンクションを呼び出すことで、タイルキャッシュだけをクリアしてしまおうというのが今回の狙い!

追記:単純にこれだけやっても上手く消えないことが判明・・・
どうやって使うか解らないのだが・・・ということで、誰かがアドバイスしてくれるのを期待するが、参考にしないでください。

これで上手く出来そうなんだけど・・・やってみる!!

レイヤを指定してクリアできると嬉しいのだが、そこまでの機能は無いみたい。OL3で実現では出来るのかな?

余談・・・・

まだOL3は使ったことが無い。
ドラスティックに変わり過ぎてしまって、OpenLayers 2.xとは全く異なってしまっている。
コンバートするとかいうより、完全に書き換えが必要となる雰囲気である。
もう少し安定した事例が発表されるまで待つつもりだけど・・・業界の流れにも注目したいところである。