On Tue, Jul 12, 2011 at 11:56 AM, Marius Jigmond <span dir="ltr">&lt;<a href="mailto:mariusjigmond@hotmail.com">mariusjigmond@hotmail.com</a>&gt;</span> wrote:<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">




<div><div dir="ltr">
Strangely enough, ExecuteSQL works (it returns an osgeo.ogr.layer object with one feature) with<div class="im"><br>
<br>
&#39;select FID from judeteEPSG3844 where DENJUD = &quot;CLUJ&quot;&#39;<br>
<br></div>
but later a GetField(&#39;FID&#39;) request returns &quot;Illegal field requested in GetField()&quot;<br></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div dir="ltr"><br>
-marius<br>
<br></div></div></blockquote><div><br></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><div>Another way to do this is to use the AttributeFilter. Run this by itself and see if you get the expected result:</div>
<div><br></div><div>from osgeo import ogr</div><div>fileName = &#39;/data/romania/judeteEPSG3844.shp&#39;</div><div>shapeDS = ogr.Open(fileName)</div><div>shapeLayer = shapeDS.GetLayerByIndex(0)</div><div>shapeLayer.SetAttributeFilter(&#39;DENJUD=&quot;CLUJ&quot;&#39;)</div>
<div>targetFeature = shapeLayer.GetNextFeature()</div><div>print targetFeature.GetField(&#39;DENJUD&#39;) # should print the DENJUD of the feature fitting the attribute filter.</div></span></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div dir="ltr"><div><div><div class="h5"><div><div><blockquote style="border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div><div>Date: Tue, 12 Jul 2011 09:13:00 -0400<br>Subject: Re: [gdal-dev] OGR Geometry methods<br>
From: <a href="mailto:luke.peterson@gmail.com" target="_blank">luke.peterson@gmail.com</a><br>
To: <a href="mailto:mariusjigmond@hotmail.com" target="_blank">mariusjigmond@hotmail.com</a></div><div><div></div><div><br><br><br>
-----<br>
Luke Peterson<br>
- sent via mobile device -<br>
On Jul 11, 2011 11:00 PM, &quot;Marius Jigmond&quot; &lt;<a href="mailto:mariusjigmond@hotmail.com" target="_blank">mariusjigmond@hotmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; After some more investigation that is likely NOT the issue. I have an ExecuteSQL statement which selects a certain polygon based on an attribute value. Unfortunately it seems to return the wrong feature. The feature I query for is unique so a duplicate is out of the question. Here&#39;s the code:<br>



&gt;<br>
&gt; #!/usr/bin/python<br>
&gt;<br>
&gt; from osgeo import ogr<br>
&gt; import sys, math, time, os<br>
&gt;<br>
&gt; aquifer = &#39;/data/romania/judeteEPSG3844.shp&#39;<br>
&gt; aqDS = ogr.Open(aquifer)<br>
&gt; sql = &#39;select * from judeteEPSG3844 where DENJUD = &quot;CLUJ&quot;&#39;<br>
&gt; aqLayer = aqDS.ExecuteSQL(sql)<br>
&gt; feat = aqLayer.GetFeature(0)<br>
&gt; print aqLayer.GetFeatureCount()<br>
&gt; print feat.GetField(&#39;DENJUD&#39;)<br>
&gt; aqDS.ReleaseResultSet(aqLayer)<br>
&gt;<br>
&gt; The result:<br>
&gt; marius@mobi:~/temp$ run_sql.py <br>
&gt; 1<br>
&gt; TELEORMAN<br>
&gt; marius@mobi:~/temp$ <br>
&gt;<br>
&gt; This explains why none of my centroids were remotely close to the polygon.<br>
&gt;<br>
&gt; Is there something wrong with my query or should I file a bug?<br>
&gt;<br>
Can you select the feature by its FID instead? (apologies, I&#39;m banging this out on my phone ... probably won&#39;t run but you should get the idea):<br>
aqLayer = aqDS.GetLayerByIndex(0) #gets the whole shapefile<br>
aqFID = aqLayer.GetFIDColumn() # I forget the method name here... hope this is right but may have to pull in the layer def<br>
sql = &#39;select %s from judeteEPSG3844 where DENJUD = &quot;CLUJ&quot;&#39; % aqFID # specifically asking for just the FID field in the resultset<br>
sqlResults = aqDS.ExecuteSQL(sql) # sql results same as before<br>
featFID = sqlResults.GetFeature(0).GetFieldAsInt(aqFID) #this should be the actual FID of the results (problems would occur if your sql returned more than one hit)<br>
feat = aqLayer.GetFeature(featFID) # using the fid to grab the feature from the 0th layer in the shapefile<br>
This may be a long way around ... <br><br>
&gt; -marius<br>
&gt;<br>
&gt;<br>
&gt; On Mon, 2011-07-11 at 20:46 -0500, Marius Jigmond wrote:<br>
&gt;&gt;<br>
&gt;&gt; I suppose a piece of code speaks louder :):<br>
&gt;&gt;<br>
&gt;&gt; xsect = False<br>
&gt;&gt; for i in range(gridLayer.GetFeatureCount()):<br>
&gt;&gt;   feat = gridLayer.GetFeature(i)<br>
&gt;&gt;   geom = feat.GetGeometryRef()<br>
&gt;&gt;   point = geom.Centroid()<br>
&gt;&gt;   for j in range(aqLayer.GetFeatureCount()):<br>
&gt;&gt;     aqfeat = aqLayer.GetFeature(j)<br>
&gt;&gt;     aqgeom = aqfeat.GetGeometryRef()<br>
&gt;&gt;     if point.Intersect(aqgeom):<br>
&gt;&gt;       xsect = True<br>
&gt;&gt;       print &#39;ibound = 1&#39;<br>
&gt;&gt;       break<br>
&gt;&gt;   if xsect:<br>
&gt;&gt;     feat.SetField(&#39;IBOUND&#39;, 1)<br>
&gt;&gt;     gridLayer.SetFeature(feat)<br>
&gt;&gt;     xsect = False<br>
&gt;&gt;<br>
&gt;&gt; -marius<br>
&gt;&gt;<br>
&gt;&gt; On Mon, 2011-07-11 at 20:34 -0500, Marius Jigmond wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi everyone,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I am trying to test whether centroids of polygons lie/intersect within another polygon. I have tried Intersect, Within, and Contains but they always return false. Should these methods work for my intended purpose or do I need to implement a point in polygon function? Thanks.<br>



&gt;&gt;&gt;<br>
&gt;&gt;&gt; -marius<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; gdal-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:gdal-dev@lists.osgeo.org" target="_blank">gdal-dev@lists.osgeo.org</a><br>
&gt;&gt;&gt; <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; gdal-dev mailing list<br>
&gt;&gt; <a href="mailto:gdal-dev@lists.osgeo.org" target="_blank">gdal-dev@lists.osgeo.org</a><br>
&gt;&gt; <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; gdal-dev mailing list<br>
&gt; <a href="mailto:gdal-dev@lists.osgeo.org" target="_blank">gdal-dev@lists.osgeo.org</a><br>
&gt; <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
<br></div></div></div>                                               </div></div>
</blockquote></div><br></div></div></div></div>                                               </div></div>
</blockquote></div><br>