間隔が0.2メートルのContours Featureclassがあります。1 m間隔の輪郭のみを選択したいですか?
[属性で選択]ダイアログ(ArcMap)で次の構文を使用しようとしましたが、すべてのコンターが選択されます。
Mod("ELEVATION", 1)=0
どのクエリを実行する必要がありますか?
間隔が0.2メートルのContours Featureclassがあります。1 m間隔の輪郭のみを選択したいですか?
[属性で選択]ダイアログ(ArcMap)で次の構文を使用しようとしましたが、すべてのコンターが選択されます。
Mod("ELEVATION", 1)=0
どのクエリを実行する必要がありますか?
回答:
整数値のみを選択する簡単なトリックは、次の構文を使用することです。
Mod(Round("ELEVATION", 0)*10, 10)=0
この10の乗算により、すべての値が整数になり、10の倍数の値のみが選択されます。
他の数の倍数を選択する場合は、間隔に10を掛けます。
5 m間隔で輪郭を取得するには、次を使用します。
Mod(Round("ELEVATION",0) * 10, 50)=0
100 m間隔で等高線を取得するには、次を使用します。
Mod(Round("ELEVATION", 0) * 10, 1000)=0
更新
以下のコメントに記載されているWhuberのアドバイスに従って、クエリ式に丸め関数を追加しました。
MOD
、浮動小数点の丸め誤差が発生します。これはここで重要です:最下位桁でも低い場合MOD
、間違った値を返すことがあります(実装方法によって異なります)。これらの微妙な(および陰湿な)エラーを防ぐ方法として、適用する前に値を丸めることをお勧めしますMOD
。
ROUND
して、丸めの精度を高めます。
別のクエリオプションを次に示します。上記の回答とほぼ同じですが、(私の意見では)さまざまなシナリオに合わせてカスタマイズするのが少し簡単です。
10で割り切れる輪郭を表示するには
Floor(Elevation/10)=Elevation/10
50で割り切れる輪郭を表示するには
Floor(Elevation/50)=Elevation/50
半メートルの等高線を表示するには
Floor(Elevation/0.5)=Elevation/0.5
任意のオフセット(10.2、20.2、30.2など)で10メートルの等高線を表示するには
Floor((Elevation-0.2)/10)=(Elevation-0.2)/10
結局のところ、これは考慮すべきもう1つのオプションです。
インデックスコンターを取得するには、Field Calculatorでこれを使用します。
ARCMAPで
dim dIndexInterval
dim dCont
dim i
dim j
dim k
dim c
dIndexInterval = 200 ' set to interval of index contours
dCont = [level] ' Set to contour height field
i = ROUND(dCont, 0) * 10
j = dIndexInterval * 10
k = i MOD j
if k = 0 then
c = 1 ' is an index contour
else
c = 0 ' is not an index contour
end if
'ダイアログボックスの下部にあるテキスト入力フィールドに「c」(引用符なし)と入力し、[OK]をクリックします。
QGISで
if(((round("level", 0) * 10) % (200 * 10)) = 0, 1, 0)
"" level ""等高線フィールドに設定 "200"インデックス等高線の間隔に設定
次に、「1」はインデックスコンターであり、「0」はインデックスコンターではありません