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

出力ファイル名に柔軟性を持たせる #13

Open geogra-geogra opened 1 month ago

geogra-geogra commented 1 month ago

現在は、ディレクトリまでしか入れられない(ファイル名をこちらで勝手に決めることになっている) ディレクトリまで指定(こちらで勝手にファイル名決める) 何も指定されない(一時レイヤに保存) ファイル名まで指定(.tifだけ追加して出力) フルパスで指定(そのまま出力)

くらいの場合分けは必要になる。 他形式のファイルを読めるようにするのと同時に実施?

KeiTa4446 commented 1 month ago

ユーザーが指定するのはフォルダまでで,出力は"csmap.tif"という名前で出力されるようにしているのですが,yamamotoさんが書いてくださっている通り徐々に追加していく予定の部分です! issue追加ありがとうございます!

geogra-geogra commented 4 weeks ago

Sample

def setup_default_file_name(self):
        arrive = "arrive" if self.arrive_boolean else "departure"
        file_date = self.ui.standardTime.dateTime().toString("yyyyMMddHHmm")
        self.layer_name = f"{arrive}_{file_date}"  # layer_nameを設定

    def load_isochrone_to_qgis(self, geojson_data):
        self.setup_default_file_name()
        file_path = self.mQgsFileWidget_output.filePath()

        if "/" in file_path:
            # ファイルパスの最後が'/'で終わる場合
            if file_path.endswith("/"):
                file_path += f"{self.layer_name}.geojson"
            # ファイルパスに'/'があり、かつ'.'が含まれていない場合
            elif "." not in file_path:
                file_path += ".geojson"
            with open(file_path, "w") as file:
                file.write(json.dumps(geojson_data))
            uri = file_path
            vector_layer = QgsVectorLayer(uri, self.layer_name, "ogr")
        else:
            # ファイルパスに'/'が含まれない場合、ファイルパスを空にしてメモリレイヤを読み込む
            self.mQgsFileWidget_output.setFilePath("")
            uri = "Polygon?crs=epsg:4326&field=id:string&field=time:int"
            vector_layer = QgsVectorLayer(uri, self.layer_name, "memory")
            vector_layer.startEditing()
            vector_layer.dataProvider().addAttributes(vector_layer.fields().toList())
            vector_layer.updateFields()

            features = QgsJsonUtils.stringToFeatureList(
                json.dumps(geojson_data), vector_layer.fields()
            )

            vector_layer.dataProvider().addFeatures(features)
            vector_layer.commitChanges()

        if vector_layer.isValid():
            QgsProject.instance().addMapLayer(vector_layer)
            self.apply_categorized_symbology(vector_layer, "time")
        else:
            QMessageBox.critical(self, "Layer Error", "Failed to load layer")
KeiTa4446 commented 3 weeks ago

@geogra-geogra iguchiさんとも相談させていただいて,ラスタはベクタと異なり一時レイヤとして出力するメリットがあまりないようなので,issueとしては残しますが,milestoneからは外します。