<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Message</TITLE>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004>I am using the 
OGRDataSource::ExecuteSQL() method to spatially filter a esri shape file.&nbsp; 
The results are inaccurate in that they return features that do not intersect 
the filter.&nbsp; Is this a known issue or does it&nbsp;look like an error in my 
code?&nbsp; I am using GDAL 119.&nbsp; The attached screen shot shows the 
spatial filter results and my&nbsp;code is listed below:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2></FONT></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>COgrShapeLayer* COgrDataSource::ExecuteSQL(string sStatement, 
</FONT></SPAN></FONT><FONT face=Arial size=2><SPAN 
class=542114815-12052004><FONT size=2>CSXBasicGeometry* pSpatialFilter, 
</FONT></SPAN></FONT><FONT face=Arial size=2><SPAN 
class=542114815-12052004><FONT size=2>string 
sDialect)</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>{</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>try</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>{</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; if</FONT><FONT size=2> 
(!m_pDatasource)</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw</FONT><FONT size=2> 
exception("Invalid data source null.");</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2></FONT></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; OGRSpatialReference* pSpatialRef = 
m_pDatasource-&gt;GetLayer(0)-&gt;GetSpatialRef();</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; OGRLinearRing* pRing = 
NULL;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=542114815-12052004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; if</FONT><FONT size=2> (</FONT><FONT color=#0000ff 
size=2>dynamic_cast</FONT><FONT size=2>&lt; 
CSXPolygon*&gt;(pSpatialFilter))</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; {</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSXPolygon* pPolygon = 
(CSXPolygon*) pSpatialFilter;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pRing = </FONT><FONT 
color=#0000ff size=2>new</FONT><FONT size=2> 
OGRLinearRing();</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt; </FONT><FONT 
color=#0000ff size=2>double</FONT><FONT size=2>&gt;::iterator 
it;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt; </FONT><FONT 
color=#0000ff size=2>double</FONT><FONT size=2>&gt;* pPoints = 
pPolygon-&gt;GetPoints();</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double</FONT><FONT size=2> nX 
= 0.0, nY = 0.0;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=542114815-12052004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for</FONT><FONT size=2> (it = 
pPoints-&gt;begin(); it != pPoints-&gt;end(); it++)</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nX = 
*it;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=542114815-12052004>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
it++;</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nY = 
*it;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
pRing-&gt;addPoint(nX, nY);</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=542114815-12052004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
pRing-&gt;addPoint(pPoints-&gt;at(1), 
pPoints-&gt;at(0));</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004></SPAN></FONT><FONT 
face=Arial size=2><SPAN class=542114815-12052004><FONT size=2>&nbsp;&nbsp;&nbsp; 
}</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; else</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw</FONT><FONT size=2> 
exception("Invalid spatial&nbsp;filter data type.");</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; </FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; OGRPolygon* pPolygon = </FONT><FONT color=#0000ff 
size=2>new</FONT><FONT size=2> OGRPolygon();</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; if</FONT><FONT size=2> (pSpatialRef) 
pPolygon-&gt;assignSpatialReference(pSpatialRef);&nbsp; 
</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004>&nbsp;&nbsp;&nbsp; 
</SPAN></FONT><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>pPolygon-&gt;addRingDirectly(pRing);</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; OGRLayer* pLayer = 
m_pDatasource-&gt;ExecuteSQL((</FONT><FONT color=#0000ff 
size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff 
size=2>char</FONT><FONT size=2>*) sStatement.c_str(), </FONT></SPAN></FONT><FONT 
face=Arial size=2><SPAN class=542114815-12052004><FONT size=2>pPolygon, 
</FONT></SPAN></FONT><FONT face=Arial size=2><SPAN 
class=542114815-12052004><FONT size=2>(</FONT><FONT color=#0000ff 
size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff 
size=2>char</FONT><FONT size=2>*) sDialect.c_str());</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2></FONT></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; if</FONT><FONT size=2> (pLayer == NULL) </FONT><FONT 
color=#0000ff size=2>throw</FONT><FONT size=2> 
exception(CPLGetLastErrorMsg());</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=542114815-12052004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; COgrShapeLayer* pShapeLayer = 
CreateShapeLayer(pLayer);</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; 
m_pDatasource-&gt;ReleaseResultSet(pLayer);</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; if</FONT><FONT size=2> (CPLGetLastErrorNo() != 
OGRERR_NONE) </FONT><FONT color=#0000ff size=2>throw</FONT><FONT size=2> 
exception(CPLGetLastErrorMsg());</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=542114815-12052004></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>&nbsp;&nbsp;&nbsp; return</FONT><FONT size=2> 
pShapeLayer;</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>}</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>catch</FONT><FONT size=2>(exception e) </FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; {</FONT><FONT color=#0000ff size=2>throw</FONT><FONT 
size=2> e;}</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT color=#0000ff 
size=2>catch</FONT><FONT size=2>(...) </FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>&nbsp;&nbsp;&nbsp; {</FONT><FONT color=#0000ff size=2>throw</FONT><FONT 
size=2> exception("An unexpected error occurred.");}</FONT></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=542114815-12052004><FONT 
size=2>}</DIV></FONT></SPAN></FONT>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><SPAN class=542114815-12052004><FONT face=Arial 
size=2>Thanks,</FONT></SPAN></DIV>
<DIV><SPAN class=542114815-12052004><FONT face=Arial 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV align=left><FONT face=Arial size=2>
<DIV align=left><FONT face=Arial size=2>Martin Chapman</FONT></DIV>
<DIV align=left><FONT face=Arial><FONT size=2><SPAN 
class=812572720-02042003>Cell</SPAN>&nbsp;303-885-1936</FONT></FONT></DIV>
<DIV align=left><FONT face=Arial size=2><SPAN class=812572720-02042003>Office 
303-660-3933 x226</SPAN></FONT></DIV>
<DIV align=left><FONT face=Arial size=2><SPAN class=812572720-02042003><A 
href="mailto:mchapman@sanz.com">mchapman@sanz.com</A></SPAN></FONT></DIV>
<DIV align=left><FONT face=Arial size=2><SPAN class=812572720-02042003><A 
href="http://www.sanz.com/">http://www.sanz.com</A></SPAN></FONT></DIV></FONT></DIV>
<DIV align=left><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV>&nbsp;</DIV></BODY></HTML>