我使用postgis搜索给定范围内相对于给定原点的所有点。我正在查看postgis提供的所有文档,但似乎不知道如何找到解决方案?
我的位置表如下所示:
Id - INT(11)
Longitude - DOUBLE
Latitude - DOUBLE
Address - LONGTEXT
City - LONGTEXT
Region - LONGTEXT
Country - LONGTEXT
输入将是 Longitude
, Latitude
和一个 Range
(如公里或英里)。
我希望的是接收到 Range
.
2条答案
按热度按时间eqqqjvef1#
欢迎来到so。
postgis依赖于类型字段中嵌入的坐标
geometry
或者geography
. 也就是说,表结构不应该将坐标存储到两个不同的double precision
但在一个单一的领域。如果仍然可以更改表结构,只需在表中添加新的几何图形列:
用你的大脑创造几何图形
longitude
以及latitude
列可以执行以下操作:在此之后,您可能需要创建一个索引,例如。。
.. 并使用
ST_DWithin
```SELECT * FROM your_table
WHERE ST_DWithin(geom,
ST_MakePoint(input_lon, input_lat),input_distance)
3qpi33ja2#
这对于postgis来说是微不足道的,比如
这里@range是以km为单位的,所以我乘以1000得到地理计算中使用的米。请注意,如果您有大量数据,查询可能会很慢。为了加快速度:向表中添加地理类型的列-与的第一个参数相同
ST_DWithin
,并在查询中使用它而不是此参数。您还需要为此表创建一个空间索引。