Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CRSを設定する #16

Open
geogra-geogra opened this issue Jun 6, 2024 · 9 comments
Open

CRSを設定する #16

geogra-geogra opened this issue Jun 6, 2024 · 9 comments
Assignees
Labels
question Further information is requested

Comments

@geogra-geogra
Copy link
Contributor

スクリーンショット 2024-06-06 15 18 42

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

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

@geogra-geogra geogra-geogra added the question Further information is requested label Jun 6, 2024
@Kanahiro
Copy link
Member

Kanahiro commented Jun 6, 2024

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

@Kanahiro
Copy link
Member

Kanahiro commented Jun 6, 2024

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

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

@geogra-geogra
Copy link
Contributor Author

geogra-geogra commented Jun 11, 2024

現状把握

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がそのまま通るように書かれている

考えられる仕様

  • 常に上書きする(CRS指定するUIが必要になる)
  • 再投影する(これまで同様?指定されてない場合どうする?)
  • その他

変更するコードの方向性

process.pyのcrs=dem.crs,
の部分を書き換えることになる。
main.pyの部分で、他のパラメータと同様にQGISプラグイン上で動作するように行う

また、選択したCRSを出力する

@geogra-geogra
Copy link
Contributor Author

geogra-geogra commented Jun 11, 2024

@Kanahiro

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

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

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

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

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

@Kanahiro
Copy link
Member

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

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

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

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

@Kanahiro
Copy link
Member

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
Copy link
Member

Kanahiro commented Jun 11, 2024

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

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

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

以上から、IMO:

  • 入力のDEMを予め、望みの投影法にしておいてもらうか
  • 出力したCS立体図を、gdalwarpなどで再投影してもらう

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

@Kanahiro
Copy link
Member

Kanahiro commented Jun 11, 2024

以上から、私の意見は:

  • -teオプション, -te_srsオプションを追加する
  • これらが設定されている場合は、元のCRSがなんであれ、常に位置情報を「上書き」する(再投影はしない)

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

@geogra-geogra
Copy link
Contributor Author

ありがとうございます

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants