# ST_DWithin() Point to Polygon - What is referenced?

I have a Point geometry and several Polygons surrounding the point geometry. If I use the `ST_DWithin()` function and give it, lets say - 500m as a parameter. What Polygons return true? The Polygons that would intersect with a 500m buffer around the point geometry. Or the polygons that have their centroid within the 500m buffer of the point geometry? Or the polygons that are completly within the 500m radius of the point geometry? I hope you understand what I am aiming at.

• Alternative "intersect with a 500m buffer around the point geometry", just like ST_Distance works. But interesting that I could not easily find where it is explained. Sep 1 at 11:39
• @user30184 Yes I did not find any information on this. Thats why I asked here! Sep 1 at 12:07
• Those polygons that have any point set or ring segment (vector) distance of equal or less than 500m to the point, or have the point intersect its interior. Sep 1 at 12:07
• The latter condition feels unnecessary. If the point intersects the interior of the polygon (thus, is within), the distance=0. Sep 1 at 12:34
• @user30184 I was referring to how this is projected in low-level vector math, where it is necessary to determine if the point is inside the polygon first, in order to then declare it to be at distance = 0. The high level definition you stated is correct, of course. Sep 1 at 14:58

In the OpenGIS Filter Encoding Implementation Specification http://docs.opengeospatial.org/is/09-026r2/09-026r2.html DWithin is defined this way:

The spatial operators DWithin and Beyond test whether the value of a geometric property is within or beyond a specified distance of the specified literal geometric value. Distance values are expressed using the <Distance> element. The content of the <Distance> element represents the magnitude of the distance and the units attribute is used to specify the units of measure.

I found a nice description from https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Geospatial/STV_DWithin.htm?

Determines if the shortest distance from the boundary of one spatial object to the boundary of another object is within a specified distance.

EDIT Unfortunately I think that this description that considers only boundaries is wrong if one object is within another object.

It is to be noted that the distance from a polygon to a point that is inside the polygon is always zero. This returns 0

``````select ST_Distance(
ST_GeomFromText('POLYGON ((3 21, 4 20, 2 20, 3 21))'),
ST_GeomFromText('POINT (3 20.5)'));
``````

But this returns 0.35355

``````select ST_Distance(ST_Boundary(
ST_GeomFromText('POLYGON ((3 21, 4 20, 2 20, 3 21))')),
ST_GeomFromText('POINT (3 20.5)'));
``````