2017-02-20 3 views
1

を使用してポイントからバッファのPostGISテーブルを作成します。ソーステーブルから データフィールド:私は、mはポリゴンが年に基づいてポイントバッファおよびグループからすべてのポリゴンを生成しているビューまたはテーブルを作成しようと、日付フィルタに

point_id(int), point_created(date), geom geometry(Point,3301) 
    1, 2014-05-09, point 
    2, 2015-01-01, point 
    2, 2015-02-05, point 
    3, 2016-02-05, point 
    4, 2017-02-10, point 

は私が年によってすべてのポイントをグループ化し、マルチポリゴンとしてバッファ生成しますが、私は必要なの年の間の日付(グループに基づいてグループポイントにあるテーブルを作成することができた複数の今使ってM、

polygon(geom), nr_of_features(int), year(string) 
1, 1, 2014(all point from 2014) 
2, 3, 2015(all points from 2014 to 2015) 
3, 4, 2016(all points from 2014 to 2016) 
4, 5, 2017(all points from 2014 to 2017) 

スクリプトI:年間ポイント一緒に)ので、テーブルは次のように見なければならない

CREATE TABLE my_new_table as 
SELECT ST_Union(ST_Buffer(geom,10))::geometry(MultiPolygon,3301) as polygon,count(point_id)::integer as nr_of_features, 
extract(year from point_created) as year 
FROM my_table 
group by year; 

すべてのヘルプは大歓迎です。

答えて

0

私が正しくあなたを理解していれば、あなたはそのようなことが必要です。今、あなたはポイントを集計するyears列を使用することができます

--just for create few years 
WITH RECURSIVE dates AS (
    SELECT '2014-12-31'::timestamp years 
    UNION ALL 
    SELECT years + interval '1 year' FROM dates WHERE years < '2019-12-31' 
) 

SELECT 
    EXTRACT(YEAR FROM d.years) years, 
    p.* 
FROM 
    points p 
INNER JOIN 
    dates d ON p.date <= d.years 
; 

を。

+0

実は私もそれを試してみましたが、問題はそのすべての日付範囲の間の点が、まだ1年だけのポイントをグループ化していないということである、サンプル:トン.date BETWEEN '2014-01-01' AND '2015-12-31' 2015年は2015年1月1日から2015年12月31日までのすべてのポイントが表示されますが、前年のポイントはすべて必要です2015年12月31日の日付。 – Kajar

+0

申し訳ありませんが私の答えは正しくない、私はそれを更新しました。 CASE ... WHENはいつも最初の試合で止まる。 – banazs

0

ポイント日付が1994年から現在の日付の間にあるので、私は2013年12月31日までと「2019年12月31日」にあなたのサンプル値が「2014年12月31日」を変更したため、私はこのスクリプトを少し変更する必要がありました現在の日付。それは今働いているようです、ありがとう。私は13000ポイントを持っており、それは、このクエリを使用してテーブルを作成するために、173msecを取ります

WITH RECURSIVE dates AS (
    SELECT '1993-12-31'::timestamp years 
    UNION ALL 
    SELECT years + interval '1 year' FROM dates WHERE years < current_date 
) 

SELECT 
    EXTRACT(YEAR FROM d.years) years, 
    ST_Multi(ST_Collect(geom))::geometry(MultiPoint,3301) as polygon, count(years)::int as nr_features 
FROM 
    my_table p 
INNER JOIN 
    dates d ON p.point_created <= d.years 
    group by years 
    order by years asc; 
+0

ようこそ、私はうまくいきました! – banazs

関連する問題