使用Postgres和扩展cube和earthdistance,我对半径范围为50英里的邮政编码78705执行以下查询:
WITH query1 AS(SELECT * FROM listings
WHERE earth_box(ll_to_earth(30.2961708, -97.73895429999999), 80467.2)
@> ll_to_earth(listings.lat, listings.lng)我得到了foo列表的结果,这很棒。
如果我查询半径范围为50英里的邮政编码78232:
WITH query1 AS(SELECT * FROM listings
WHERE earth_box(ll_to_earth(29.59442259999999, -98.4568128), 80467.2)
@> ll_to_earth(listings.lat, listings.lng)我得到了预期的结果,包括清单foo。
我的问题是……如果在半径为78232的50英里范围内返回foo(邮政编码为78705),并且返回的其他列表为78232,那么为什么不将来自邮政编码78232的所有列表都包括在半径为78705的50英里范围内?
发布于 2019-02-25 06:32:39
两个50英里缓冲区部分彼此重叠。位于公共区域的条目-例如您示例中的Foo -距离两个邮政编码不到50英里,条目距离一个邮政编码不到50英里,但距离另一个邮政编码不到50英里。
在下图中,只有绿色区域位于两个邮政编码的50英里范围内,因此两个查询都将返回位于此区域的条目。

https://stackoverflow.com/questions/54843955
复制相似问题