首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从一个很长的位置知道这个点是否在一个圆内

从一个很长的位置知道这个点是否在一个圆内
EN

Stack Overflow用户
提问于 2022-04-25 13:41:29
回答 1查看 92关注 0票数 1

因此,我有一个模型,保存拉丁数据。我想要做一种方法,给出一个point_x,point_y,看看我的定位模型是否有一个点在500米或更小。

以下是几个要点的例子:

代码语言:javascript
运行
复制
Location.longlat.x = 43.3233
Location.lonlat.y = 23.3233

point_x = 32.3233
point_y = 23.323

我用postgis为我的模型存储这些长坐标。到目前为止,我知道它把它们保存为球面点,并且是。那么,是否有一种方法将它们定义为平面点,并计算它们是否接近500米或更少?

编辑:下面是我在模型中存储longlat坐标的方式:

代码语言:javascript
运行
复制
t.geography "longlat", limit: {:srid=>4326, :type=>"st_point", :geographic=>true}

编辑:我试图使用的脚本

代码语言:javascript
运行
复制
  ForecastLocation.all.each do |forecast_location|
     ForecastLocation.where("ST_Distance_Sphere(ST_MakePoint(
       {forecast_location.longlat.x},#{forecast_location.longlat.y}),
        ST_MakePoint(#{circle_x},#{circle_y})<500")

ForecastLocation = is模型名

上面定义的longlat=列,保存x,y

circle_x

circle_y =构成要点的变量,并将其与我的所有ForecastLocation.longlat进行比较

我要做的是做和选择的答案一样的事情,但是只需要有接近500米圆的所有物体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 07:41:26

您可以通过ST_DistanceSphere获得球面上两点之间的距离(以米为单位)。

代码语言:javascript
运行
复制
SELECT ST_DistanceSphere(
  ST_MakePoint(43.3233, 23.3233),
  ST_MakePoint(32.3233, 23.323)
);
--> 1122927.11865462

要选择500米范围内的所有位置,您可以使用如下所示:

代码语言:javascript
运行
复制
SELECT *
FROM locations
WHERE ST_DistanceSphere(
  ST_MakePoint(x, y),
  ST_MakePoint(32.3233, 23.323)
) <= 500;

其中locations是您的表,x / y是您的lat / long列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72000542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档