如何在postgis中的ecto查询中使用st_buffer函数?

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

我尝试像这样在postgis中进行查询

    from(r in Region,
          select: count(r.ogc_fid),
          where:
            st_intersects(
              r.region_geometry,
              fragment(
                "ST_Buffer(ST_GeomFromText('POINT(? ?)', '4326'), ?, 'quad_segs=2')",
                ^long,
                ^lat,
                0.05
              )
            )
        )
        |> Repo.one() > 0

但这不起作用,因为引号内的参数对于 pg 来说是不可见的..

我尝试一下

point = %Geo.Point{coordinates: {long, lat}, srid: 4326}

from(r in Region,
  select: count(r.ogc_fid),
  where: st_intersects(r.region_geometry, st_buffer(^point, 0.05))
)
|> Repo.one() > 0

但是抛出错误:

Postgrex expected a binary, got %Geo.Point{coordinates: {34.427798809874055, 53.26427478941554}, srid: 4326, properties: %{}}.

如何在postgis中的ecto查询中使用

st_buffer
函数?

elixir postgis ecto
1个回答
0
投票

我不太明白你在做什么,但从错误消息来看,我猜你需要使用不同的点值。

再次,不熟悉您尝试调用的接口,但考虑到错误消息,我想如果您尝试这样做,您可能会发现一些东西:

point = "34.427798809874055, 53.26427478941554"

from(r in Region,
  select: count(r.ogc_fid),
  where: st_intersects(r.region_geometry, st_buffer(^point, 0.05))
)
|> Repo.one() > 0

它可能不会(也可能不会)解决你的问题,但它可能会给你一些关于问题所在的线索。

© www.soinside.com 2019 - 2024. All rights reserved.