Postgres邮政编码-未显示相同英里半径的列表

时间:2019-02-23 17:04:49

标签: postgresql zipcode earthdistance

使用Postgres和扩展名cubeearthdistance,我对半径范围为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。

我的问题是...。如果在50英里半径范围内返回foo(邮政编码78705),而其他列表为78232,为什么不在50英里范围内包含邮政编码78232的所有列表?半径78705?

1 个答案:

答案 0 :(得分:0)

两个50英里的缓冲区部分相互重叠。位于公共区域的条目(例如您的示例中的Foo)位于两个邮政编码之间的50英里之内。在其他地方,条目与一个邮政编码之间的距离小于50英里,而与另一个邮政编码之间的距离则比50英里远。

在下图中,只有绿色区域位于两个邮政编码的50英里之内,因此两个查询都将返回位于该区域的条目。

enter image description here