假设我有两个纬度、经度对。 (例如,(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 公里差异。
有没有一种方法可以根据米而不是给定纬度的度数进行查询?
想通了。
我使用
:geometry
作为我的迁移类型。你需要使用:geography
要在事后更改此设置,您可以在迁移中将现有的几何列更改为地理,例如:
execute("ALTER TABLE cities ALTER COLUMN location TYPE geography(Point,4326);")