我试图找到以米为单位的线串长度
在我的控制器节目中:
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 怎么了?
答案 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