|
When my layer include big curved object like long-way road, river or lake, it is often returned even if its geometry do not cross bounding box area. I tried to trace postgres query and saw that query returned objects that its bounding box crosses with requesting bounding box.
SELECT "id",encode(ST_AsEWKB("geometry"),'base64') as "geometry" FROM "public"."spatial" WHERE "geometry" && ST_GeomFromText('POLYGON ((30.31 59.93, 30.31 59.93, 30.31 59.93, 30.31 59.93, 30.31 59.93))', 4326) LIMIT 1000000
I think that more correctly use PostGis function ST_Intersects()
SELECT "id",encode(ST_AsEWKB("geometry"),'base64') as "geometry" FROM "public"."spatial" WHERE ST_Intersects( "geometry", ST_GeomFromText('POLYGON ((30.31 59.93, 30.31 59.93, 30.31 59.93, 30.31 59.93, 30.31 59.93))', 4326) ) LIMIT 1000000
When I use ms sql spatial, it call Filter() function, that do not returned big curved objects SELECT top 1000000 "id","geometry" as "geometry" FROM "dbo"."spatial" WHERE "geometry".Filter(geometry::STGeomFromText('POLYGON ((30.31 59.93, 30.31 59.93, 30.31 59.93, 30.31 59.93, 30.31 59.93))', 4326) ) = 1
|