<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1458" name=GENERATOR></HEAD>
<BODY style="MARGIN: 4px 4px 1px; FONT: 10pt Tahoma">
<DIV>Nicol,</DIV>
<DIV>&nbsp;</DIV>
<DIV>I have the same problem. Stepan made me aware of this. I am not sure why this happens. Hopefully someone on the list can explain.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Rene<BR><BR>&gt;&gt;&gt; Nicol Hermann &lt;mapserver@geoworld.de&gt; 2004-09-17 9:34:41 AM &gt;&gt;&gt;<BR></DIV>
<DIV style="COLOR: #000000">Hi Rene,<BR><BR>i have a question to your implementation of Stepan's c-code.<BR>You identify e.g. the number of points with:<BR>$theShape-&gt;line[0]-&gt;numpoints<BR><BR>According to the docs i expect the following line<BR>$theShape-&gt;line(0)-&gt;numpoints<BR><BR>unfortunately this statement returns the following error:<BR>Parse error: parse error, unexpected T_OBJECT_OPERATOR in<BR>/home/nicol/public_html/mapserver/dev/area_calculation.php on line 23<BR><BR>Your statement returns NULL. <BR>Do you know what i am doing wrong.<BR><BR>Thank you very much<BR>Nicol<BR><BR><BR>Am Do, den 16.09.2004 schrieb Rene Teniere um 15:07:<BR>&gt; Hi all,<BR>&gt;&nbsp; <BR>&gt; I have been implementing Stepan Kafka's c-code for calculating area of<BR>&gt; a polygon in php/mapscript. His code seems to work fine. The only<BR>&gt; problem is that I keep getting a numlines result of 1 and numpoints<BR>&gt; result of NULL for my shape BEFORE I get a chance to use it in the<BR>&gt; area code. This, of course will give me an invalid area of 0. The<BR>&gt; numshapes variable within the shapefile object works great, always<BR>&gt; gives me the correct result.<BR>&gt;&nbsp; <BR>&gt; Wonder if anyone could let me know what they think is going on?<BR>&gt;&nbsp; <BR>&gt; Thanks,<BR>&gt; Rene<BR>&gt;&nbsp; <BR>&gt; Here is the output:<BR>&gt; [15-Sep-2004 15:47:23] Numshapes:2<BR>&gt; [15-Sep-2004 15:47:23] Numlines:1<BR>&gt; [15-Sep-2004 15:47:23] Numpoints:<BR>&gt; [15-Sep-2004 15:47:23] --------------------------<BR>&gt; [15-Sep-2004 15:47:23] Numlines:1<BR>&gt; [15-Sep-2004 15:47:23] Numpoints:<BR>&gt; [15-Sep-2004 15:47:23] The sum2:0<BR>&gt; [15-Sep-2004 15:47:23] Area is:0<BR>&gt;&nbsp; <BR>&gt; Here is the code:<BR>&gt; error_log('Numshapes:'.$oShapeFile-&gt;numshapes);<BR>&gt; $theShape = $oShapeFile-&gt;getShape(0);<BR>&gt; error_log('Numlines:'.$theShape-&gt;numlines);<BR>&gt; error_log('Numpoints:'.$theShape-&gt;line[0]-&gt;numpoints);<BR>&gt; $shpArea = shapeArea($theShape);<BR>&gt; error_log('Area is:'.$shpArea);<BR>&gt;&nbsp; <BR>&gt; function shapeArea($myShape)<BR>&gt; {<BR>&gt;&nbsp;&nbsp; $area = 0;<BR>&gt;&nbsp;&nbsp; if($myShape-&gt;type!=MS_SHAPE_POLYGON)<BR>&gt;&nbsp;&nbsp; {<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; error_log('Not a Polygon!');<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; return $area;<BR>&gt;&nbsp;&nbsp; }<BR>&gt;&nbsp;&nbsp; error_log('--------------------------');<BR>&gt;&nbsp;&nbsp; error_log('Numlines:'.$myShape-&gt;numlines);<BR>&gt;&nbsp;&nbsp; error_log('Numpoints:'.$myShape-&gt;line[0]-&gt;numpoints);<BR>&gt;&nbsp;&nbsp; for($i=0;$i&lt;$myShape-&gt;numlines;$i++)<BR>&gt;&nbsp;&nbsp; {<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; $sum = 0;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; for ($v=0;$v&lt;$myShape-&gt;line[$i]-&gt;numpoints-2;$v++)<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&gt; $sum+=(($myShape-&gt;line[$i]-&gt;point[0]-&gt;x)*($myShape-&gt;line[$i]-&gt;point[$v]-&gt;y)-($myShape-&gt;line[$i]-&gt;point[0]-&gt;y)*($myShape-&gt;line[$i]-&gt;point[$v]-&gt;x)+($myShape-&gt;line[$i]-&gt;point[0]-&gt;y)*($myShape-&gt;line[$i]-&gt;point[$v+1]-&gt;x)-($myShape-&gt;line[$i]-&gt;point[0]-&gt;x)*($myShape-&gt;line[$i]-&gt;point[$v+1]-&gt;y)+($myShape-&gt;line[$i]-&gt;point[$v]-&gt;x)*($myShape-&gt;line[$i]-&gt;point[$v+1]-&gt;y)-($myShape-&gt;line[$i]-&gt;point[$v+1]-&gt;x)*($myShape-&gt;line[$i]-&gt;point[$v]-&gt;y));<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error_log('The sum1:'.$sum);<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; error_log('The sum2:'.$sum);<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; $sum = $sum;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; //test if line lies inside other ones<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; for($v=0;$v&lt;$i;$v++)<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pointInLine($myShape-&gt;line[$v],$myShape-&gt;line[$i]-&gt;point[0]))<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $sum = -$sum;<BR>&gt;&nbsp;&nbsp;&nbsp; $area += $sum;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; return $area/2;<BR>&gt;&nbsp;&nbsp; }<BR>&gt; }<BR>&gt;&nbsp; <BR>&gt; function pointInLine($myLine,$myPoint)<BR>&gt; {<BR>&gt;&nbsp;&nbsp; //test - point in poly - for one arc of shape<BR>&gt;&nbsp; <BR>&gt;&nbsp;&nbsp; $status=0;<BR>&gt;&nbsp;&nbsp; for ($i=0, $j=$myLine-&gt;numpoints-1; i&lt;$myLine-&gt;numpoints; $j=$i++)<BR>&gt;&nbsp;&nbsp; {<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; if (((($myLine-&gt;point[$i]-&gt;y &lt;= $myPoint-&gt;y) &amp;&amp; ($myPoint-&gt;y &lt;<BR>&gt; $myLine-&gt;point[$j]-&gt;y)) || (($myLine-&gt;point[$j]-&gt;y &lt;= $myPoint-&gt;y) &amp;&amp;<BR>&gt; ($myPoint-&gt;y &lt; $myLine-&gt;point[$i]-&gt;y))) &amp;&amp; ($myPoint-&gt;x &lt;<BR>&gt; ($myLine-&gt;point[$j]-&gt;x - $myLine-&gt;point[$i]-&gt;x) * ($myPoint-&gt;y -<BR>&gt; $myLine-&gt;point[$i]-&gt;y) / ($myLine-&gt;point[$j]-&gt;y -<BR>&gt; $myLine-&gt;point[$i]-&gt;y) + $myLine-&gt;point[$i]-&gt;x))<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $status = !$status;<BR>&gt;&nbsp;&nbsp; }<BR>&gt;&nbsp;&nbsp; return $status;<BR>&gt; }<BR>&gt;&nbsp; <BR>-- <BR>Dipl.-Geogr. Nicol Hermann<BR>GDV Gesellschaft für geografische Datenverarbeitung mbH<BR>Binger Straße 49-51<BR>55218 Ingelheim<BR>Tel. 06132-7148-18<BR>Fax: 06132-7148-28<BR><BR></DIV></BODY></HTML>