MIERUNE / csmap-qgis-plugin

QGIS-Plugin to convert DEM to GeoTIFF format CS topographic map.
https://mierune.co.jp
GNU General Public License v2.0
7 stars 0 forks source link

CRSを設定する #16

Open geogra-geogra opened 6 months ago

geogra-geogra commented 6 months ago
スクリーンショット 2024-06-06 15 18 42

入れるデータって必ずCRSついてる条件になるんでしょうか? であれば、CRSを受け渡してあげたいですし、ない場合にも対応となればそれはそれで検討したいなと思いました

(一旦questionということでアサイン全員入れてますが、方向性決まったら作業者以外は外します)

Kanahiro commented 6 months ago

csmap-py自体は、入力データと同じCRSで出力するようにはなっています 入力データにCRS未設定の場合の挙動は…未定義 😢 エラーにはならないと思われ、多分単に位置情報を持たないデータとなる

Kanahiro commented 6 months ago

で、ファイルの他にパラメータとしてCRSを渡して付与する機能はcsmap-pyには現状ないです

社内OSSなのでいじってもらって一向にかまわないです https://github.com/MIERUNE/csmap-py

geogra-geogra commented 5 months ago

現状把握

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を出力する

geogra-geogra commented 5 months ago

@Kanahiro

-crs を加えて指定することで、元のファイルとは異なるCRSに変更できるようにしたいです。

未指定の場合は、もとのCRSが採用されるようにすれば良いと思います。 CRS未定義のもので、特に何も選択しなかった場合については、無理やりCRSをつけたりはしなくて良いかと思います。

CRSの定義/未定義はもとのファイルにCRSが設定されているかどうか 未指定/指定は-crsやQGIS上でCRSを指定するかどうかになります

CRS定義済み+末指定→もとのCRS CRS定義済み+指定→指定したCRS CRS未定義+未指定→CRS未定義 CRS未定義+指定→指定したCRS

以上で考えたのですがいかがでしょうか?

Kanahiro commented 5 months ago

未指定の場合は、もとのCRSが採用されるようにすれば良いと思います。

賛成です。従来と挙動が変わらないということなので。

ゆえに、以下の挙動を考えることになります。

CRS定義済み+指定→指定したCRS CRS未定義+指定→指定したCRS

Kanahiro commented 5 months ago

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

となるでしょうか。

Kanahiro commented 5 months ago

CRS定義済み+指定→指定したCRS

一方こちらは、定義済みのCRSがある=位置情報を持つということです。このデータの投影法を変更するということは、データの再投影(reprojection)を行うことを意味します。

再投影はコストの高い処理です。現状のcsmap-pyは、どれだけ大きいDEMであってもチャンクごとに処理しているので、メモリ効率などは悪くないはずです。 一方、再投影は完成したCS立体図に対して実行しなければならず、現状の変換処理が終わった「あと」に実行されることになります。

以上から、IMO:

ということで良いのではないかと思います。(再投影はこのライブラリ内では行わない)

Kanahiro commented 5 months ago

以上から、私の意見は:

という仕様です。いかがでしょうか。 @geogra-geogra

geogra-geogra commented 5 months ago

ありがとうございます

確かに、再投影と定義が曖昧になっていました。

その仕様でいきたいと思います

明日以降、まずはcsmap-pyの方でissue立ててブランチ切ります