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

attempting MakePolygon (commented)


diffs (96 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -155,6 +155,7 @@ geom_export str wkbNumPoints(int *out, w
 geom_export str wkbPointN(wkb **out, wkb **geom, int *n);
 geom_export str wkbEnvelope(wkb **out, wkb **geom);
 geom_export str wkbEnvelopeFromCoordinates(wkb** out, double* xmin, double* 
ymin, double* xmax, double* ymax, int* srid);
+geom_export str wkbMakePolygon(wkb** out, wkb** external, int* internalBAT_id, 
int* srid);
 geom_export str wkbExteriorRing(wkb**, wkb**);
 geom_export str wkbInteriorRingN(wkb**, wkb**, short*);
 geom_export str wkbNumRings(int*, wkb**, int*);
@@ -1934,6 +1935,40 @@ str wkbEnvelopeFromCoordinates(wkb** out
        return MAL_SUCCEED;
 }
 
+str wkbMakePolygon(wkb** out, wkb** external, int* internalBAT_id, int* srid) {
+       GEOSGeom geosGeometry, externalGeometry;
+
+       if(wkb_isnil(*external)){
+               *out = wkb_nil;
+               return MAL_SUCCEED;
+       }
+
+       externalGeometry = wkb2geos(*external);
+       if ((GEOSGeomTypeId(externalGeometry)+1) != wkbLineString) {
+               *out = wkb_nil;
+               GEOSGeom_destroy(externalGeometry);
+               throw(MAL, "geom.Polygon", "Geometries should be LineStrings");
+       }
+
+       if(internalBAT_id == NULL) {
+               geosGeometry = GEOSGeom_createPolygon(externalGeometry, NULL, 
0);
+               if(geosGeometry == NULL) {
+                       GEOSGeom_destroy(externalGeometry);
+                       throw(MAL, "geom.Polygon", "Error creating Polygon from 
LinearRing");
+               }
+       } else {
+               geosGeometry = NULL;
+       }
+
+       GEOSSetSRID(geosGeometry, *srid);
+
+       *out = geos2wkb(geosGeometry);
+
+       return MAL_SUCCEED;
+
+
+}
+
 /* Returns the first or last point of a linestring */
 static str wkbBorderPoint(wkb **out, wkb **geom, GEOSGeometry* (*func)(const 
GEOSGeometry *), const char *name) {
        GEOSGeom geosGeometry = wkb2geos(*geom);
diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal
--- a/geom/monetdb5/geom.mal
+++ b/geom/monetdb5/geom.mal
@@ -209,6 +209,8 @@ command Envelope(w:wkb) :wkb address wkb
 comment "The minimum bounding box for this Geometry, returned as a Geometry. 
The polygon is defined by the corner points of the bounding box 
((MINX,MINY),(MAXX,MINY),(MAXX,MAXY),(MINX,MAXY)).";
 command EnvelopeFromCoordinates(:dbl, :dbl, :dbl, :dbl, :int) :wkb address 
wkbEnvelopeFromCoordinates
 comment "A polygon created by the provided coordinates";
+command Polygon(:wkb, :bat[:oid,:wkb], :int) :wkb address wkbMakePolygon
+comment "Returns a Polygon created from the provided LineStrings";
 command ExteriorRing(w:wkb) :wkb address wkbExteriorRing
 comment "Returns a line string representing the exterior ring of the POLYGON 
geometry. Return NULL if the geometry is not a polygon.";
 command InteriorRingN(w:wkb, n:int) :wkb address wkbInteriorRingN
@@ -287,7 +289,18 @@ function MakeEnvelope(xmin:dbl, ymin:dbl
        return x;
 end MakeEnvelope;
 
-
+#function MakePolygon(external:wkb) :wkb;
+#      x := Polygon(external, NULL, 0);
+#      return x;
+#end MakePolygon;
+#function MakePolygon(external:wkb, srid:int) :wkb;
+#      x := Polygon(external, NULL, srid);
+#      return x;
+#end MakePolygon;
+#function MakePolygon(external:wkb, internal:bat[:oid,:wkb]) :wkb;
+#      x := Polygon(external, internal, 0);
+#      return x;
+#end MakePolygon;
 
 command mbr(:wkb) :mbr address wkbMBR
 comment "Creates the mbr for the given wkb.";
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
@@ -4072,7 +4072,7 @@ CREATE FUNCTION ST_MakeEnvelope(xmin dou
 CREATE FUNCTION ST_MakeEnvelope(xmin double, ymin double, xmax double, ymax 
double) RETURNS Geometry external name geom."MakeEnvelope";
 --CREATE FUNCTION ST_MakePolygon(geom Geometry) RETURNS Geometry external name 
geom."MakePolygon"; --gets linestring
 --CREATE FUNCTION ST_MakePolygon(outerGeom Geometry, interiorGeoms Geometry[]) 
RETURNS Geometry external name geom."MakePolygon"; --gets linestrings
---CREATE FUNCTION ST_Polygon(geom Geometry, srid SMALLINT) RETURNS Geometry 
external name geom."Polygon" --gets linestring
+--CREATE FUNCTION ST_Polygon(geom Geometry, srid integer) RETURNS Geometry 
external name geom."MakePolygon"; --gets linestring
 CREATE FUNCTION ST_MakeBox2D(lowLeftPointGeom Geometry, upRightPointGeom 
Geometry) RETURNS mbr external name geom."MakeBox2D"; --gets 2d points
 --CREATE FUNCTION ST_3DMakeBox(lowLeftPointGeom Geometry, upRightPointGeom 
Geometry) RETURNS mbr external name geom."MakeBox3D"; --gets 3d points
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to