OK..I figured it out that the layername is not the layer object,<br>it is the name property of the layer object and has to be enclosed<br>in double quotes.<br><br>For example:<br>test = ds.ExecuteSQL('select * from "three_points"  where Class IN (1,3)  ')  #returns 2 of 3 point features<br>
<br><a href="http://www.gdal.org/ogr/ogr_sql.html" target="_blank">http://www.gdal.org/ogr/ogr_sql.html</a> would be more helpful if there were some Python examples...<br>for example: <br>it is not clear from the first example that polylayer is the name of the layer, not the layer object, and needs to be enclosed in<br>
double quotes:<br><pre class="fragment">SELECT * FROM polylayer</pre>Thanks!<br><br>Dave Verbyla<br><br><div class="gmail_quote">On Tue, Feb 5, 2013 at 12:50 AM, Homme Zwaagstra <span dir="ltr"><<a href="mailto:hrz@geodata.soton.ac.uk" target="_blank">hrz@geodata.soton.ac.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dave,<br>
<br>
Try the following modified version of your code snippet below. Note<br>
that `ExecuteSQL` expects a simple SQL string - it does not do any<br>
interpretation of local python variables! See<br>
<a href="http://www.gdal.org/ogr/ogr_sql.html" target="_blank">http://www.gdal.org/ogr/ogr_sql.html</a> for more information on the SQL.<br>
<div class="im"><br>
    import os<br>
    from osgeo import ogr<br>
</div>    ogr.UseExceptions()         # if something goes wrong, we want to know about it<br>
<div class="im">    driver = ogr.GetDriverByName('ESRI Shapefile')<br>
    ds = driver.Open('three_points.shp', 0)#0--read-only<br>
    layer = ds.GetLayer()<br>
    layerName =  layer.GetName() #returns string 'three_points'<br>
</div>    test = ds.ExecuteSQL('select * from "%s"' % layerName)<br>
<br>
Cheers,<br>
<br>
Homme<br>
<div class="HOEnZb"><div class="h5"><br>
On Tue, Feb 05, 2013 at 12:39:50AM -0900, David Verbyla wrote:<br>
> I am not understanding some key aspect of this function.<br>
> For example:<br>
> #three_points.shp contains<br>
> #Class, Point_X, Point_Y<br>
> # 1,301665.4,1701522.8<br>
> # 2,302240.3,1701992.1<br>
> # 3,301559.8,1701112.1<br>
> import os<br>
> from osgeo import ogr<br>
> driver = ogr.GetDriverByName('ESRI Shapefile')<br>
> ds = driver.Open('three_points.shp',0)#0--read-only<br>
> layer = ds.GetLayer()<br>
> layerName =  layer.GetName() #returns string 'three_points'<br>
> test = ds.ExecuteSQL('select from layerName *')<br>
> print type(test) #returns <type 'NoneType'><br>
><br>
> test = ds.ExecuteSQL('select from layer.GetName')<br>
> print type(test) #returns <type 'NoneType'><br>
><br>
> ds.ExecuteSQL('select from layerName where Class > 0')<br>
> print type (test) #returns <type 'NoneType'><br>
><br>
> Thanks in advance.<br>
><br>
> Dave Verbyla<br>
><br>
><br>
> On Mon, Feb 4, 2013 at 11:59 PM, Homme Zwaagstra <<a href="mailto:hrz@geodata.soton.ac.uk">hrz@geodata.soton.ac.uk</a>>wrote:<br>
><br>
> > Hello Dave,<br>
> ><br>
> > On Mon, Feb 04, 2013 at 06:32:11PM -0900, David Verbyla wrote:<br>
> > > I am trying to figure out the syntax for .ExecuteSQL using Python ogr.<br>
> ><br>
> > I have successfully been using `DataSource.ExecuteSQL` from Python<br>
> > using gdal 1.9.0.<br>
> ><br>
> > > For example:<br>
> > > fireLayer.SetAttributeFilter(None) #returns all 2623 polygons<br>
> > > fireLayer.SetAttributeFilter(" FIREID < 75 ") #returns 4 polygons<br>
> > ><br>
> > > I am trying to get the same results using the ExecuteSQL:<br>
> > > testLayer = dataSource.ExecuteSQL("select * from fireLayer")<br>
> > > type(testLayer) #retuns NoneType<br>
> > > testLayer = dataSource.ExecuteSQL("select * from fireLayer where FIREID <<br>
> > > 75")<br>
> > > type(testLayer) #retuns NoneType<br>
> ><br>
> > `None` seems to be returned when the SQL does not generate any<br>
> > features.  Therefore the only thing I can think that might be wrong is<br>
> > that the identifier `fireLayer` in the SQL above is not matching the<br>
> > layer name in `dataSource`. Amending to the following *should* work:<br>
> ><br>
> >     dataSource.ExecuteSQL('select * from "%s"' % fireLayer.GetName())<br>
> ><br>
> > Cheers,<br>
> ><br>
> > Homme<br>
> ><br>
> > > Thanks in advance.<br>
> > ><br>
> > > Dave Verbyla<br>
> > ><br>
> > > On Sat, Dec 22, 2012 at 7:17 AM, David Verbyla <<a href="mailto:dlverbyla@alaska.edu">dlverbyla@alaska.edu</a>><br>
> > wrote:<br>
> > ><br>
> > > ><br>
> > > > I am a newbie to OGR/OSR using Python 2.7.2, please excuse my<br>
> > ignorance:<br>
> > > >> I am trying to find the distance to the closest polygon for each<br>
> > point.<br>
> > > >> Is there a more efficient way than simply computing the distance to<br>
> > all<br>
> > > >> polygons for each point?  For example:<br>
> > > >><br>
> > > ><br>
> > > > nPts = pointsLayer.GetFeatureCount()<br>
> > > > nPolys = polysLayer.GetFeatureCount()<br>
> > > ><br>
> > > > for pt in range(0,nPts):<br>
> > > >       minDist = 1000000<br>
> > > >       pointFeature = pointsLayer.GetFeature(pt)<br>
> > > >       for poly in range(0,nPolys):<br>
> > > >             polyFeature = polysLayer.GetFeature(poly)<br>
> > > >             Dist = pointFeature.GetGeometryRef().Distance(<br>
> > > > polyFeature.GetGeometryRef() )<br>
> > > >             if (Dist < minDist):<br>
> > > >                   minDist = Dist<br>
> > > >       print (pt,minDist)<br>
> > > ><br>
> > > > Thank you.<br>
> > > ><br>
> > > > Dave Verbyla<br>
> > > ><br>
> ><br>
> > > _______________________________________________<br>
> > > gdal-dev mailing list<br>
> > > <a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br>
> > > <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
> ><br>
> > --<br>
> > Homme Zwaagstra<br>
> > GeoData Institute<br>
> > University of Southampton<br>
> ><br>
> > Tel: <a href="tel:%2B44%280%292380%2059%208709" value="+442380598709">+44(0)2380 59 8709</a><br>
> ><br>
<br>
--<br>
Homme Zwaagstra<br>
GeoData Institute<br>
University of Southampton<br>
<br>
Tel: <a href="tel:%2B44%280%292380%2059%208709" value="+442380598709">+44(0)2380 59 8709</a><br>
</div></div></blockquote></div><br>