[geos-commits] r3028 - in trunk/php: . test

svn_geos at osgeo.org svn_geos at osgeo.org
Sat Jun 19 14:27:12 EDT 2010


Author: strk
Date: 2010-06-19 18:27:12 +0000 (Sat, 19 Jun 2010)
New Revision: 3028

Modified:
   trunk/php/geos.c
   trunk/php/test/test.php
Log:
Geometry->{pointOnSurface,centroid}


Modified: trunk/php/geos.c
===================================================================
--- trunk/php/geos.c	2010-06-19 18:13:21 UTC (rev 3027)
+++ trunk/php/geos.c	2010-06-19 18:27:12 UTC (rev 3028)
@@ -185,6 +185,8 @@
 PHP_METHOD(Geometry, symDifference);
 PHP_METHOD(Geometry, boundary);
 PHP_METHOD(Geometry, union); /* also does union cascaded */
+PHP_METHOD(Geometry, pointOnSurface); 
+PHP_METHOD(Geometry, centroid); 
 
 PHP_METHOD(Geometry, numGeometries);
 
@@ -200,6 +202,9 @@
     PHP_ME(Geometry, symDifference, NULL, 0)
     PHP_ME(Geometry, boundary, NULL, 0)
     PHP_ME(Geometry, union, NULL, 0)
+    PHP_ME(Geometry, pointOnSurface, NULL, 0)
+    PHP_ME(Geometry, centroid, NULL, 0)
+
     PHP_ME(Geometry, numGeometries, NULL, 0)
     {NULL, NULL, NULL}
 };
@@ -530,6 +535,42 @@
     setRelay(return_value, ret);
 }
 
+/**
+ * GEOSGeometry::pointOnSurface()
+ */
+PHP_METHOD(Geometry, pointOnSurface)
+{
+    GEOSGeometry *this;
+    GEOSGeometry *ret;
+
+    this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+    ret = GEOSPointOnSurface(this);
+    if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */
+
+    /* return_value is a zval */
+    object_init_ex(return_value, Geometry_ce_ptr);
+    setRelay(return_value, ret);
+}
+
+/**
+ * GEOSGeometry::centroid()
+ */
+PHP_METHOD(Geometry, centroid)
+{
+    GEOSGeometry *this;
+    GEOSGeometry *ret;
+
+    this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+    ret = GEOSGetCentroid(this);
+    if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */
+
+    /* return_value is a zval */
+    object_init_ex(return_value, Geometry_ce_ptr);
+    setRelay(return_value, ret);
+}
+
 /* -- class GEOSWKTReader -------------------- */
 
 PHP_METHOD(WKTReader, __construct);

Modified: trunk/php/test/test.php
===================================================================
--- trunk/php/test/test.php	2010-06-19 18:13:21 UTC (rev 3027)
+++ trunk/php/test/test.php	2010-06-19 18:27:12 UTC (rev 3028)
@@ -803,4 +803,54 @@
             , $writer->write($gu));
 
     }
+
+    public function testGeometry_pointOnSurface()
+    {
+        $reader = new GEOSWKTReader();
+        $writer = new GEOSWKTWriter();
+        $writer->setRoundingPrecision(0);
+
+        $g = $reader->read('POINT(0 0)');
+        $b = $g->pointOnSurface();
+        $this->assertEquals(
+'POINT (0 0)'
+            , $writer->write($b));
+
+        $g = $reader->read('LINESTRING(0 0, 5 5, 10 10)');
+        $b = $g->pointOnSurface();
+        $this->assertEquals(
+'POINT (5 5)'
+            , $writer->write($b));
+
+        $g = $reader->read('POLYGON((0 0, 0 10, 5 5, 10 10, 10 0, 0 0))');
+        $b = $g->pointOnSurface();
+        $this->assertEquals(
+'POINT (2 5)'
+            , $writer->write($b));
+    }
+
+    public function testGeometry_centroid()
+    {
+        $reader = new GEOSWKTReader();
+        $writer = new GEOSWKTWriter();
+        $writer->setRoundingPrecision(0);
+
+        $g = $reader->read('POINT(0 0)');
+        $b = $g->centroid();
+        $this->assertEquals(
+'POINT (0 0)'
+            , $writer->write($b));
+
+        $g = $reader->read('LINESTRING(0 0, 10 10)');
+        $b = $g->centroid();
+        $this->assertEquals(
+'POINT (5 5)'
+            , $writer->write($b));
+
+        $g = $reader->read('POLYGON((0 0, 0 10, 5 5, 10 10, 10 0, 0 0))');
+        $b = $g->centroid();
+        $this->assertEquals(
+'POINT (5 4)'
+            , $writer->write($b));
+    }
 }



More information about the geos-commits mailing list