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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list