gpt4 book ai didi

ruby-on-rails - 事件记录和 PostGIS ST_BUFFER : LinearRing failed ring test

转载 作者:行者123 更新时间:2023-12-04 10:31:30 25 4
gpt4 key购买 nike

我正在开发的一个应用程序有一个 regions包含名为 polygon 的几何列的表.该应用程序通过 activerecord-postgis-adapter 使用 PostGIS gem 。涉及几何列的 Active Record 迁移产生的模式显示:
t.geometry "polygon", limit: {:srid=>0, :type=>"geometry"}
用户可以通过前端的 Leaflet.js map 存储圆形、矩形和多边形。创建圆时,浏览器请求包括圆心和半径(以米为单位)。

为了创建一个圆,应用程序将中心和半径与多边形一起存储。要保存多边形,Region模型使用以下方法:

def uncached_circle(coordinates, radius)
ActiveRecord::Base.connection.execute("
SELECT ST_Buffer(ST_GeomFromText('#{uncached_point(coordinates.first)}')::geography, #{radius}, 'quad_segs=8')::geometry AS circle;
")[0]["circle"]
end

我遇到了一些问题,其中最紧迫的是某些圈子失败并显示 LinearRing failed ring test错误。例如,这些请求参数:
{"name"=>"New Orleans, LA", "coordinates"=>[{"lat"=>29.9510658, "lng"=>-90.0715323}], "radius"=>25000, "shape"=>"circle", "format"=>:json, "region"=>{"name"=>"New Orleans, LA", "shape"=>"circle"}}
...从上述方法生成此查询:
SELECT ST_Buffer(ST_GeomFromText('POINT(29.9510658 -90.0715323)')::geography, 25000, 'quad_segs=8')::geometry AS circle;

...因 LinearRing 错误而失败。另一个以波士顿为中心的圆(例如)通过。

我依靠圆的多边形表示与其他圆进行相交测试。

我对 PostGIS 没有经验,经过大量研究和各种尝试后,我无法解决这个问题。我能得到的最接近的是将圆创建查询包装在 ST_MakeValid 中。 ,我认为这是一种代码异味。

谁能诊断出我做错了什么?很高兴根据需要提供更多详细信息。谢谢你。

最佳答案

我相信您正在切换坐标对的顺序。应该是 lon,lat而不是 lat,lon .

因此,请使用 POINT(-90.0715323 29.9510658) 尝试您的查询和 不是 POINT(29.9510658 -90.0715323) :

SELECT 
ST_Buffer('POINT(-90.0715323 29.9510658)'::geography,
25000,
'quad_segs=8')::geometry AS circle;

enter image description here

进一步阅读: WGS84 (EPSG:4326)

关于ruby-on-rails - 事件记录和 PostGIS ST_BUFFER : LinearRing failed ring test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com