[postgis-users] ST_Intersects(BOOM!)

Regina Obe lr at pcorp.us
Mon Aug 28 20:38:55 PDT 2017


Aaron,

This works fine for me.  

I'm also assuming you are using geometry and not geography so the code snippet you pointed at shouldn't be relevant.

In case you are though I tested both and they work fine for me.

What does your 

SELECT postgis_full_version(); 

Return?  Mine returns:
POSTGIS="2.4.0dev r15600" GEOS="3.7.0dev-CAPI-1.11.0 8fe2ce6" PROJ="Rel. 4.9.1, 04 March 2015" GDAL="GDAL 2.2.1, released 2017/06/23" LIBXML="2.7.8" LIBJSON="0.12" LIBPROTOBUF="1.2.1" RASTER

But the 2.4.0 part shouldn't matter, if you are running a lower Proj, that might matter.

Here is how I tested -- just to verify we are testing the same thing

I got to test out my new http extension compile - https://github.com/pramsey/pgsql-http 
 :)

CREATE EXTENSION http;

CREATE TABLE whosonfirst(id serial, geom geometry);

--SELECT http_set_curlopt('CURLOPT_CAINFO', 'C:/ssl/certs/ca-bundle.crt');
INSERT INTO  whosonfirst(geom)
SELECT ST_GeomFromGeoJSON(h.content::jsonb->>'geometry')
FROM http_get('https://whosonfirst.mapzen.com/data/136/253/057/136253057.geojson') AS h;

-- this works

SELECT id  FROM whosonfirst WHERE ST_Intersects(geom::geography, ST_GeomFromGeoJSON('{"type": "Point",
"coordinates": [145.748209, 15.193315]}')::geography);

Returns 1 as expected.

This also works:

SELECT id  FROM whosonfirst WHERE ST_Intersects(geom::geometry, ST_GeomFromGeoJSON('{"type": "Point",
"coordinates": [145.748209, 15.193315]}')::geometry);

Returns 1


SELECT ST_NPoints(geom) from whosonfirst;
Returns:
36822

Hope that helps,
Regina


-----Original Message-----
From: postgis-users [mailto:postgis-users-bounces at lists.osgeo.org] On Behalf Of Aaron Cope
Sent: Monday, August 28, 2017 6:24 PM
To: postgis-users at lists.osgeo.org
Subject: [postgis-users] ST_Intersects(BOOM!)

Hi,

Apologies if this has been answered elsewhere already. If it has I've not been able to find it.

We are using PGIS to do point-in-poly lookups and having trouble involving certain very large records.

SELECT version();
                                                version
--------------------------------------------------------------------------------------------------------
 PostgreSQL 9.6.4 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu
4.8.4-2ubuntu1~14.04.3) 4.8.4, 64-bit
(1 row)

Specifically:

https://whosonfirst.mapzen.com/spelunker/id/136253057/
https://whosonfirst.mapzen.com/data/136/253/057/136253057.geojson

Whose MBR is:

-179.143503384, -14.532891534, 179.780935092, 71.412502346

This is where it starts to get confusing for me. PGIS indicates that both the geometry itself and the point we are trying to intersect with are valid:

SELECT ST_IsValid(geom::geometry) FROM whosonfirst WHERE id=136253057;  st_isvalid
------------
 t
(1 row)

SELECT ST_IsValid(ST_GeomFromGeoJSON('{"type": "Point", "coordinates":
[145.748209, 15.193315]}')::geometry);
 st_isvalid
------------
 t
(1 row)

However, when try to intersect against the former I trigger the "BOOM!
Could not generate outside point" error:

SELECT id, parent_id, placetype_id, meta FROM whosonfirst WHERE ST_Intersects(geom, ST_GeomFromGeoJSON('{"type": "Point",
"coordinates": [145.748209, 15.193315]}'));
ERROR:  BOOM! Could not generate outside point!

https://github.com/postgis/postgis/blob/cc3437595e88eac7f20b0f3b780a3816cdc912c9/liblwgeom/lwgeodetic.c#L1536-L1537

We've also been able to reproduce the problem with this record which has a similarly large MBR:

https://whosonfirst.mapzen.com/spelunker/id/136253037/
https://whosonfirst.mapzen.com/data/136/253/037/136253037.geojson

Am I missing something obvious or is there something else at work here?


Thanks,
_______________________________________________
postgis-users mailing list
postgis-users at lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/postgis-users



More information about the postgis-users mailing list