[postgis-users] Issue with ST_WITHIN

Michael Lubinsky mlubinsky at hotmail.com
Wed Aug 7 18:29:46 PDT 2019


The following two select statements  return  FALSE:


SELECT ST_WITHIN(CAST(bounds as GEOMETRY) , ST_MakePoint(1, 1) ) FROM m_polygon;


SELECT ST_WITHIN( ST_MakePoint(1, 1), CAST(bounds as GEOMETRY)  ) FROM m_polygon;


Why it is so? I think what the point (1,1) inside the given polygon:


SELECT bounds FROM m_polygon;

((0,0),(0,10),(10,0),(10,10),(0,0))

________________________________
From: postgis-users <postgis-users-bounces at lists.osgeo.org> on behalf of Michael Lubinsky <mlubinsky at hotmail.com>
Sent: Wednesday, August 7, 2019 6:08 PM
To: PostGIS Users Discussion <postgis-users at lists.osgeo.org>
Subject: Re: [postgis-users] Issue with ST_WITHIN

I understand now what the core issue is what I am trying feed POLYGON type to ST_WITHIN which expects the GEOMETRY type.
Given what I cannot change the table column type from POLYGON to GEOMETRY
is it possible to cast POLYGON to GEOMETRY inside SQL:


SELECT ST_WITHIN(CAST(bounds as GEOMETRY) , CAST(bounds as GEOMETRY) ) FROM m_polygon;

Thanks!



________________________________
From: postgis-users <postgis-users-bounces at lists.osgeo.org> on behalf of Darafei "Komяpa" Praliaskouski <me at komzpa.net>
Sent: Monday, August 5, 2019 11:57 PM
To: PostGIS Users Discussion <postgis-users at lists.osgeo.org>
Subject: Re: [postgis-users] Issue with ST_WITHIN

Hi,

The issue is indeed you are using Postgres polygons instead of PostGIS polygons. ST_MakePoint (note ST_ prefix) builds a postgis point.
Non-working countertpart would be this:
SELECT ST_WITHIN('(1,1)'::point, '(1,1)'::point ) ;


On Tue, Aug 6, 2019 at 7:37 AM Michael Lubinsky <mlubinsky at hotmail.com<mailto:mlubinsky at hotmail.com>> wrote:

Environment: PostgreSQL 11.4 with PostGIS 2.5.2

CREATE TABLE m_polygon (id SERIAL PRIMARY KEY, bounds POLYGON);
INSERT INTO m_polygon(bounds) VALUES(
  '(0.0, 0.0),  (0.0, 10.0), (10.0, 0.0), (10.0, 10.0), (0,0)'
);

SELECT ST_WITHIN(m_polygon.bounds , m_polygon.bounds ) FROM m_polygon;


I am getting the error message for SELECT statement above:

ERROR:  function st_within(polygon, polygon) does not exist
HINT:  No function matches the given name and argument types. You might
need to add explicit type casts


I was thinking what the reason for the error is: the ST_WITHIN arguments types should be GEOMETRY, but I am passing the POLYGONs.

However the following works:

SELECT ST_WITHIN(ST_MakePoint(1,1), ST_MakePoint(1,1) ) ;

Thanks!
Michael
_______________________________________________
postgis-users mailing list
postgis-users at lists.osgeo.org<mailto:postgis-users at lists.osgeo.org>
https://lists.osgeo.org/mailman/listinfo/postgis-users


--
Darafei Praliaskouski
Support me: http://patreon.com/komzpa
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20190808/d8c68389/attachment.html>


More information about the postgis-users mailing list