まずは,下記をみてみよう。
Phthon 使うなら,下記も確認。
PyQGIS 開発者用 Cookbook — QGIS Documentation ドキュメント
CRS
いつも仕事しているひとは,JGD2000 / Japan Plane Rectangular CS ? です。
JGD2011 ではないことに注意。
メッシュを作成したら,微妙にずれているので何でかな?と思っていたら,CRSの違いでした。十分に注意しましょう。
点群をTINでメッシュにしてそれぞれの面積を求める
TINで補間するのではなくて,点を結んでTINメッシュを作成する方法です。
- GRASS の v.delaunay で作成する。特にオプションとかはないので簡単。
- 点とメッシュがずれてないか確認したほうがよいです。よくわかりませんが,ずれてるときがありました。Windowsからもってきたシェープファイルだったので,localeがよくなかったと思ってます。
- TINのレイヤを右クリック → 属性テーブルを開く(open Attribute Table),と選択します。
- ツールバーのフィールド計算機を開く(open Field calculator),を選択します。このとき,メッシュの連番がふられているのを確認します。
- Output field name にフィールド名を入力,Output field type を選択(今回はrealにした),Expression には $area を入力。
- OK をクリックすると,field が追加されます。
Voronoi分割
Vector - v.voronoi でできる。
Advanced Parameters はよくわかってない。
画像のエクスポート
よく忘れる。
Project の Import/Export から,Image,PDF,DXFが選択できます。
このとき,Resolution のdefault 96 dpi から,1.5倍の144 dpi にしておいたほうが,Keynoteにいれても綺麗かもしれません。
選択したポリゴンを別レイヤにしたい
Annotations Toolbar の (Select Features by Area or Single Click) で,選択する。
そのあと,レイヤの右クリックから Export で,(Save Selected Feature As ... )で保存する。
別レイヤのポリゴンと重なっている箇所を抽出したい
Vector selection の (Extract by location) を選択。
(Select by location) だと選択するだけなので注意。
intersect は,重なっているポリゴンが選択される。
自分はよくこれを使うのでメモ。他は使うときに調べてみよう。
ラスターをポリゴンと重なっている箇所を抽出したい
Raster - Extraction - Clip by Mask Layer を選択。
Clip by Extent もあるので注意。
検索してみると,上記2つはメニューでは別れておらず,ウィンドウがでてきて選択だったみたいです。
Optional になってますが,CRSは選択しておいたほうがいいのかな?という感じで選択してます。
ラスタデータの切り抜き - QGIS [いかたこのたこつぼ]
切り抜くときに選択するとエラーがでる
点群から対象範囲を指定して選択したいときに,対象範囲としたVectorがダメと言われるときがあります。
調べてみると,何かおかしくなっているからそうなるので,Collect すればよいというのをみつけました。
確かに,してみたら直ったのでメモしておきます。
Geometry Tools - Collect Geometries で別レイヤに修正されたのができます。
ラスタデータをXYZ形式に変換する
下記の通りですけど,ひとまずメモ。 プロセッシングツールボックス で gdal2xyz と検索します。
QGISでラスタデータをXYZ形式に変換する | Crackpot
ポリゴンをつくりたい
鉛筆マークの編集モードを忘れないこと。
QGISでポリゴンを作成して形状を修正する方法:無料でGISを使ってみる - LL.me
asc ファイルの座標
asc の xllcorner と yllcorner は左下のセル座標です。
0.5mDEMをつかっているので,cellsize は0.5と記載されています。
上方向,右方向に大きくなります。いつも通りのXY座標ですね。
ArcGISと一緒です。
ラスター → ASCII (Raster to ASCII) (変換)—ArcGIS Pro | ドキュメント
QGIS Export Raster to asc - Tuflow
あるカテゴリ値だけExportする
ラインの頂点を抽出してポリゴンにする
ベクタ → ジオメトリツール → 頂点の抽出 をする。
座標が無いので,フィールド計算機で,"$x" と "$y" でフィールドを追加する。もともとのCRSなら特に計算不要。
これをCSVで出力。
ファイルを確認すると,ラインごとに連番となっている。
ラインが閉合しているかどうかのフィールドがある。
ポリゴンにしたいので,"YES" ではないラインを,連番をひとつ増やして連番0の値を持ってくる。
QGISでラインをポイントに変換してxy座標を取り出す #GIS - Qiita
ポリゴンにする方法は,検索するといくつかあるが,今回は下記を参考にプログラムを作成した。
下記の「WKTからレイヤ」を参考に,POLYGONの座標,レイヤ名を変更して,3〜10行目を必要数出力する。
なお,epsgはCRS,そのつぎがレイヤ名,"memory"はレイヤ出力の種類。
これをQGISのPythonコンソールで実行する。
たくさんレイヤが作成されたら,結合して1つのシェープファイルに保存する。
ベクタ → データ管理ツール → ベクタレイヤをマージ
21. PyQGISチートシート — QGIS Documentation ドキュメント
3. レイヤをロードする — QGIS Documentation ドキュメント
そのほか
Visualising WKT geometry string in QGIS - Geographic Information Systems Stack Exchange
gis - How to use WKT to draw polygon in qgis? - Stack Overflow
QGISでテキストからポイント・ライン・ポリゴンを読み込む | Crackpot
多数のポリゴンそれぞれでclipする
点密度を数えたくて,調べてみた。
import os import processing def clipping(input,overlay,output): processing.run("native:clip",{ "INPUT":input, "OVERLAY":overlay, "OUTPUT":output }) input = 'D:/AAA/BBB/Ex.shp' overlay_path = 'D:/AAA/BBB/CCC/' output_path = 'D:/AAA/BBB/' files = os.listdir(overlay_path) for f in files: if f.endswith(".shp"): name = f.split(".")[0] clipping(input, overlay_path+name+".shp", output_path+"gp_"+name+".shp")
参考にしたところが,listdirs になっててちょっと悩みました。
QGIS pythonコンソール使用法など[備忘録] #Python - Qiita
上記がいまひとつだったので,もう少し考えました。
メニューのベクタ解析にあるものを,コマンドラインで使ってみることにしました。
フォルダ内のファイル名取得などは,上記を参考にしています。
上記がclipping,下記は count points in polygon なので,結果が異なることに注意が必要です。
Count points in polygon (weighted)
overlay_path='D:/AAA/BBB/CCC/' output_path='D:/AAA/BBB/' files=os.listdir(overlay_path) for f in files: if f.endswith(".shp"): name=f.split(".")[0] processing.run("native:countpointsinpolygon", { 'POLYGONS':overlay_path+name+".shp", 'POINTS':'D:/AAA/CCC/ZZZ.shp', 'WEIGHT':'', 'CLASSFIELD':'', 'FIELD':'NUMPOINTS', 'OUTPUT':output_path+"p_"+name+".shp"} )
QGISはgeopackageを推してるので,gpkgも記載。
files=os.listdir(overlay_path) for f in files: if f.endswith(".gpkg"): name=f.split(".")[0] processing.run("native:countpointsinpolygon", { 'POLYGONS':overlay_path+name+".gpkg", 'POINTS':'D:/AAA/CCC/ZZZ.shp', 'WEIGHT':'', 'CLASSFIELD':'', 'FIELD':'NUMPOINTS', 'OUTPUT':output_path+"p_"+name+".gpkg"} )
ユニークIDを作成する
@row_number をつかいました。
ユニークID(地物毎に固有の値)を作成する方法:QGISを使ってみる - LL.me
結合レイヤの空間インデックスが存在しません。処理が極端に悪化します。
「結合レイヤの空間インデックスが存在しません。処理が極端に悪化します。」は、メニューの「ベクタ - データ管理 - 空間インデックスを作成」で対処します。
ジオリファレンス
座標をもたない空中写真を重ねたいときに行ないます。
現在のバージョンだと,ラスタのメニュー内に,ジオリファレンサ があります。古いと別の場所にあると記載されていることがあるので,注意してください。