Open geogra-geogra opened 6 months ago
csmap-py自体は、入力データと同じCRSで出力するようにはなっています 入力データにCRS未設定の場合の挙動は…未定義 😢 エラーにはならないと思われ、多分単に位置情報を持たないデータとなる
で、ファイルの他にパラメータとしてCRSを渡して付与する機能はcsmap-pyには現状ないです
社内OSSなのでいじってもらって一向にかまわないです https://github.com/MIERUNE/csmap-py
csmap-pyのなかでの挙動
process.py
with rasterio.open(input_dem_path) as dem:
...
with rasterio.open(
output_path,
"w",
driver="GTiff",
dtype=rasterio.uint8,
count=4,
width=out_width,
height=out_height,
crs=dem.crs,
transform=transform,
compress="LZW",
) as dst:
crs=dem.crs,
のように、CRSがそのまま通るように書かれている
process.pyのcrs=dem.crs,
の部分を書き換えることになる。
main.pyの部分で、他のパラメータと同様にQGISプラグイン上で動作するように行う
また、選択したCRSを出力する
@Kanahiro
-crs を加えて指定することで、元のファイルとは異なるCRSに変更できるようにしたいです。
未指定の場合は、もとのCRSが採用されるようにすれば良いと思います。 CRS未定義のもので、特に何も選択しなかった場合については、無理やりCRSをつけたりはしなくて良いかと思います。
CRSの定義/未定義はもとのファイルにCRSが設定されているかどうか 未指定/指定は-crsやQGIS上でCRSを指定するかどうかになります
CRS定義済み+末指定→もとのCRS CRS定義済み+指定→指定したCRS CRS未定義+未指定→CRS未定義 CRS未定義+指定→指定したCRS
以上で考えたのですがいかがでしょうか?
未指定の場合は、もとのCRSが採用されるようにすれば良いと思います。
賛成です。従来と挙動が変わらないということなので。
ゆえに、以下の挙動を考えることになります。
CRS定義済み+指定→指定したCRS CRS未定義+指定→指定したCRS
CRS未定義+指定→指定したCRS
まずこちら。DEMにCRSが設定されていない場合、オプションがあったら設定する、のは正しいように思います。 ただしその場合、EPSGコードだけでなく、そのラスターがどの領域を示しているか(コード中ではtranformのこと)という情報がなければ、結局は正しい位置を参照することが出来ません。なので以下のような追加オプションが必要になるでしょう。
https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-te
GDALを参考にすれば、-te
-te_srs
というのがあるので:
csmap input.tif output.tif -te_crs EPSG:6668 --te 140.1 40.2 140.3 41.2
となるでしょうか。
CRS定義済み+指定→指定したCRS
一方こちらは、定義済みのCRSがある=位置情報を持つということです。このデータの投影法を変更するということは、データの再投影(reprojection)を行うことを意味します。
再投影はコストの高い処理です。現状のcsmap-pyは、どれだけ大きいDEMであってもチャンクごとに処理しているので、メモリ効率などは悪くないはずです。 一方、再投影は完成したCS立体図に対して実行しなければならず、現状の変換処理が終わった「あと」に実行されることになります。
以上から、IMO:
ということで良いのではないかと思います。(再投影はこのライブラリ内では行わない)
以上から、私の意見は:
-te
オプション, -te_srs
オプションを追加するという仕様です。いかがでしょうか。 @geogra-geogra
ありがとうございます
確かに、再投影と定義が曖昧になっていました。
その仕様でいきたいと思います
明日以降、まずはcsmap-pyの方でissue立ててブランチ切ります
入れるデータって必ずCRSついてる条件になるんでしょうか? であれば、CRSを受け渡してあげたいですし、ない場合にも対応となればそれはそれで検討したいなと思いました
(一旦questionということでアサイン全員入れてますが、方向性決まったら作業者以外は外します)