Ruby on rails 更新前如何控制几何体类型

Ruby on rails 更新前如何控制几何体类型,ruby-on-rails,postgresql,postgis,Ruby On Rails,Postgresql,Postgis,我有一个rails方法,可以将多行线合并到linestring中 有时,我在数据中出现错误,并收到以下错误消息: 几何图形类型(多重线串)与列类型(线串)不匹配 我如何控制它并防止错误?我可以直接在sql查询中执行此操作吗 def更新路径(跟踪) 更新(路径:合并跟踪(跟踪)) 结束 def合并_轨迹(跟踪) tracks=如果您可以包含一个返回多行线的行字符串示例,这将非常有用。但这可能是因为线串不共享一个公共点,因此无法合并 如果您可以将这些行抛出,而不是修复它们,那么这应该是可行的: SE

我有一个rails方法,可以将多行线合并到linestring中

有时,我在数据中出现错误,并收到以下错误消息:

几何图形类型(多重线串)与列类型(线串)不匹配

我如何控制它并防止错误?我可以直接在sql查询中执行此操作吗

def更新路径(跟踪)
更新(路径:合并跟踪(跟踪))
结束
def合并_轨迹(跟踪)

tracks=如果您可以包含一个返回多行线的行字符串示例,这将非常有用。但这可能是因为线串不共享一个公共点,因此无法合并

如果您可以将这些行抛出,而不是修复它们,那么这应该是可行的:

SELECT ST_AsGeoJson(St_linemerge(ST_Collect(tr.path))) as geojson
      FROM tracks tr
      INNER JOIN trace_tracks ON tr.id = trace_tracks.track_id
      WHERE trace_tracks.trace_id = #{trace.id}
      AND ST_GeometryType(St_linemerge(ST_Collect(tr.path))) = 'ST_Linestring';
如果要保留它们并且可以返回多行,则可以执行以下操作:

SELECT ST_AsGeoJson(geom) as geojson
   FROM
   (SELECT (ST_Dump(ST_LineMerge(ST_Collect(tr.path)))).*
      FROM tracks tr
      INNER JOIN trace_tracks ON tr.id = trace_tracks.track_id
      WHERE trace_tracks.trace_id = #{trace.id}
    ) g;
如果要从多行的点强制创建一条线(即,将两条不相交的线连接在一起),并可能产生意外结果,可以执行此操作(使用风险自负):

它简单地将一行的末尾连接到下一行的开头,不管这些行的存储顺序如何


SELECT ST_AsGeoJson(ST_MakeLine(geom)) as geojson
   FROM
   (SELECT (ST_DumpPoints(tr.path)).*
      FROM tracks tr
      INNER JOIN trace_tracks ON tr.id = trace_tracks.track_id
      WHERE trace_tracks.trace_id = #{trace.id}
    ) g;