Hmm, performance is a good point.&nbsp; I thought that SetSpatialFilter only returned the intersection of the 2 envelopes though?&nbsp; Will that accurately capture only points that are within an odd-shaped polygon.<br><br>Roger<br>
--<br><br><div class="gmail_quote">On Jan 23, 2008 9:41 AM, Jose Luis Gomez Dans &lt;<a href="mailto:josegomez@gmx.net">josegomez@gmx.net</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><div class="Ih2E3d"><br><br>&gt; I think that if you built GDAL with GEOS support, you can call on the GEOS<br>&gt; methods from directly within your ogr objects. &nbsp;(Not sure I&#39;m saying that<br>&gt; right) &nbsp;There is an example here -
<br>&gt; <a href="http://mapserver.gis.umn.edu/community/conferences/MUM3/workshop/python/geometriespdf" target="_blank">http://mapserver.gis.umn.edu/community/conferences/MUM3/workshop/python/geometriespdf</a><br>&gt;<br>
&gt; Code in the example looks something like this:<br>&gt;<br>&gt; #! /usr/bin/python<br>&gt;<br>&gt; import ogr<br>&gt;<br>&gt; r1 = {&#39;minx&#39;: -5.0, &#39;miny&#39;: 0.0, &#39;maxx&#39;: 5.0, &#39;maxy&#39;:10.0}<br>
&gt; r2 = {&#39;minx&#39;: 0.0, &#39;miny&#39;: -5.0, &#39;maxx&#39;: 10.0, &#39;maxy&#39;:5.0}<br>&gt;<br>&gt; template = &#39;POLYGON ((%(minx)f %(miny)f, %(minx)f %(maxy)f, %(maxx)f<br>&gt; %(maxy)<br>&gt; f, %(maxx)f %(miny)f, %(minx)f %(miny)f))&#39;
<br>&gt;<br>&gt; w1 = template % r1<br>&gt; w2 = template % r2<br>&gt;<br>&gt; g1 = ogr.CreateGeometryFromWkt(w1)<br>&gt; g2 = ogr.CreateGeometryFromWkt(w2)<br>&gt;<br>&gt; inter = g1.Intersection(g2) &nbsp; # &lt;---------------GEOS Intersection command?
<br>&gt;<br>&gt; print inter<br>&gt;<br><br></div>While this will work, I doubt it will cope with multi-million points. Say that you know the extent of your polygon (min and max x and y coordinates), you could extract the points within that region &quot;easily&quot; with OGR and python:
<br><div class="Ih2E3d">import ogr<br>r1 = {&#39;minx&#39;: -5.0 , &#39;miny&#39;: 0.0, &#39;maxx&#39;: 5.0, &#39;maxy&#39;:10.0}<br><br></div><div class="Ih2E3d">template = &#39;POLYGON ((%(minx)f %(miny)f, %(minx)f %(maxy)f, %(maxx)f %(maxy) f, %(maxx)f %(miny)f, %(minx)f %(miny)f))&#39;
<br><br>w1 = template % r1<br><br></div>g1 = ogr.CreateGeometryFromWkt(w1)<br>s = ogr.Open (&lt;fname&gt;)<br>L = s.GetLayer(0) #Or layer whatever<br>L.SetSpatialFilter ( g1 )<br>#If it is a square region,<br>#L.SetSpatialFilterRect(r1[&#39;minx&#39;], r1[&#39;miny&#39;], r1[&#39;maxx&#39;], r1[&#39;maxy&#39;])
<br><br><br>Clearly, you can use any geometry, not just a square. You can have a shapefile with your polygon geometry, read the first feature, and use that as your SpatialFilter geometry, but I don&#39;t know how fast this is. If you decide to go this way, it would be interesting to know how well it performs.
<br><br>Jose<br><font color="#888888">--<br>GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS.<br>Alle Infos und kostenlose Anmeldung: <a href="http://www.gmx.net/de/go/freemail" target="_blank">http://www.gmx.net/de/go/freemail
</a><br></font></blockquote></div><br>