Changeset: 4d4c6ce1a817 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4d4c6ce1a817
Modified Files:
geom/monetdb5/geom.c
geom/monetdb5/geom.mal
geom/sql/40_geom.sql
Branch: geo
Log Message:
MakePolygon/Polygon implmentation. Works only for polygons without holes.
Changes to geos library were necessary so, it will not work with standard geos
library.
diffs (80 lines):
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -600,7 +600,7 @@ str geom_2_geom(wkb** resWKB, wkb **valu
int valueType = 0;
int valueSRID = (*valueWKB)->srid;
-//fprintf(stderr, "in geom_2_geom\n");
+
/* get the geosGeometry from the wkb */
geosGeometry = wkb2geos(*valueWKB);
/* get the number of coordinates the geometry has */
@@ -784,7 +784,7 @@ wkb* geos2wkb(const GEOSGeometry* geosGe
geomWKB->srid = GEOSGetSRID(geosGeometry);
memcpy(&geomWKB->data, w, wkbLen);
GEOSFree(w);
-
+
return geomWKB;
}
@@ -1944,13 +1944,13 @@ str wkbMakePolygon(wkb** out, wkb** exte
}
externalGeometry = wkb2geos(*external);
- if ((GEOSGeomTypeId(externalGeometry)+1) != wkbLineString) {
+ if ((GEOSGeomTypeId(externalGeometry)+1) != wkbLinearRing) {
*out = wkb_nil;
GEOSGeom_destroy(externalGeometry);
- throw(MAL, "geom.Polygon", "Geometries should be LineStrings");
+ throw(MAL, "geom.Polygon", "Geometries should be LinearRings");
}
- if(internalBAT_id == NULL) {
+ if(*internalBAT_id == 0) {
geosGeometry = GEOSGeom_createPolygon(externalGeometry, NULL,
0);
if(geosGeometry == NULL) {
GEOSGeom_destroy(externalGeometry);
diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal
--- a/geom/monetdb5/geom.mal
+++ b/geom/monetdb5/geom.mal
@@ -289,14 +289,14 @@ 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) :wkb;
+ x := Polygon(external, nil:bat, 0);
+ return x;
+end MakePolygon;
+function MakePolygon(external:wkb, srid:int) :wkb;
+ x := Polygon(external, nil:bat, srid);
+ return x;
+end MakePolygon;
#function MakePolygon(external:wkb, internal:bat[:oid,:wkb]) :wkb;
# x := Polygon(external, internal, 0);
# return x;
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
@@ -4070,9 +4070,9 @@ CREATE FUNCTION ST_MakePointM(x double,
--CREATE FUNCTION ST_LineFromMultiPoint(pointGeom Geometry) RETURNS Geometry
external name geom."LineFromMultiPoint"; --gets mutlipoint returns linestring
CREATE FUNCTION ST_MakeEnvelope(xmin double, ymin double, xmax double, ymax
double, srid integer) RETURNS Geometry external name geom."MakeEnvelope";
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 integer) RETURNS Geometry
external name geom."MakePolygon"; --gets linestring
+CREATE FUNCTION ST_MakePolygon(geom Geometry) RETURNS Geometry external name
geom."MakePolygon"; --gets linestring
+--CREATE FUNCTION ST_MakePolygon(outerGeom Geometry, interiorGeoms table(g
Geometry)) RETURNS Geometry external name geom."MakePolygon"; --gets linestrings
+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