QGISで繰り返しタスクを実行する方法は?


11

多くの機能ファイルを処理しようとしているので、それを自動化したいと思います。

実際、いくつかの種の空間分布を持つ1つのシェープファイルと、植生タイプを持つ1つのシェープファイルがあります。

Species Shapefileで1つの種を(属性によって)選択し、次に分布領域と交差するすべての植生領域を(地域によって)選択します。最後に、名前として種の名前を持ち、頻出する植生タイプの属性と形式を含むシェープファイルを作成したいと思います。そして、私はこれをすべての種(100種以上)で繰り返し、できれば簡単に(他の人ができるように)行いたいと思います。

私はすでにSextanteプラグインを使用してこのタスクを試しましたが、最後にシェープファイル名として種名を持つことはできません。

誰かがこれの方法を提案できますか?


1
説明から、PostGISやSpatiaLiteのようなフル機能のジオデータベースには、作業全体がより適しているでしょう。ただし、必要なことを実行するための完全なソリューションは簡単ではない場合があります。
ステコ

回答:


5

このブログエントリは、SEXTANTEでそれを行う方法を理解するのに役立つ場合があります。

http://qgissextante.blogspot.fr/2013/01/using-selection-algorithms.html

それが役に立てば幸い


こんにちは、ありがとう。試してみたいのですが、私はこの種のスクリプトの専門家ではありません。どこでコピーする必要がありますか?ありがとう。
Onesime

素晴らしい、ありがとう、私はそれを(Pythonコンソールを介して)試しましたが、うまくいきました。次のステップでは、Sextanteモデラーとしての適応を試みます。Sextanteのようなツールにそのようなコマンドがないことは損害です(いくつかの変数で出力ファイルの名前を設定します)。
Onesime

3

これには小さなスクリプトが必要です。それを再現可能にするために、Rでそれを達成しようとします。また、Sextanteモデルでバッチ実行(関数を右クリック)を使用することにより、QGisおよびSextanteで可能になります。ここでは、最初にベクトル交差ツールを使用し、その後何らかの空間結合を使用できます。

Rでは、このようにしてみます。データ構造と変数がわからないため、コードを変更する必要がある場合があります。

library(raster);library(rgdal);library(sp)         # Load in required packages

vegetation <- readOGR("H:/Examplefolder",          # To load a vegetation polygon shape here 
                      "vegi")                      # called vegi.shp    

setwd(harddriveD)                                  # Now, switch to the directory containing your species shapes
                                                   # and use the following code 
species_files <- grep( ".shp",                     # to extract all shape names
                       dir(),
                       ignore.case=T,
                       value=T)

                                                   # Now read in your speciesfiles in a loop 
for(name in species_files){                        # and do a  vegetation data
                                                   # overlay with your basename
    spec_name <- strsplit(name,split=".shp")[[1]]  # to get only the load in
                                                   # your species name shape. 

    spec_shp <- readOGR(".",spec_name)             # I assume that you have point data. Otherwise change the code.
    ov <- over(spec_shp,vegetation)                # Make a overlay with your vegetation data, 
                                                   # returns a dataframe of the overlaying vegetation shape attributes, 
                                                   # which are within your species shape. 
                                                   # This dataframe has the same number of rows as your input species shape. 
   cd <- coordinates(spec_shp);                    # Therefore you could just append the needed information to your species shape.
   proj <- proj4string(spec_shp)                   # save coordinates and proj.

                                                   # Append your vegetation data to your species shape
   spec_shp$Vegetation <- ov$ShrubSpecies          # Or whatever you want to get. 

   spp <- SpatialPointsDataFrame(                  # In the end export your shape again. 
                    coords=cd,                     # I would advise you to use a different folder. 
                    data=as.data.frame(spec_shp),  # In case you have polygons instead of Point data
                    proj4string=CRS(proj) )        # use the SpatialPolygonDataFrame function. -> help ?SpatialPolygonDataFrame
  writeOGR(spp,                                    #Should result in a new shape 
           "foldername",                           # which has your species name.
           spec_name,
           driver="ESRI Shapefile")                      

}

あなたの目標とデータセットの構造について多くの仮定を立てました。ほとんどの場合、試してみる前に必要に応じてコードを修正する必要があります。


あなたの助けをありがとう、私はそれを試してみます。私の種のデータは多角形(種の分布)ですが、おそらくまったく同じだと思いますか?多くのおかげで
-Onesime

いくつかの関数(たとえば、SpatialPolygonsDataFrame)を変更するだけで、ほとんどの場合、データフレームのリストまたは他の何かを返します。
カール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.