长度以米为单位的线串(带轨道) - 几何形状无效

时间:2018-05-19 14:51:01

标签: ruby-on-rails postgis

我试图找到以米为单位的线串长度

在我的控制器节目中:

def show
  @track = Track.friendly.find(params[:id])
  @track_length = Track.find_by_sql ["SELECT ST_Length('path') FROM tracks WHERE id = ?", @track.id]
end

我的展示视图:

<p>Track id : <%= @track.id%></p>
<p>Longueur : <%= @track_length %></p>
<p>Linestring : <%= @track.path %></p>

返回

PG :: InternalError:错误:解析错误 - 无效几何HINT:“pa”&lt; - 解析几何中位置2的错误语境:SQL函数“st_length”语句1:SELECT ST_Length('path')FROM tracks WHERE id = 1 怎么了?

2 个答案:

答案 0 :(得分:0)

我找到了答案:

在控制器中:

@track_length = Track.find_by_sql(["SELECT (ST_Length(path::geography)/1000)  AS length FROM tracks WHERE id = ?", @track.id])

在show:

<p>Longueur : <%= number_with_precision(@track_length.first.length, precision: 2) %> kilomètres</p>

也许有更好的解决方案,但它有效;)

答案 1 :(得分:0)

我会以不同的方式解决这个问题。在您的班级this.test = function() {return "Hello world";};中添加如下方法:

Track

所以我们记住长度(记住它)。如果未设置class Track def length @length ||= calculate_length end def calculate_length length_sql = <<-SQL select st_length(path) as length from tracks where id=#{self.id} SQL Track.connection.execute(length_sql).first["length"] end end ,我们计算长度,否则我们只返回先前计算的值。

然后在您看来,您可以执行类似

的操作
@length