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