<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.3790.3959" name=GENERATOR>
<STYLE>@font-face {
        font-family: ËÎÌå;
}
@font-face {
        font-family: Verdana;
}
@font-face {
        font-family: @ËÎÌå;
}
@page Section1 {size: 595.3pt 841.9pt; margin: 72.0pt 90.0pt 72.0pt 90.0pt; layout-grid: 15.6pt; }
P.MsoNormal {
        TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 10.5pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"; TEXT-ALIGN: justify
}
LI.MsoNormal {
        TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 10.5pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"; TEXT-ALIGN: justify
}
DIV.MsoNormal {
        TEXT-JUSTIFY: inter-ideograph; FONT-SIZE: 10.5pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"; TEXT-ALIGN: justify
}
A:link {
        COLOR: blue; TEXT-DECORATION: underline
}
SPAN.MsoHyperlink {
        COLOR: blue; TEXT-DECORATION: underline
}
A:visited {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.MsoHyperlinkFollowed {
        COLOR: purple; TEXT-DECORATION: underline
}
SPAN.EmailStyle17 {
        FONT-WEIGHT: normal; COLOR: windowtext; FONT-STYLE: normal; FONT-FAMILY: Verdana; TEXT-DECORATION: none; mso-style-type: personal-compose
}
DIV.Section1 {
        page: Section1
}
BLOCKQUOTE {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
</STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Verdana color=#0000ff size=2>Thanks Kevin,</FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2></FONT> </DIV>
<DIV><FONT face=Verdana color=#0000ff size=2>It looks like ~= not invoke the 
index.</FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2>Do we have a way to deal 
with an index with third value?</FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2>For example, point (x, y) and 
userid</FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2></FONT> </DIV>
<DIV><FONT face=Verdana color=#0000ff size=2>I need to do a query like "select 
point(x,y) from table where point in rectangle and userid=xxx"</FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2></FONT> </DIV>
<DIV><FONT face=Verdana color=#0000ff size=2>Regards</FONT></DIV>
<DIV><FONT face=Verdana color=#0000ff size=2>Frank</FONT></DIV>
<DIV><FONT face=Verdana size=2></FONT> </DIV>
<DIV align=left>
<DIV align=left><FONT face=Verdana color=#c0c0c0 
size=2></FONT> </DIV></DIV>
<DIV><FONT face=Verdana size=2>
<HR>
</FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>From:</STRONG> Kevin 
Neufeld</FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT 
size=2><STRONG>Sent:</STRONG> 2008-05-20 14:52:16</FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>To:</STRONG> PostGIS Users 
Discussion</FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT 
size=2><STRONG>CC:</STRONG> </FONT></FONT></DIV>
<DIV><FONT face=Verdana><FONT size=2><STRONG>Subject:</STRONG> Re: 
[postgis-users] 3D index in postgis</FONT></FONT></DIV>
<DIV><FONT face=Verdana size=2></FONT> </DIV>
<DIV><FONT face=Verdana size=2>
<DIV>Hi Frank,</DIV>
<DIV> </DIV>
<DIV>Indexes in PostGIS are 2D. ST_Equals, as you've discovered, disregards</DIV>
<DIV>the Z component. (Clearly the documentation should be updated to reflect</DIV>
<DIV>this.)</DIV>
<DIV> </DIV>
<DIV>Try this instead:</DIV>
<DIV>SELECT a.id, AsText(a.map_geom) AS geom</DIV>
<DIV>FROM maps a, (SELECT 'POINT(3 3 1)'::geometry AS geom) b</DIV>
<DIV>WHERE a.map_geom && b.geom -- invokes the 2D index operator</DIV>
<DIV>AND a.map_geom ~= b.geom; -- performs vertex-by-vertex comparison,</DIV>
<DIV>including Z</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Note that in your query, ST_Equals() doesn't actually use any indexes at</DIV>
<DIV>all. Your query is likely performing a sequential scan through your</DIV>
<DIV>table looking for 'POINT(3 3)'.</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Cheers,</DIV>
<DIV>Kevin</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>a1001800 wrote:</DIV>
<DIV>> Hi,</DIV>
<DIV>> Please see the sql SELECT id, AsText(map_geom) AS geom FROM maps where</DIV>
<DIV>> ST_Equals(map_geom,GeomFromText('POINT(3 3 1)', -1));</DIV>
<DIV>> And it matches point(3 3 1), point(3 3 2), point(3 3 3) ...</DIV>
<DIV>> The geo field and index is below:</DIV>
<DIV>> SELECT AddGeometryColumn( 'maps', 'map_geom', -1, 'GEOMETRY', 3);</DIV>
<DIV>> CREATE INDEX geomk ON maps USING GIST (map_geom);</DIV>
<DIV>> So it looks like that the index is only working in 2D</DIV>
<DIV>> How can I build a index on the 3rd coordinate£¿</DIV>
<DIV>> Thanks</DIV>
<DIV>> Frank</DIV>
<DIV>> ------------------------------------------------------------------------</DIV>
<DIV>></DIV>
<DIV>> _______________________________________________</DIV>
<DIV>> postgis-users mailing list</DIV>
<DIV>> postgis-users@postgis.refractions.net</DIV>
<DIV>> <A 
href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A></DIV>
<DIV>>   </DIV>
<DIV>_______________________________________________</DIV>
<DIV>postgis-users mailing list</DIV>
<DIV>postgis-users@postgis.refractions.net</DIV>
<DIV><A 
href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A></DIV></FONT></DIV></BODY></HTML>