[geos-commits] r3027 - in trunk/php: . test
svn_geos at osgeo.org
svn_geos at osgeo.org
Sat Jun 19 14:13:21 EDT 2010
Author: strk
Date: 2010-06-19 18:13:21 +0000 (Sat, 19 Jun 2010)
New Revision: 3027
Modified:
trunk/php/geos.c
trunk/php/test/test.php
Log:
More Geometry methods: envelope, intersection, convexHull, difference, symDifference, boundary, union (including cascaded)
Modified: trunk/php/geos.c
===================================================================
--- trunk/php/geos.c 2010-06-19 17:14:08 UTC (rev 3026)
+++ trunk/php/geos.c 2010-06-19 18:13:21 UTC (rev 3027)
@@ -178,6 +178,13 @@
PHP_METHOD(Geometry, project);
PHP_METHOD(Geometry, interpolate);
PHP_METHOD(Geometry, buffer);
+PHP_METHOD(Geometry, envelope);
+PHP_METHOD(Geometry, intersection);
+PHP_METHOD(Geometry, convexHull);
+PHP_METHOD(Geometry, difference);
+PHP_METHOD(Geometry, symDifference);
+PHP_METHOD(Geometry, boundary);
+PHP_METHOD(Geometry, union); /* also does union cascaded */
PHP_METHOD(Geometry, numGeometries);
@@ -186,6 +193,13 @@
PHP_ME(Geometry, project, NULL, 0)
PHP_ME(Geometry, interpolate, NULL, 0)
PHP_ME(Geometry, buffer, NULL, 0)
+ PHP_ME(Geometry, envelope, NULL, 0)
+ PHP_ME(Geometry, intersection, NULL, 0)
+ PHP_ME(Geometry, convexHull, NULL, 0)
+ PHP_ME(Geometry, difference, NULL, 0)
+ PHP_ME(Geometry, symDifference, NULL, 0)
+ PHP_ME(Geometry, boundary, NULL, 0)
+ PHP_ME(Geometry, union, NULL, 0)
PHP_ME(Geometry, numGeometries, NULL, 0)
{NULL, NULL, NULL}
};
@@ -285,7 +299,7 @@
setRelay(return_value, ret);
}
-/*
+/**
* GEOSGeometry::buffer(dist, [<styleArray>])
*
* styleArray keys supported:
@@ -370,6 +384,152 @@
setRelay(return_value, ret);
}
+PHP_METHOD(Geometry, envelope)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *ret;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ ret = GEOSEnvelope(this);
+ 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);
+}
+
+PHP_METHOD(Geometry, intersection)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *other;
+ GEOSGeometry *ret;
+ zval *zobj;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj)
+ == FAILURE) {
+ RETURN_NULL();
+ }
+ other = getRelay(zobj, Geometry_ce_ptr);
+
+ ret = GEOSIntersection(this, other);
+ 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);
+}
+
+PHP_METHOD(Geometry, convexHull)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *ret;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ ret = GEOSConvexHull(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);
+}
+
+PHP_METHOD(Geometry, difference)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *other;
+ GEOSGeometry *ret;
+ zval *zobj;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj)
+ == FAILURE) {
+ RETURN_NULL();
+ }
+ other = getRelay(zobj, Geometry_ce_ptr);
+
+ ret = GEOSDifference(this, other);
+ 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);
+}
+
+PHP_METHOD(Geometry, symDifference)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *other;
+ GEOSGeometry *ret;
+ zval *zobj;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj)
+ == FAILURE) {
+ RETURN_NULL();
+ }
+ other = getRelay(zobj, Geometry_ce_ptr);
+
+ ret = GEOSSymDifference(this, other);
+ 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);
+}
+
+PHP_METHOD(Geometry, boundary)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *ret;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ ret = GEOSBoundary(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::union(otherGeom)
+ * GEOSGeometry::union()
+ */
+PHP_METHOD(Geometry, union)
+{
+ GEOSGeometry *this;
+ GEOSGeometry *other;
+ GEOSGeometry *ret;
+ zval *zobj = NULL;
+
+ this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|o", &zobj)
+ == FAILURE) {
+ RETURN_NULL();
+ }
+
+ if ( zobj ) {
+ other = getRelay(zobj, Geometry_ce_ptr);
+ ret = GEOSUnion(this, other);
+ } else {
+ ret = GEOSUnionCascaded(this);
+ }
+
+ 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 17:14:08 UTC (rev 3026)
+++ trunk/php/test/test.php 2010-06-19 18:13:21 UTC (rev 3027)
@@ -433,4 +433,374 @@
}
+
+ public function testGeometry_envelope()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ $g = $reader->read('POINT(0 0)');
+ $b = $g->envelope();
+ $this->assertEquals(
+'POINT (0 0)'
+ , $writer->write($b));
+
+ $g = $reader->read('LINESTRING(0 0, 10 10)');
+ $b = $g->envelope();
+ $this->assertEquals(
+'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))'
+ , $writer->write($b));
+
+ }
+
+ public function testGeometry_intersection()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ /* POINT - POINT */
+ $g = $reader->read('POINT(0 0)');
+ $g2 = $reader->read('POINT(0 0)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'POINT (0 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('POINT(1 0)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY'
+ , $writer->write($gi));
+
+ /* POINT - LINE */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('POINT(5 0)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'POINT (5 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('POINT(12 0)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY'
+ , $writer->write($gi));
+
+ /* LINE - LINE */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'POINT (5 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(5 0, 20 0)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'LINESTRING (5 0, 10 0)'
+ , $writer->write($gi));
+
+ /* LINE - POLY */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'LINESTRING (5 0, 5 10)'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(10 0, 20 0)');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'POINT (10 0)'
+ , $writer->write($gi));
+
+ /* POLY - POLY */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))');
+ $gi = $g->intersection($g2);
+ $this->assertEquals(
+'POLYGON ((10 5, 10 0, 5 0, 5 5, 10 5))'
+ , $writer->write($gi));
+ $g2 = $reader->read('POLYGON((10 0, 20 0, 20 -5, 10 -5, 10 0))');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'POINT (10 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('POLYGON((8 0, 20 0, 20 -5, 10 -5, 8 0))');
+ $gi = $g->intersection($g2);
+ $this->assertEquals( 'LINESTRING (8 0, 10 0)'
+ , $writer->write($gi));
+ }
+
+ public function testGeometry_convexHull()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ $g = $reader->read('POINT(0 0)');
+ $b = $g->convexHull();
+ $this->assertEquals(
+'POINT (0 0)'
+ , $writer->write($b));
+
+ $g = $reader->read('LINESTRING(0 0, 10 10)');
+ $b = $g->convexHull();
+ $this->assertEquals(
+'LINESTRING (0 0, 10 10)'
+ , $writer->write($b));
+
+ $g = $reader->read('POLYGON((0 0, 0 10, 5 5, 10 10, 10 0, 0 0))');
+ $b = $g->convexHull();
+ $this->assertEquals(
+'POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))'
+ , $writer->write($b));
+
+ }
+
+ public function testGeometry_difference()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ /* POINT - POINT */
+ $g = $reader->read('POINT(0 0)');
+ $g2 = $reader->read('POINT(0 0)');
+ $gi = $g->difference($g2);
+ $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY'
+ , $writer->write($gi));
+ $g2 = $reader->read('POINT(1 0)');
+ $gi = $g->difference($g2);
+ $this->assertEquals( 'POINT (0 0)'
+ , $writer->write($gi));
+
+ /* LINE - POINT */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('POINT(5 0)');
+ $gi = $g->difference($g2);
+ $this->assertEquals('LINESTRING (0 0, 10 0)'
+ , $writer->write($gi));
+
+ /* POINT - LINE */
+ $g = $reader->read('POINT(5 0)');
+ $g2 = $reader->read('LINESTRING(0 0, 10 0)');
+ $gi = $g->difference($g2);
+ $this->assertEquals('GEOMETRYCOLLECTION EMPTY'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(0 1, 10 1)');
+ $gi = $g->difference($g2);
+ $this->assertEquals( 'POINT (5 0)'
+ , $writer->write($gi));
+
+ /* LINE - LINE */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->difference($g2);
+ $this->assertEquals( 'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0))'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(5 0, 20 0)');
+ $gi = $g->difference($g2);
+ $this->assertEquals( 'LINESTRING (0 0, 5 0)'
+ , $writer->write($gi));
+
+ /* POLY - LINE */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->difference($g2);
+ $this->assertEquals(
+'POLYGON ((5 0, 0 0, 0 10, 5 10, 10 10, 10 0, 5 0))'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(10 0, 20 0)');
+ $gi = $g->difference($g2);
+ $this->assertEquals(
+'POLYGON ((10 0, 0 0, 0 10, 10 10, 10 0))'
+ , $writer->write($gi));
+
+ /* POLY - POLY */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))');
+ $gi = $g->difference($g2);
+ $this->assertEquals(
+'POLYGON ((5 0, 0 0, 0 10, 10 10, 10 5, 5 5, 5 0))'
+ , $writer->write($gi));
+ }
+
+ public function testGeometry_symdifference()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ /* POINT - POINT */
+ $g = $reader->read('POINT(0 0)');
+ $g2 = $reader->read('POINT(0 0)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY'
+ , $writer->write($gi));
+ $g2 = $reader->read('POINT(1 0)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals( 'MULTIPOINT (0 0, 1 0)'
+ , $writer->write($gi));
+
+ /* LINE - POINT */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('POINT(5 0)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals('LINESTRING (0 0, 10 0)'
+ , $writer->write($gi));
+
+ /* POINT - LINE */
+ $g = $reader->read('POINT(5 0)');
+ $g2 = $reader->read('LINESTRING(0 0, 10 0)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals( 'LINESTRING (0 0, 10 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(0 1, 10 1)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals(
+'GEOMETRYCOLLECTION (POINT (5 0), LINESTRING (0 1, 10 1))'
+ , $writer->write($gi));
+
+ /* LINE - LINE */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals(
+'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (5 -10, 5 0), (5 0, 5 10))'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(5 0, 20 0)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals(
+'MULTILINESTRING ((0 0, 5 0), (10 0, 20 0))'
+ , $writer->write($gi));
+
+ /* POLY - LINE */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals(
+'GEOMETRYCOLLECTION (LINESTRING (5 -10, 5 0), POLYGON ((5 0, 0 0, 0 10, 5 10, 10 10, 10 0, 5 0)))'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(10 0, 20 0)');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals(
+'GEOMETRYCOLLECTION (LINESTRING (10 0, 20 0), POLYGON ((10 0, 0 0, 0 10, 10 10, 10 0)))'
+ , $writer->write($gi));
+
+ /* POLY - POLY */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))');
+ $gi = $g->symDifference($g2);
+ $this->assertEquals(
+'MULTIPOLYGON (((5 0, 0 0, 0 10, 10 10, 10 5, 5 5, 5 0)), ((5 0, 10 0, 10 5, 15 5, 15 -5, 5 -5, 5 0)))'
+ , $writer->write($gi));
+ }
+
+ public function testGeometry_boundary()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ $g = $reader->read('POINT(0 0)');
+ $b = $g->boundary();
+ $this->assertEquals(
+'GEOMETRYCOLLECTION EMPTY'
+ , $writer->write($b));
+
+ $g = $reader->read('LINESTRING(0 0, 10 10)');
+ $b = $g->boundary();
+ $this->assertEquals(
+'MULTIPOINT (0 0, 10 10)'
+ , $writer->write($b));
+
+ $g = $reader->read(
+'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),( 5 5, 5 6, 6 6, 6 5, 5 5))');
+ $b = $g->boundary();
+ $this->assertEquals(
+'MULTILINESTRING ((0 0, 10 0, 10 10, 0 10, 0 0), (5 5, 5 6, 6 6, 6 5, 5 5))'
+ , $writer->write($b));
+
+ }
+
+ public function testGeometry_union()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ /* POINT - POINT */
+ $g = $reader->read('POINT(0 0)');
+ $g2 = $reader->read('POINT(0 0)');
+ $gi = $g->union($g2);
+ $this->assertEquals( 'POINT (0 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('POINT(1 0)');
+ $gi = $g->union($g2);
+ $this->assertEquals( 'MULTIPOINT (0 0, 1 0)'
+ , $writer->write($gi));
+
+ /* LINE - POINT */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('POINT(5 0)');
+ $gi = $g->union($g2);
+ $this->assertEquals('LINESTRING (0 0, 10 0)'
+ , $writer->write($gi));
+
+ /* POINT - LINE */
+ $g = $reader->read('POINT(5 0)');
+ $g2 = $reader->read('LINESTRING(0 0, 10 0)');
+ $gi = $g->union($g2);
+ $this->assertEquals( 'LINESTRING (0 0, 10 0)'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(0 1, 10 1)');
+ $gi = $g->union($g2);
+ $this->assertEquals(
+'GEOMETRYCOLLECTION (POINT (5 0), LINESTRING (0 1, 10 1))'
+ , $writer->write($gi));
+
+ /* LINE - LINE */
+ $g = $reader->read('LINESTRING(0 0, 10 0)');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->union($g2);
+ $this->assertEquals(
+'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (5 -10, 5 0), (5 0, 5 10))'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(5 0, 20 0)');
+ $gi = $g->union($g2);
+ $this->assertEquals(
+'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (10 0, 20 0))'
+ , $writer->write($gi));
+
+ /* POLY - LINE */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('LINESTRING(5 -10, 5 10)');
+ $gi = $g->union($g2);
+ $this->assertEquals(
+'GEOMETRYCOLLECTION (LINESTRING (5 -10, 5 0), POLYGON ((5 0, 0 0, 0 10, 5 10, 10 10, 10 0, 5 0)))'
+ , $writer->write($gi));
+ $g2 = $reader->read('LINESTRING(10 0, 20 0)');
+ $gi = $g->union($g2);
+ $this->assertEquals(
+'GEOMETRYCOLLECTION (LINESTRING (10 0, 20 0), POLYGON ((10 0, 0 0, 0 10, 10 10, 10 0)))'
+ , $writer->write($gi));
+
+ /* POLY - POLY */
+ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
+ $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))');
+ $gi = $g->union($g2);
+ $this->assertEquals(
+'POLYGON ((5 0, 0 0, 0 10, 10 10, 10 5, 15 5, 15 -5, 5 -5, 5 0))'
+ , $writer->write($gi));
+ }
+
+ public function testGeometry_unionCascaded()
+ {
+ $reader = new GEOSWKTReader();
+ $writer = new GEOSWKTWriter();
+ $writer->setRoundingPrecision(0);
+
+ $g = $reader->read('MULTIPOLYGON(
+ ((0 0, 1 0, 1 1, 0 1, 0 0)),
+ ((10 10, 10 14, 14 14, 14 10, 10 10),
+ (11 11, 11 12, 12 12, 12 11, 11 11)),
+ ((0 0, 11 0, 11 11, 0 11, 0 0))
+ ))');
+
+ $gu = $g->union();
+ $this->assertEquals(
+'POLYGON ((1 0, 0 0, 0 1, 0 11, 10 11, 10 14, 14 14, 14 10, 11 10, 11 0, 1 0), (11 11, 12 11, 12 12, 11 12, 11 11))'
+ , $writer->write($gu));
+
+ }
}
More information about the geos-commits
mailing list