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