我的數據庫有一個表的幾何形狀(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;
$$;
的問題是pgAdminIII的限制當在pgAdminIII中查看輸出時,顯示字符表示的數據超過未知閾值。 – Jeremy