[postgis-users] Issue with ST_WITHIN

Tumasgiu Rossini rossini.t at gmail.com
Thu Aug 8 00:26:26 PDT 2019


Your geometry is invalid, as the vertex (10, 0)
occurs before (10, 10).

    select
st_isvalid('((0,0),(0,10),(10,0),(10,10),(0,0))'::polygon::geometry);
    --returns false

Your polygon looks like this :
  _
|\  /
|/_\

(Sorry for the bad ascii art)

Le jeu. 8 août 2019 à 03:30, Michael Lubinsky <mlubinsky at hotmail.com> a
écrit :

> 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>
> 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
> https://lists.osgeo.org/mailman/listinfo/postgis-users
>
>
>
> --
> Darafei Praliaskouski
> Support me: http://patreon.com/komzpa
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/postgis-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20190808/6697868b/attachment.html>


More information about the postgis-users mailing list