如何使用两个长生不老药 Geo.Point 位置以米为单位进行 st_distance 查询?

问题描述 投票:0回答:2

假设我有两个纬度、经度对。 (例如,(10.786377、106.700292)、(10.787126、106.725805))。我知道它们相距 2.789 公里。

我有一个功能

 def within(latitude, longitude, radius) do
    point2 = %Geo.Point{coordinates: {latitude, longitude}}
    query = from post in Post, where: st_distance(post.location, ^point2)  < ^radius,  select: post
    Repo.all(query)
  end

那个

radius
单位不是米

有了我们的两个原始点,这是我可以包含另一个点的最小距离:

Post.within(10.786377, 106.700292, 0.025523999)

这里每单位约 109.26 公里。经度 106.700292 处的 1 度为 111601 米 x 0.025523999 = 2,848 米,接近已知的 2.789 公里差异。

有没有一种方法可以根据米而不是给定纬度的度数进行查询?

postgis elixir phoenix-framework ecto
2个回答
4
投票

想通了。

我使用

:geometry
作为我的迁移类型。你需要使用
:geography


0
投票

要在事后更改此设置,您可以在迁移中将现有的几何列更改为地理,例如:

execute("ALTER TABLE cities ALTER COLUMN location TYPE geography(Point,4326);")
© www.soinside.com 2019 - 2024. All rights reserved.