diff --git a/lib/models/filter/circle.js b/lib/models/filter/circle.js index 329d313e..e7908d09 100644 --- a/lib/models/filter/circle.js +++ b/lib/models/filter/circle.js @@ -1,24 +1,16 @@ 'use strict'; const debug = require('debug')('windshaft:filter:circle'); -function filterQueryTpl ({ sql, column, srid, lng, lat, radius } = {}) { +function filterQueryTpl ({ sql, column, srid, lng, lat, radiusInMeters } = {}) { return ` SELECT * FROM (${sql}) _cdb_circle_filter WHERE - ST_Intersects( - ${column}, - ST_Transform( - ST_Buffer( - ST_Transform( - ST_SetSRID(ST_Point(${lng},${lat}), 3857), - 4326 - )::geography, - ${radius} - )::geometry, - ${srid} - ) + ST_DWithin( + ${srid === 3857 ? `ST_Transform(${column}, 4326)::geography` : `${column}::geography`}, + ST_SetSRID(ST_Point(${lng}, ${lat}), 4326)::geography, + ${radiusInMeters} ) `; } @@ -51,7 +43,7 @@ module.exports = class CircleFilter { srid: this.srid, lng: this.lng, lat: this.lat, - radius: this.radius + radiusInMeters: this.radius }); debug(circleSql);