Adding a convenience method for creating a WKT format and creating geometries with WKT strings. r=crschmidt (closes #1908)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@8696 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2009-01-17 01:32:17 +00:00
parent cb62d883dc
commit 89431424fb
2 changed files with 84 additions and 0 deletions

View File

@@ -203,6 +203,36 @@ OpenLayers.Geometry = OpenLayers.Class({
CLASS_NAME: "OpenLayers.Geometry"
});
/**
* Function: OpenLayers.Geometry.fromWKT
* Generate a geometry given a Well-Known Text string.
*
* Parameters:
* wkt - {String} A string representing the geometry in Well-Known Text.
*
* Returns:
* {<OpenLayers.Geometry>} A geometry of the appropriate class.
*/
OpenLayers.Geometry.fromWKT = function(wkt) {
var format = arguments.callee.format;
if(!format) {
format = new OpenLayers.Format.WKT();
arguments.callee.format = format;
}
var geom;
var result = format.read(wkt);
if(result instanceof OpenLayers.Feature.Vector) {
geom = result.geometry;
} else if(result instanceof Array) {
var len = result.length;
var components = new Array(len);
for(var i=0; i<len; ++i) {
components[i] = result[i].geometry;
}
geom = new OpenLayers.Geometry.Collection(components);
}
return geom;
};
/**
* Method: OpenLayers.Geometry.segmentsIntersect

View File

@@ -252,6 +252,60 @@
}
}
function test_fromWKT(t) {
var cases = [{
wkt: "POINT(1 2)",
geom: new OpenLayers.Geometry.Point(1, 2)
}, {
wkt: "MULTIPOINT(3.5 5.6,4.8 10.5)",
geom: new OpenLayers.Geometry.MultiPoint([
new OpenLayers.Geometry.Point(3.5, 5.6),
new OpenLayers.Geometry.Point(4.8, 10.5)
])
}, {
wkt: "LINESTRING(1 2, 3 4)",
geom: new OpenLayers.Geometry.LineString([
new OpenLayers.Geometry.Point(1, 2),
new OpenLayers.Geometry.Point(3, 4)
])
}, {
wkt: "POLYGON((0 0, 0 4, 4 4, 4 0, 0 0),(1 1, 1 3, 3 3, 3 1, 1 1))",
geom: new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([
new OpenLayers.Geometry.Point(0, 0),
new OpenLayers.Geometry.Point(0, 4),
new OpenLayers.Geometry.Point(4, 4),
new OpenLayers.Geometry.Point(4, 0),
new OpenLayers.Geometry.Point(0, 0)
]),
new OpenLayers.Geometry.LinearRing([
new OpenLayers.Geometry.Point(1, 1),
new OpenLayers.Geometry.Point(1, 3),
new OpenLayers.Geometry.Point(3, 3),
new OpenLayers.Geometry.Point(3, 1),
new OpenLayers.Geometry.Point(1, 1)
])
])
}, {
wkt: "GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))",
geom: new OpenLayers.Geometry.Collection([
new OpenLayers.Geometry.Point(4, 6),
new OpenLayers.Geometry.LineString([
new OpenLayers.Geometry.Point(4, 6),
new OpenLayers.Geometry.Point(7, 10)
])
])
}];
t.plan(cases.length);
var wkt = OpenLayers.Geometry.fromWKT;
for(var i=0; i<cases.length; ++i) {
t.geom_eq(wkt(cases[i].wkt), cases[i].geom, "case " + i);
}
}
</script>
</head>
<body>