<!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><SPAN class=744473916-12052004><FONT face=Arial color=#0000ff size=2>My 
apologies, I'm an idiot, I was passing in my x and y points for the spatial 
filter in the wrong order.&nbsp; I did notice that the spatial intersection uses 
the envelope of the feature rather than the actually feature geometry 
though.&nbsp; I this by design?&nbsp; Is there a way to filter based on the 
geometry points or do I need to do that after the query has 
returned?</FONT></SPAN></DIV>
<DIV><SPAN class=744473916-12052004><FONT face=Arial color=#0000ff 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=744473916-12052004><FONT face=Arial color=#0000ff 
size=2>Martin</FONT></SPAN></DIV>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <DIV></DIV>
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left><FONT 
  face=Tahoma size=2>-----Original Message-----<BR><B>From:</B> Chapman, Martin 
  <BR><B>Sent:</B> Wednesday, May 12, 2004 10:15 AM<BR><B>To:</B> 
  gdal-dev@remotesensing.org<BR><B>Subject:</B> [Gdal-dev] 
  OGRDataSource::ExecuteSQL() method returning inaccurate 
  results<BR><BR></FONT></DIV>
  <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></BLOCKQUOTE></BODY></HTML>