【问题标题】:How to make a PostGIS LINESTRING with only one initial point如何制作只有一个初始点的 PostGIS LINESTRING
【发布时间】:2020-11-06 11:37:46
【问题描述】:

我有一个服务会在它移动时发送 GPS 坐标,这些坐标将被添加到我的 PostgreSQL/PostGIS 数据库中。

现在,创建了一个表,其中有一列是 Geometry("LINESTRING") 类型。但是,似乎要制作 LINESTRING,您至少需要两个点。

但是,我一次只能获得一分。所以最初当服务开始向我发送位置数据时,它只有一个位置要发送。我将不得不等待第二次位置提交才能获得至少两分。那么当我收到第一分时我应该怎么做,因为我还不能用它来制作 LINESTRING?

当我到目前为止只有一个点时,在这种情况下,对于初始情况,建议遵循什么程序?

【问题讨论】:

    标签: postgresql geometry gis postgis


    【解决方案1】:

    使用ST_MakeLine 创建LineStrings,您将能够临​​时将您的单点线 添加到LineString 几何列中:

    又快又脏:

    CREATE TEMPORARY TABLE t (id int, geom Geometry(LINESTRING));  
    
    INSERT INTO t VALUES (1, (SELECT ST_MakeLine('POINT(1 2)'::geometry)));
    SELECT id,ST_AsText(geom) FROM t;
    
     id |    st_astext    
    ----+-----------------
      1 | LINESTRING(1 2)
    (1 Zeile)
    

    然后用相同的功能更新它也应该工作:

    UPDATE t SET geom = ST_MakeLine(geom,'POINT(2 3)')
    WHERE id = 1;
    
    SELECT id,ST_AsText(geom) FROM t;
    
     id |      st_astext      
    ----+---------------------
      1 | LINESTRING(1 2,2 3)
    (1 Zeile)
    

    【讨论】:

      【解决方案2】:

      只有一个点的线串似乎很奇怪。

      但是像这样的堕落者呢

      'LINESTRING(1.23 4.56,1.23 4.56)'::geometry
      

      【讨论】:

      • 是的,这是我已经采用的解决方案 - 只是复制初始点。但我认为可能有解决我最初问题的标准方法,所以我发布了这个问题,但也许没有。
      • 也许最好选择更合适的类型,比如点集合,并仅在需要时从中构造线串。
      • 这是一个很好的观点。但我想现在我想一想,实际使用线串对我来说有什么意义?我只是打算使用线串,因为我想在一个人移动时有一个点的 gps 路径。但我绝对可以将其存储为点的集合。如果我想做诸如检测两条线何时重叠之类的事情,我需要将点集合转换为线串的唯一情况吗?仅在地图上显示点,我不需要线串对吗?
      • (假设点的集合保持我插入点的顺序)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      相关资源
      最近更新 更多