DBCException:LineString 中的点数无效(找到 1 - 必须为 0 或 >= 2)

DBCException: Invalid number of points in LineString (found 1 - must be 0 or >= 2)

我有一个名为 gps_points 的 table 的 postgres 数据库。此 table 有一列 indexlatitudelongitude

使用以下命令我已经能够添加和填充点几何列 point_geom

ALTER TABLE gps_points ADD COLUMN point_geom geometry(Point, 4326);
UPDATE gps_points SET point_geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326);

现在我想根据这些点创建线串。我希望我可以通过以下命令实现这一点:

ALTER TABLE gps_points ADD COLUMN line_geom geometry(Linestring,4326);
INSERT INTO gps_points (line_geom)
SELECT ST_MakeLine (gps.point_geom ORDER BY index) AS line_geom
    FROM gps_points AS gps
    GROUP BY gps.index;

但是,结果列中的所有行都显示以下错误:

DBCException: Invalid number of points in LineString (found 1 - must be 0 or >= 2)

谁能给我一个建议?

在您的屏幕截图中,我们可以看到每个 index 只有一条记录(顺便说一句,这不是列的推荐标签)并且错误消息说您需要多个点才能排序有一个合适的LineString。话虽如此,您必须寻找另一列来 GROUP BY 您的观点,或者只用整个 table:

创建一行
SELECT ST_MakeLine(point_geom ORDER BY index) FROM gps_points;

示例:

CREATE TEMPORARY TABLE gps_points (
  index SERIAL,
  latitude NUMERIC,
  longitude NUMERIC
);

插入三个不同的点

INSERT INTO gps_points VALUES 
  (1,52.37,4.92),(2,52.37,4.93),(3,52.375,4.92);

创建几何列并在您发布时填充它

ALTER TABLE gps_points ADD COLUMN point_geom geometry(Point, 4326);
UPDATE gps_points SET point_geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326);

根据以上三点创建LineString

SELECT ST_MakeLine(point_geom ORDER BY index) FROM gps_points;

如果您需要创建一个 table 以从 GIS 访问它,只需 运行 ..

CREATE TABLE my_long_linestring AS
SELECT ST_MakeLine(point_geom ORDER BY index) FROM gps_points;

.. 并在您的 GIS 中打开这个新的 table:

注意:PostGIS 将允许您创建一个具有单个点的 LineString(请参见下面的示例),但它可能会在您的系统中产生其他问题。特别是在查看器中.

SELECT ST_AsText(ST_MakeLine('SRID=4326;POINT(1 2)'::geometry));
    st_astext    
-----------------
 LINESTRING(1 2)