思いつくままを綴る雑記帳

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GDAL

前回の記事でGDALについて触れましたが・・・。
いろいろとググってGDALライブラリの配布先は GISInternals Support Site らしいと・・。
OSGeo4W のサイトから飛んだだけですけどね。
OSGeo4Wのパッケージ(QGISとGDAL)を入れると確かにQGIS内のPythonウインドウではGDALをインポート出来ました。
しかしOSGeo4W Shellから起動したPython内ではインポート出来なかった。
GDALを直接、Osgeo経由のインポートも駄目・・・。
しかもPython2.7だしね・・・。
でGISInternals Support SiteからBinaryパッケージとPython PyPIを入手してインストールしたけど・・・。
結果は同じ・・・と、途方に暮れていたけど。
ググり倒していたら Unofficial Windows Binaries for Python Extension Packages というサイトを発見。
まぁいろいろ探せばあるようで・・・。
駄目なら次行って見よう! ってな感じでやってみました。
Python 3.4用のPyPIもあるしね・・。
以前にpipは導入してあるのでPython 3.4用の.whlをDLして環境変数も設定してみると・・・インポート成功。
で、ついでにBlenderのDailyビルドの環境にインストールしたGDALのデータをsite-packagesにコピーして動かしてみたらBlender内のPythonコンソールからGDALのインポートが出来ました。
まぁ個別の環境変数の設定が必要なので.batファイル経由での起動ですが・・・。
スポンサーサイト

国土地理院 基盤地図情報を取り込む?

いやぁ、猫さんにはまったく興味のない分野の話ですが・・・。
猫さんが時折拝見しているBlog主がなにやら白地図からデータを起こす作業をされているという記事が・・・。
うわぁ・・猫さんには向かない作業ですね・・。
で、いつもの猫さんの癖で何か方法はないものかと・・・いろいろググる・・・。
そして「基盤地図情報をBlenderに取り込んで3D表示」という記事を見かけてお知らせしたのですが・・。
原因は不明ですが(記事は2年前のもの・・・地理院のデータ改変? ツールの仕様変更? 分かりません)
現在のデータではエラーが出るとの事・・。
お知らせしたBlog主は試してくれたみたいです・・・申し訳ないことをしました。
猫さん、今も出来るのか確認していませんでしたから・・・。
で、お詫びに出来る方法を探してみました。

初めに言っておきますが猫さんは地図、土木、測量などに関する知識は持っておりません。

まず事前準備で必要なものをダウンロードしてインストール。

国土交通省 国土地理院の基盤地図情報ダウンロードサービス(無償だがアカウント登録が必要)で適切なデータをダウンロードする。
基盤地図情報数値標高モデルJPGIS(GML)形式。
データを一部加工するためにGDALツールが必要なのでダウンロードする。
OSGeo4W
必要なのはコマンドラインツールだけなので・・・。
選択項目は大体こんな感じ・・。
 アドバンスインストール
 インターネットからインストール
 パッケージ選択画面
Commandline_Utilities
gDal: The GDAL/OGR library and commandline toolsのskipをクリックして1.11.2-1を選択。
JPGIS(GML)形式データを.tifファイルに変換するツールをダウンロード。
基盤地図情報 標高DEMデータ変換ツール

基本的な情報は元記事のこちらを参照。
基盤地図情報をBlenderに取り込んで3D表示

Blenderに取り込むpythonスクリプトは元記事を参考に作成する。
pythonをご存知ない方も多いと思いますので少し作成時の注意点を・・・。
元記事に書かれているスクリプトは便宜上の行番号が明記されているのでこれを取り込まないこと。
例えば、元記事で以下のスクリプトの部分は
1: import bpy
以下のようになります。
import bpy
pythonはインデントが一致していないとエラーになるので・・・
タブは使用しないでスペースで埋めてください。
また元記事中で指摘により削除された部分があるのでそれは不要です。

で、やり方ですが・・・。


1.地理院のデータを適当なフォルダに解凍して、標高DEMデータ変換ツールを走らせる。
 この時パラメータを指示するように促されるので元記事の情報を元に入力。
  平面直角座標
  9系
  -9999.0を選択。
 この時、陰影起伏図の作成を指定すれば別目的で使用可能。
 実行して暫く待つとファイルが生成される。(merge.tif)
陰影起伏図の作成を指定していればmerge_shade.tifも。

2.OSGeo4WのShellを走らせる。
 Shellウインドウ内でmerge.tifがあるフォルダに移動する。
 cd c:\tmp 等

3.ArcInfo Ascii Grid形式に変換。
 Shellウインドウ内で次のコマンドを実行。
 gdal_translate -of "AAIGrid" -ot Float32 merge.tif merge.txt

4.Blendrを走らせてText Editor画面で作成したpythonスクリプトを開く。
5.指示に従って実行して待っているとobjectが生成される。

screen.png

OSGeo4Wを使わない別の方法
OSGeo4W以外のツールはダウンロード、インストールしてあるものとする。

標高DEMデータ変換ツールで陰影起伏図を作成している事が必須。

1.Blenderを走らせてmerge_shade.tifをImage Editorで読み込む。
2.3DView画面でPlaneを生成する。
 この時PlaneのDimensionをtifファイルの画サイズに合わせておくと面倒がない。
3.PlaneのTextureタブでmerge_shade.tifを指定する。
4.PlaneにDisplace Modifierを設定する。
5.Planeを必要に応じてSubdivideを実行する。
Displace ModifierでStrengthをある程度上げた方がいいかも知れない。
screen_201504201214104cd.png

最後に、このデータ/手法の真偽については分かりません・・。悪しからず・・。

Weight Paint Tips(纏め)

今でもたまにWeightPaintで塗れないという検索でここに来られる方がいるようなので改めて要点だけを書いておきます。
WeightPaint1.png
WeightPaintを選択するとこんな画面になると思います。
そもそもWeightPaintとは重み付けをしたVertex Groupを定義することです。
大抵はArmature Modifierを設定したMeshに対して使用することが多いと思いますが、それ以外でもvertex groupを視覚的に定義する際に使用します。
Armature Modifierで使用する際は自動的に対応するBoneの名前のVertex Groupが作成されます。
上の画面ではPaintのマスク機能が選択されていないのでどこにでもペイントすることが出来ます。
これはArmature Modifierで使用する際に気付かない内にWeightが設定される原因のひとつになるのであまりお勧め出来ません。
WeightPaintの場合微かなWeightが付いている場合視認出来ない可能性があるので要注意です。
Armature ModifierなどでWeightPaintを使用する際は関係のない箇所は非表示にしておけば不用意にWeightが設定されることはなくなります。
WeightPaint2.png
これはFace選択でのマスク機能を有効にした画面です。
赤色で囲ってある箇所が選択されている部分です。
WeightPaint3.png
これは同じくVertex選択のマスク機能を有効にした場合です。
表示がFaceかVertexかの違いだけです。
このマスク機能は表示されていて選択されている箇所にのみペイントする機能です。
非表示の部分や非選択の箇所にはペイントされません。
またWeightPaintではEdit modeのように選択機能が使えます。
WeightPaint4.png
Box選択。
WeightPaint5.png
サークル選択。
WeightPaint6.png
投げ縄選択
そして選択した箇所はH/SHIFT+H/ALT+Hで表示/非表示が可能です。
これらの機能を使用すればWeightPaintで塗れない箇所はないと思います。

Blender Face's Area

これは猫さんの備忘録的記事です。
BlenderのMesh Display PropertiesのFace InfoのAreaをチェックONするとEditモード中のFaceの面積が表示されます。
これとは別にPython APIで取得できるFaceの面積の項目は2つあります。
従来のMeshデータのPolygonsのAreaとBmeshからアクセスするAreaです。
実はこれ別の計算方法でFaceの面積を算出しているとの事。
Blender DevelopperのCampbellさんがBug Trackerでの質問で回答してくれました。

Mesh Display Propertiesで使用して計算方法は速度重視のため若干精度の問題があるかもと・・。
実際に表示されているものとPythonで取得した物では差がありました。
Objectの尺が大きいと差も大きいです。
で、これらのAreaの算出値は基本的に投影平面の面積であると。
4角形などの多角形の場合全てのVertexが同一平面にあるとは限りません。
その場合の面積は未定義なのでこれらの値と一致しないということです。

だから、この表示と値が違っていてもBugではない。
ましてや、平面に展開されていないMeshを使用している場合の値は正しくないと。

原文に関心がある方はこちら
但し、猫さんのWeb翻訳の英文に文句はつけないように・・・。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。