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

svn_geos at osgeo.org svn_geos at osgeo.org
Sat Jun 19 09:06:16 EDT 2010


Author: strk
Date: 2010-06-19 13:06:16 +0000 (Sat, 19 Jun 2010)
New Revision: 3022

Modified:
   trunk/php/geos.c
   trunk/php/test/test.php
Log:
Add GEOSGeometry->interpolate()


Modified: trunk/php/geos.c
===================================================================
--- trunk/php/geos.c	2010-06-19 12:42:43 UTC (rev 3021)
+++ trunk/php/geos.c	2010-06-19 13:06:16 UTC (rev 3022)
@@ -150,12 +150,14 @@
 
 PHP_METHOD(Geometry, __construct);
 PHP_METHOD(Geometry, project);
+PHP_METHOD(Geometry, interpolate);
 
 PHP_METHOD(Geometry, numGeometries);
 
 static function_entry Geometry_methods[] = {
     PHP_ME(Geometry, __construct, NULL, 0)
     PHP_ME(Geometry, project, NULL, 0)
+    PHP_ME(Geometry, interpolate, NULL, 0)
     PHP_ME(Geometry, numGeometries, NULL, 0)
     {NULL, NULL, NULL}
 };
@@ -224,6 +226,28 @@
     RETURN_DOUBLE(ret);
 }
 
+PHP_METHOD(Geometry, interpolate)
+{
+    GEOSGeometry *this;
+    double dist;
+    zval *zobj;
+    GEOSGeometry *ret;
+
+    this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dist)
+        == FAILURE) {
+        RETURN_NULL();
+    }
+
+    ret = GEOSInterpolate(this, dist);
+    if ( ! ret ) 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 12:42:43 UTC (rev 3021)
+++ trunk/php/test/test.php	2010-06-19 13:06:16 UTC (rev 3022)
@@ -242,4 +242,36 @@
 
 
     }
+
+    public function testGeometry_interpolate()
+    {
+        $reader = new GEOSWKTReader();
+        $writer = new GEOSWKTWriter();
+        $writer->setTrim(TRUE);
+
+        /* The method only accept LineString geometries */
+        $g = $reader->read('POINT(1 2)');
+        try {
+            $prj = $g->interpolate(0);
+            $this->assertTrue(FALSE); # this is just to fail if we get here
+        } catch (Exception $e) {
+            $this->assertContains('LineString', $e->getMessage());
+        }
+
+        $g = $reader->read('LINESTRING(0 0, 10 0)');
+
+        $prj = $g->interpolate(0);
+        $this->assertNotNull($prj);
+        $this->assertEquals('POINT (0 0)', $writer->write($prj));
+
+        $prj = $g->interpolate(5);
+        $this->assertNotNull($prj);
+        $this->assertEquals('POINT (5 0)', $writer->write($prj));
+
+        /* return closest on longer distance */
+        $prj = $g->interpolate(20);
+        $this->assertNotNull($prj);
+        $this->assertEquals('POINT (10 0)', $writer->write($prj));
+    
+    }
 }



More information about the geos-commits mailing list