Hi Farrukh, I have no idea what is wrong with your setup of postgis.
Explain SELECT * FROM GeometryValueType gvt WHERE ( ST_SRID(gvt.geometry) = 4326 AND within(gvt.geometry, ST_GeomFromText('POLYGON((-100 0, 0 0, 0 100, -100 100, -100 0))', 4326)) = true ); has to bve print about the usage of the partial index. I can not imagine if there are only geometries with srid 4326, postgis is seeing another srid. Gr Ralf Am Freitag 14 Januar 2011, 17:58:33 schrieb Farrukh Najmi: > Hi Ralf, > > I tried the following steps: > > 1. creating the index: CREATE INDEX GeometryValueType_geom_wgs_idx ON > GeometryValueType using gist (geometry) where ST_Srid(geometry) = > 4326; > 2. Then ReIndexing the GeometryValueType table > 3. Then running your last suggested query but still get "Operation on > mixed SRID geometries" error :-( > > SELECT * FROM GeometryValueType gvt WHERE ( ST_SRID(gvt.geometry) = > 4326 AND > within(gvt.geometry, ST_GeomFromText('POLYGON((-100 0, 0 0, 0 > 100, -100 100, -100 0))', 4326)) = true ); > > Am I missing something in your instructions? Thanks again for your kind > help. > > On 01/14/2011 11:29 AM, Ralf Suhr wrote: > > Hi Farrukh, > > > > your setup produce this error. > > > > SELECT * FROM GeometryValueType gvt WHERE > > > > ST_SRID(gvt.geometry) = 4326 AND gvt.id IN ( > > > > SELECT gvt1.id FROM GeometryValueType gvt1 WHERE > > > > within(gvt1.geometry, ST_GeomFromText('POLYGON((-100 0, 0 0, 0 > > > > 100, -100 100, -100 0))', 4326)) = true > > > > ); > > > > or > > > > SELECT * > > FROM GeometryValueType gvt > > WHERE gvt.id IN ( > > > > SELECT gvt1.id > > FROM GeometryValueType gvt1 > > WHERE ST_SRID(gvt.geometry) = 4326 > > > > ) AND Within(gvt1.geometry, ST_GeomFromText('POLYGON((-100 0, 0 0, > > 0 > > > > 100, -100 100, -100 0))', 4326)) = true; > > > > become the same in postgresql planner. I've testet all querys with > > Postgis 1.4.0 without any error. Except > > SELECT * FROM GeometryValueType gvt WHERE ( ST_SRID(gvt.geometry) = 4326 > > AND > > > > within(gvt.geometry, ST_GeomFromText('POLYGON((-100 0, 0 0, 0 100, > > > > -100 100, -100 0))', 4326)) = true ); > > > > But you can create a partial index and the last query will work: > > > > CREATE INDEX GeometryValueType_geom_wgs_idx ON GeometryValueType using > > gist (geometry) where ST_Srid(geometry) = 4326; > > > > Gr > > Ralf > > > > Am Freitag 14 Januar 2011, 16:33:33 schrieb Farrukh Najmi: > >> Hi Ralph, > >> > >> Thanks so very much for your help. > >> > >> In my PG 8.3 PostGIS 1.3.3 setup when I try to run explain on the nested > >> select version of my query I get: > >> > >> ------------------------------------------------------------------------ > >> --- > >> ----------------------------------------------------------------------- > >> ---- > >> ----------------------------------------------------------------------- > >> ---- ---------------------- Nested Loop IN Join (cost=0.00..2.69 rows=1 > >> width=358) > >> > >> Join Filter: (gvt.id = gvt1.id) > >> -> Seq Scan on geometryvaluetype gvt (cost=0.00..1.33 rows=1 > >> > >> width=358) > >> > >> Filter: (st_srid(geometry) = 4326) > >> > >> -> Seq Scan on geometryvaluetype gvt1 (cost=0.00..1.27 rows=7 > >> > >> width=8) Filter: within(gvt1.geometry, > >> '0103000020E6100000010000000500000000000000000059C0000000000000000000000 > >> 000 > >> 0000000000000000000000000000000000000000000000000000594000000000000059C > >> 0000 000000000594000000000000059C00000000000000000'::geometry) (6 rows) > >> > >> Based on above it seems I am first filtering on SRID - No? > >> > >> What am I missing? > >> > >> Can you tell me what my query should look like to make it work? > >> > >> On 01/14/2011 10:12 AM, Ralf Suhr wrote: > >>> Hi Farrukh, > >>> > >>> you have to first check for the right srid before you can compare the > >>> bbox. If you use the SQL command EXPLAIN for your query yyou can see > >>> what will be done. > >>> > >>> SELECT * > >>> FROM GeometryValueType gvt > >>> WHERE gvt.id IN ( > >>> > >>> SELECT gvt1.id > >>> FROM GeometryValueType gvt1 > >>> WHERE ST_SRID(gvt.geometry) = 4326 > >>> > >>> ) AND Within(gvt1.geometry, ST_GeomFromText('POLYGON((-100 0, 0 > >>> 0, 0 > >>> > >>> 100, -100 100, -100 0))', 4326)) = true; > >>> > >>> Gr > >>> Ralf > >>> > >>> Am Freitag 14 Januar 2011, 15:55:31 schrieb Farrukh Najmi: > >>>> BTW, using nested SELECT did not work either as shown in follow query: > >>>> > >>>> SELECT * FROM GeometryValueType gvt WHERE > >>>> > >>>> ST_SRID(gvt.geometry) = 4326 AND gvt.id IN ( > >>>> > >>>> SELECT gvt1.id FROM GeometryValueType gvt1 WHERE > >>>> > >>>> within(gvt1.geometry, ST_GeomFromText('POLYGON((-100 0, 0 > >>>> 0, 0 > >>>> > >>>> 100, -100 100, -100 0))', 4326)) = true > >>>> > >>>> ) > >>>> > >>>> It again gives the "Operation on mixed SRID geometries" error :-( > >>>> > >>>> It seems to me that surely this should be doable. If it is not doable, > >>>> do folks think that is an issue that should be tracked? > >>>> > >>>> On 01/14/2011 09:49 AM, Farrukh Najmi wrote: > >>>>> Hi Ture, > >>>>> > >>>>> Thanks for the advice. Unfortunately WITH is not supported in > >>>>> postgres 8.3. So I could not try it out. > >>>>> > >>>>> Any other ideas? > >>>>> > >>>>> On 01/14/2011 12:38 AM, Ture Pålsson wrote: > >>>>>> 2011/1/14 Farrukh Najmi<farr...@wellfleetsoftware.com>: > >>>>>>>> --Gives Error: Operation on mixed geometries > >>>>>>>> SELECT * FROM GeometryValueType gvt WHERE ( ST_SRID(gvt.geometry) > >>>>>>>> = 4326 > >>>>>>>> AND > >>>>>>>> > >>>>>>>> within(gvt.geometry, ST_GeomFromText('POLYGON((-100 0, 0 0, 0 > >>>>>>>> > >>>>>>>> 100, -100 > >>>>>>>> 100, -100 0))', 4326)) = true ) > >>>>>> > >>>>>> Does SQL guarantee left-to-right evaluation and short-circuiting of > >>>>>> AND checks the way that C does? I must confess I have no clue. > >>>>>> However, if it doesn't, that might be what's causing your headaches. > >>>>>> I'd try moving the SRID filter into a WITH construct or a sub-select > >>>>>> just to see what happens: > >>>>>> > >>>>>> WITH filteredgeom AS ( > >>>>>> > >>>>>> SELECT * FROM gvt WHERE ST_SRID(geometry) = 4326) > >>>>>> > >>>>>> SELECT * FROM filteredgeom WHERE within(geometry, ...) ; > >>>>>> > >>>>>> Probably lots of syntax errors (haven't had breakfast yet) but you > >>>>>> get the idea... > >>>>>> > >>>>>> -- Ture > >>>>>> > >>>>>> _______________________________________________ > >>>>>> postgis-users mailing list > >>>>>> postgis-users@postgis.refractions.net > >>>>>> http://postgis.refractions.net/mailman/listinfo/postgis-users _______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users