PostgreSQL:如何解决"无法生成外部点" ST_Intersects中的错误

时间:2017-03-15 14:30:00

标签: postgresql postgis

我在径向地理空间搜索中遇到了一个错误,如果用户定义了一个半径超过任意一个极点的圆圈,我会遇到PostGIS错误:" BOOM!无法生成外部点"通过调用ST_Intersects引发的。我知道为什么会发生这种情况,但有没有办法让我修剪我要查询的缓冲地理/几何,以免它导致ST_Intersects遇到任何外部点?

可以使用以下查询复制我的问题:

SELECT ST_intersects(
    ST_BUFFER(
        ST_geomFromGeoJSON('{"type":"Point","coordinates":[-110.390625,42.293564192170095]}')::geography,
        17712927.122199997
    ),
    ST_geomFromGeoJSON('{"type":"Point","coordinates":[-28.828124999999996,84.7060489350415]}')::geography
);

1 个答案:

答案 0 :(得分:1)

再次查看文档后,我注意到他们建议不要使用ST_Buffer进行径向搜索。相反,使用ST_DWithin(地理,地理,米)将避免此问题。

以下查询将满足我的问题:

SELECT ST_DWithin(
    ST_geomFromGeoJSON('{"type":"Point","coordinates":[-110.390625,42.293564192170095]}')::geography,
    ST_geomFromGeoJSON('{"type":"Point","coordinates":[-28.828124999999996,84.7060489350415]}')::geography,
    17712927.122199997
);