PostGIS- GROUP BYは連続データ値ですか?


8

PostGIS ST_ConvexHull関数のサンプルコードでは、フィールド「disease_type」にある異なる離散値に基づいて複数のポリゴンが作成されます。

--Get estimate of infected area based on point observations
SELECT d.disease_type,
    ST_ConvexHull(ST_Collect(d.the_geom)) As the_geom
    FROM disease_obs As d
    GROUP BY d.disease_type;

0〜5の連続値を持つ数値フィールド(「myfield」と呼ぶことにします)があったとします。GROUP BYと同様の結果をどのように作成しますが、独自のブレークポイントを定義しますか(例:0-1.25、1.25-3.5、3.5-5)?


GISに関する質問ではありませんが、すでに回答されています。
アンダーダーク

回答:


9

CASEを使用してクラスを作成できます。そんな感じ:

SELECT 
d.disease_type,
ST_ConvexHull(ST_Collect(d.the_geom)) As the_geom
FROM 
    (
    SELECT
    diseaseobs.the_geom,
    (CASE diseaseobs.number WHEN number BETWEEN 0 AND 1.5 THEN 'type one'
         WHEN number BETWEEN 1.6 AND 3 THEN 'type two'       
         ELSE 'other'
    END ) as disease_type
    FROM schema.diseaseobs

    ) AS d

GROUP BY d.disease_type;

ありがとう、パブロ。これはすばらしい...自分でテストする必要がありますが、これが私が探していた答えであることを期待しています。
RyanKDalton、2011年

2

ハロ

このような場合に使用するのは、クラスを含むテーブルを作成してそれらを結合するか、サブクエリを使用してクラスのリストを作成することです。

テーブルを更新するだけでクラスを更新できるため、より直感的なアプローチが得られると思います。

もう1つの利点は、空のクラスも取得できることです。

サブクエリのアプローチは次のようになります。

SELECT
d.disease_type,
ST_ConvexHull(ST_Collect(d.the_geom)) AS the_geom FROM disease_obs
RIGHT JOIN
(SELECT 0::float AS classbottom, 1.25::float AS classtop, 1::int AS classid
UNION ALL    
SELECT 1.25::float AS classbottom, 3.5::float AS classtop, 2::int AS classid
UNION ALL    
SELECT 3.5::float AS classbottom, 5::float AS classtop, 3::int AS classid) AS classes
ON disease_obs.continuous_value>=classes.classbottom AND disease_obs.continuous_value<classes.classbottom
GROUP BY classes.id;

ここでは、正しい結合を使用して、時々便利な空のクラスも取得しました。空のものを使用したくない場合は、内部結合に変更してください。

クラスをテーブルに移動し、残りのクエリをビューに配置すると、クエリに触れずにクラスを変更できます。

HTH /ニクラス


提案をありがとう。私はこのルートに行くことを検討しましたが、最終的にはこれをユーザーが独自のブレークポイントを選択できるアプリに入れたいので、この解決策はそれほど有益ではありません。
RyanKDalton 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.