2014-04-03 27 views
2

我的數據庫有一個表的幾何形狀(PointZ,4326)我在數據庫端做了很多我的處理,我注意到當我使用ST_MakeLine時,我似乎在數量上達到了上限點它將從一條線。我的表格和函數/查詢如下。postgis postgis ST_makeline是否有最大數量的點可以創建一條直線?

只要從子查詢返回的track_points數少於97,它就會工作。我知道這是因爲當96個或更少的點時,插入將表中的數據放在所有列中。對於有97個或更多點的所有記錄,它插入的是track_id,start_time和end_time。

我想知道這是否是postgis的ST_makeLine函數中的錯誤,還是我需要修改的postgres中的設置。

CREATE TABLE track_line_strings( 
    track_id bigint NOT NULL, 
    linestring geometry(LINESTRINGZ,4326), 
    start_time bigint NOT NULL, 
    end_time bigint NOT NULL, 
    CONSTRAINT track_line_strings_pk PRIMARY KEY (track_id) 
); 



CREATE OR REPLACE FUNCTION create_track_line_string() RETURNS trigger 
LANGUAGE plpgsql 
AS $$ 
    DECLARE 
      TRACKITEMID bigint := new.track_item_id; 
      TRACKID bigint := track_id from track_item ti where ti.id = TRACKITEMID; 
      STARTTIME bigint := MIN(ti.item_time) from track_item ti where ti.track_id = TRACKID; 
      ENDTIME bigint := MAX(ti.item_time) from track_item ti where ti.track_id = TRACKID; 
    BEGIN 
    IF EXISTS (SELECT track_id from track_line_strings where track_id = TRACKID) 
    THEN 
      UPDATE track_line_strings 
      SET start_time = STARTTIME, end_time = ENDTIME, linestring = ( 
        SELECT ST_Makeline(e.trackPosition) FROM 
          ( 
            Select track_id, tp.track_position AS trackPosition 
            FROM track_point tp JOIN track_item ti ON tp.track_item_id = ti.id 
            where ti.track_id = TRACKID ORDER BY ti.item_time ASC 
          ) E) 
        WHERE track_id = TRACKID; 
    ELSE 
      INSERT INTO track_line_strings(track_id, linestring, start_time, end_time) 
        SELECT TRACKID, ST_Makeline(e.trackPosition), STARTTIME, ENDTIME FROM 
        ( 
          Select track_id, tp.track_position AS trackPosition 
          FROM track_point tp JOIN track_item ti ON tp.track_item_id = ti.id 
          where ti.track_id = TRACKID ORDER BY ti.item_time ASC  
        )E; 
    END IF; 
    RETURN new; 
    END; 
$$; 

回答

1

似乎沒有限制。我正在查看pgAdminIII中的結果,並且數據輸出可以處理每列的字符數量必須有限制。我只是通過將結果複製粘貼到文本文件中才發現它實際上返回了超過96個點的行的值。

2

database limits are pretty high,一個字段中的1 GB數據值的幾何數據。它取決於哪種點的幾何形狀,但是它可能會用於構建LineString的幾千萬個點幾何的數量級。

如果是限制,您將看到一條關於「超出尺寸」的正確錯誤消息。


與pgAdminIII視空或丟失的數據是一個常見的問題,但沒有涉及到數據庫的侷限性:

+0

的問題是pgAdminIII的限制當在pgAdminIII中查看輸出時,顯示字符表示的數據超過未知閾值。 – Jeremy