<br><br>
<div><span class="gmail_quote">On 7/26/07, <b class="gmail_sendername">Frank Warmerdam</b> &lt;<a href="mailto:warmerdam@pobox.com">warmerdam@pobox.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">abhay menon wrote:<br>&gt; Hello all,<br>&gt;<br>&gt; How do I verify that GEOS compilation is working with my GDAL utility.
<br>&gt;<br>&gt; I have compiled the gdal-1.4.1 with geos-3.0.0-rc4 in vs2003 for some<br>&gt; process to build in vc6.<br>&gt;<br>&gt;&nbsp;&nbsp; OGRPolygon *poPolygon = new OGRPolygon();<br>&gt;&nbsp;&nbsp; OGRPoint *pSt = new OGRPoint();
<br>&gt;<br>&gt; when I issue this :<br>&gt;<br>&gt; 1)&nbsp;&nbsp;int i = poPolygon-&gt;PointOnSurface(pSt);<br>&gt;<br>&gt; result pSt is empty and i = 6.<br>&gt; and when I try this :<br><br>Abhay,<br><br>I&#39;m afraid PointOnSurface() is not implemented.&nbsp;&nbsp;It appears to have
<br>been a &quot;good intention&quot; based on the OGC geometry model I added to<br>the api 7-8 years ago and never implemented.<br><br>&gt; 2)&nbsp;&nbsp;int i =&nbsp;&nbsp;poPolygon-&gt;Centroid(pSt);<br>&gt;<br>&gt; it gives me an error and the application quits
<br>&gt;<br>&gt; But when I tried the same with vs2003 the 2) step breaks at getX();<br>&gt; 1) step result the same as earlier.<br><br>Hmm.&nbsp;&nbsp;Is pSt a pointer to an existing OGRPoint?&nbsp;&nbsp;I don&#39;t know why<br>things are crashing but at least this indicates that OGR is trying
<br>to use GEOS as otherwise it wouldn&#39;t do anything - just return<br>OGRERR_FAILURE.<br><br>At the core of the Centroid() method is this:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hOtherGeosGeom = GEOSGetCentroid( hThisGeosGeom );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRPoint *poCentroid = (OGRPoint *)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OGRGeometryFactory::createFromGEOS( hOtherGeosGeom );<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GEOSGeom_destroy( hThisGeosGeom );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GEOSGeom_destroy( hOtherGeosGeom );<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( poPoint == NULL<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| wkbFlatten(poPoint-&gt;getGeometryType()) != wkbPoint )
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return OGRERR_FAILURE;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; poPoint-&gt;setX( poCentroid-&gt;getX() );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; poPoint-&gt;setY( poCentroid-&gt;getY() );<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete poCentroid;<br><br>I wonder if the return result (poCentroid) is invalid in
<br>some fashion that isn&#39;t tested for?<br><br>I see the OGR autotests includes this python test:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;g1 = ogr.CreateGeometryFromWkt( &#39;POLYGON((0 0, 10 10, 10 0, 0 0))&#39; )<br><br>&nbsp;&nbsp;&nbsp;&nbsp;centroid = g1.Centroid
()<br><br>&nbsp;&nbsp;&nbsp;&nbsp;g1.Destroy()<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if ogrtest.check_feature_geometry( centroid,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;POINT(6.666666667 3.333333333)&#39;) != 0:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &#39;Got: &#39;, centroid.ExportToWkt
()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#39;fail&#39;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;centroid.Destroy()<br><br>So it seems that Centroid() usually works.<br><br>I guess you will need to debug into the code to try and narrow down<br>what is happening.&nbsp;&nbsp;You might want to determine whether other GEOS
<br>based functions such as Union() work or not.&nbsp;&nbsp;It may be a general problem<br>with using GEOS rather than Centroid() specific.<br><br>Best regards,<br>--<br>---------------------------------------+--------------------------------------
<br>I set the clouds in motion - turn up&nbsp;&nbsp; | Frank Warmerdam, <a href="mailto:warmerdam@pobox.com">warmerdam@pobox.com</a><br>light and sound - activate the windows | <a href="http://pobox.com/~warmerdam">http://pobox.com/~warmerdam
</a><br>and watch the world go round - Rush&nbsp;&nbsp;&nbsp;&nbsp;| President OSGeo, <a href="http://osgeo.org">http://osgeo.org</a><br><br></blockquote></div>
<div>&nbsp;</div>
<div>Hi Frank,</div>
<div>Thanks for&nbsp;the info about PointOnSuface. </div>
<div>But it would be really useful if the GDAL supported the PointOnSurface function of GEOS as most of the GIS application will creating a Centriod of a irregular polygon creates point inside the polygon which is not the real centriod but an output of PointOnSurface or InnerPoint.
</div>
<div>&nbsp;</div>
<div>Hmm.. about the Centroid part.</div>
<div>I use the build for msvc80 in GEOS trunk to create the MSVC 8 compatible version which I am able to call in VC++6.</div>
<div>I will let know on the problem that is being created on VC7.1. once I get time for that. And let&nbsp;you&nbsp;know what happened within.</div>
<div><br clear="all"><br>-- <br>Best Regards<br><br>&nbsp;Abhay Menon<br>&nbsp;<a href="http://abhaymenon.info">http://abhaymenon.info</a></div>