POSTGISでの16進グリッド値の補間


8

エリアをカバーするために六角ビニンググリッドとして作成したテッセレーションされた六角形のテーブルがあります。

次に、いくつかの六角形に値を与えるためにポイントセットをオーバーレイしました。図を参照してください:

ここに画像の説明を入力してください

値が「0」のシェイプには値がありません。クリギングに従って、これらを隣接の値から補間したいと思います。私のテーブルが次のようになっているとしたら、どうすればpostgresでこれを達成できますか?

hex_grid_data
(
 gid SERIAL,
 wkb_geometry (geometry),
 value INTEGER
)

postgisでクリギングを使用できますか?このスレッドチェックアウトgis.stackexchange.com/questions/1041/...
GISKid

特にクリギングを使うのと結婚していますか?別の補間方法が機能しますか?
MakinFlippyFloppy 2014

補間とはどういう意味ですか?すべての隣人の平均は良い値でしょうか?
Jendrusk 2014

どの補間方法でも問題ありません。
user1331131 2014

好奇心から-補間に使用できるポイントセットの値がある場合、なぜ16進グリッドから補間するのですか?
シンバマング2014

回答:


5

どのような補間について話しているのかはわかりませんが、すべての近傍の平均が良い値である場合は、これが解決策になる可能性があります。

create table hex_grid_data_av as 
  (
  select gid, wkb_geometry, value,
    case
      when value > 0 then value
      else (select sum(h2.value)/6 from hex_grid_data h2 where ST_Touches(h1.wkb_geometry, h2.wkb_geometry))
    end as int_value 
  from hex_grid_data h1
  )

または、@ MakinFlippyFloppyをフォローして、例で本当に0がnull(値なし)を意味するかどうかを疑います:

create table hex_grid_data_av as 
  (
  select gid, wkb_geometry, value,
    case
      when value > 0 then value
      else (select sum(coalesce(h2.value,0))/6 from hex_grid_data h2 where ST_Touches(h1.wkb_geometry, h2.wkb_geometry))
    end as int_value 
  from hex_grid_data h1
  )

または、null値またはゼロ値が平均を減少させない場合:

create table hex_grid_data_av as 
  (
  select gid, wkb_geometry, value,
    case
      when value > 0 then value
      when value = 0 and not exists (select 1 from hex_grid_data h2 where ST_Touches(h1.wkb_geometry, h2.wkb_geometry) and h2.value != 0 and h2.value is not null ) then 0
      else (select sum(coalesce(h2.value,0))/(select count(nullif(value,0)) from hex_grid_data h3 where ST_Touches(h1.wkb_geometry, h3.wkb_geometry) ) from hex_grid_data h2 where ST_Touches(h1.wkb_geometry, h2.wkb_geometry))
    end as int_value 
  from hex_grid_data h1
  )

分子と分母にゼロ値のセルが含まれているため、平均を計算する方法はスキューが低くなります。彼の問題の説明から、彼のゼロ値のセルはnullとしてより適切に表示されているように見えます。
MakinFlippyFloppy 14

@MakinFlippyFloppy-いいえ?分母は常にゼロで除算エラーを防ぐために6です。一例では0ではないヌルがある...私は同じではないということ、ここで説明する必要がないことを望む:) 6倍ゼロ補間一つの方法または別のがあるでしょう場合でもゼロになります
Jendrusk

はい?OPから:「 '0'の形状には値がなく、これらの値を近傍の値から補間したい...」
MakinFlippyFloppy

値なし!= 0、値なしはnullなので、この質問のsthは間違っています...例またはその下のコメントのどちらでも、例を見てクエリを記述しましたが、例の0がnullを意味する場合でも(黒と言って白を意味するようなものです) )いつでもcoalesce()関数を使用できます
Jendrusk

正解です。0!= NULLですが、OPが求めているのは空間補間問題の例です。彼または彼女は、既知の値の観測に基づいて、欠損値を「埋める」または補間したいと考えています。ローカル平均の計算により、ゼロ値(つまり、null)セルの分母が増加し、内挿された値が下方に歪められます。分子を結合しても、この問題は解決されません。あなたのコードは、彼または彼女のデータの境界にあるすべてのセルに対しても間違っています。
MakinFlippyFloppy 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.