Changeset: 36f3752beb9d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=36f3752beb9d
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom.mal
        geom/sql/40_geom.sql
Branch: geo
Log Message:

ST_Covers & ST_CoveredBy


diffs (82 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -126,6 +126,9 @@ geom_export str wkbContains(bit*, wkb**,
 geom_export str wkbContains_bat_bat(int* outBAT_id, int* aBAT_id, int* 
bBAT_id);
 geom_export str wkbOverlaps(bit*, wkb**, wkb**);
 geom_export str wkbRelate(bit*, wkb**, wkb**, str*);
+geom_export str wkbCovers(bit *out, wkb **geomWKB_a, wkb **geomWKB_b);
+geom_export str wkbCoveredBy(bit *out, wkb **geomWKB_a, wkb **geomWKB_b);
+
 //LocateAlong
 //LocateBetween
 
@@ -2941,6 +2944,36 @@ str wkbWithin(bit *out, wkb **geomWKB_a,
        return MAL_SUCCEED;
 }
 
+str wkbCovers(bit *out, wkb **geomWKB_a, wkb **geomWKB_b) {
+       int res =  wkbspatial(geomWKB_a, geomWKB_b, GEOSCovers);
+       *out = bit_nil;
+
+       if(res == 4)
+               throw(MAL, "geom.Within", "Geometries of different SRID");
+       if(res == 3)
+               throw(MAL, "geom.Within", "wkb2geos failed");
+       if(res == 2)
+               throw(MAL, "geom.Within", "GEOSCovers failed");
+       *out = res;
+
+       return MAL_SUCCEED;
+}
+
+str wkbCoveredBy(bit *out, wkb **geomWKB_a, wkb **geomWKB_b) {
+       int res =  wkbspatial(geomWKB_a, geomWKB_b, GEOSCoveredBy);
+       *out = bit_nil;
+
+       if(res == 4)
+               throw(MAL, "geom.Within", "Geometries of different SRID");
+       if(res == 3)
+               throw(MAL, "geom.Within", "wkb2geos failed");
+       if(res == 2)
+               throw(MAL, "geom.Within", "GEOSCoveredBy failed");
+       *out = res;
+
+       return MAL_SUCCEED;
+}
+
 /*returns the n-th geometry in a multi-geometry */
 str wkbGeometryN(wkb** out, wkb** geom, int* geometryNum) {
        int geometriesNum = -1;
diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal
--- a/geom/monetdb5/geom.mal
+++ b/geom/monetdb5/geom.mal
@@ -262,7 +262,11 @@ comment "Returns true if the Geometry a 
 command Touches(a:wkb, b:wkb) :bit address wkbTouches
 comment "Returns TRUE if the geometries have at least one point in common, but 
their interiors do not intersect.";
 command Within(a:wkb, b:wkb) :bit address wkbWithin
-comment "Returns true if the geometry A is completely inside geometry B";
+comment "Returns TRUE if the geometry A is completely inside geometry B";
+command Covers(a:wkb, b:wkb) :bit address wkbCovers
+comment "Returns TRUE if no point of geometry B is outside geometry A";
+command CoveredBy(a:wkb, b:wkb) :bit address wkbCoveredBy
+comment "Returns TRUE if no point of geometry A is outside geometry B";
 command GeometryN(g:wkb, n:int) :wkb address wkbGeometryN
 comment "Returns the 1-based Nth geometry if the geometry is a 
GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or 
(MULTI)POLYGON. Otherwise, return NULL";
 command NumGeometries(g:wkb) :int address wkbNumGeometries
diff --git a/geom/sql/40_geom.sql b/geom/sql/40_geom.sql
--- a/geom/sql/40_geom.sql
+++ b/geom/sql/40_geom.sql
@@ -4233,8 +4233,10 @@ CREATE FUNCTION ST_Centroid(geom Geometr
 --CREATE FUNCTION ST_ClosestPoint RETURNS EXTERNAL NAME
 CREATE FUNCTION ST_Contains(geom1 Geometry, geom2 Geometry) RETURNS boolean 
EXTERNAL NAME geom."Contains";
 --CREATE FUNCTION ST_ContainsProperly RETURNS EXTERNAL NAME
---CREATE FUNCTION ST_Covers RETURNS EXTERNAL NAME
---CREATE FUNCTION ST_CoveredBy RETURNS EXTERNAL NAME
+CREATE FUNCTION ST_Covers(geom1 Geometry, geom2 Geometry) RETURNS boolean 
EXTERNAL NAME geom."Covers";
+--CREATE FUNCTION ST_Covers(geog1 Geography, geog2 Geography) RETURNS boolean 
EXTERNAL NAME geom."Covers";
+CREATE FUNCTION ST_CoveredBy(geom1 Geometry, geom2 Geometry) RETURNS boolean 
EXTERNAL NAME geom."CoveredBy";
+--CREATE FUNCTION ST_CoveredBy(geog1 Geography, geog2 Geography) RETURNS 
boolean EXTERNAL NAME geom."CoveredBy";
 CREATE FUNCTION ST_Crosses(geom1 Geometry, geom2 Geometry) RETURNS boolean 
EXTERNAL NAME geom."Crosses";
 --CREATE FUNCTION ST_LineCrossingDirection RETURNS EXTERNAL NAME
 CREATE FUNCTION ST_Disjoint(geom1 Geometry, geom2 Geometry) RETURNS boolean 
EXTERNAL NAME geom."Disjoint";
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to