Yes, GEOS support is built in. OGRGeometryFactory::haveGEOS() returns
true, and the within/contains functions will return true when testing a point vs. some (non-LinearRing) geometry.<br><br>Test code demonstrating that within/contains never returns true with two nested, non-identical, closed LineStrings:
<br><br>&nbsp;&nbsp;&nbsp; /* a clockwise square starting at (1,2) (closed) */<br>&nbsp;&nbsp;&nbsp; double x1[] = {1, 2, 2, 1, 1};<br>&nbsp;&nbsp;&nbsp; double y1[] = {2, 2, 1, 1, 2};<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* a clockwise square starting at (0,3) (closed) */<br>&nbsp;&nbsp;&nbsp; double x2[] = {0, 3, 3, 0, 0};
<br>&nbsp;&nbsp;&nbsp; double y2[] = {3, 3, 0, 0, 3};<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; OGRLineString inner;<br>&nbsp;&nbsp;&nbsp; inner.setPoints(5, x1, y1);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; OGRLineString outer;<br>&nbsp;&nbsp;&nbsp; outer.setPoints(5, x2, y2);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;**********************************************&quot; &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;inner.Contains(&amp;outer): &quot; &lt;&lt; inner.Contains(&amp;outer) &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;inner.Within(&amp;outer): &quot; &lt;&lt; inner.Within(&amp;outer) &lt;&lt; std::endl;
<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;outer.Contains(&amp;inner): &quot; &lt;&lt; outer.Contains(&amp;inner) &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; &quot;outer.Within(&amp;inner): &quot; &lt;&lt; outer.Within(&amp;inner) &lt;&lt; std::endl;
<br><br>Results:<br>**********************************************<br>inner.Contains(&amp;outer): 0<br>inner.Within(&amp;outer): 0<br>outer.Contains(&amp;inner): 0<br>outer.Within(&amp;inner): 0<br><br><br><div><span class="gmail_quote">
On 9/23/07, <b class="gmail_sendername">Mateusz Loskot</b> &lt;<a href="mailto:mateusz@loskot.net">mateusz@loskot.net</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Dan Homerick wrote:<br>&gt; Hello List-Readers,<br>&gt;<br>&gt; I notice that the within/contains functions don&#39;t work for LinearRing&#39;s<br>&gt; (as is indicated in the documentation for rings), but they also don&#39;t work
<br>&gt; with two LineStrings (not mentioned, that I see).<br><br>Dan,<br><br>You should know that spatial predicates are implemented using GEOS,<br>so you have to built GDAL/OGR with GEOS support in order to use them.<br>
<br>If this is not the case here and you already have GEOS support in OGR,<br>could you provide us with examples of geometries you&#39;re testing and<br>perhaps some code example?<br><br>&gt; Is the best/only way to test if one ring is nested in another to convert
<br>&gt; the LinearRings to LineStrings, then test each point of &#39;inner&#39; for<br>&gt; containment in &#39;outer&#39;?<br><br>Yes, I believe OGC predicates (within, contains, etc.) are the best tools<br>to solve this problem.
<br><br>Cheers<br>--<br>Mateusz Loskot<br><a href="http://mateusz.loskot.net">http://mateusz.loskot.net</a><br></blockquote></div><br>