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:
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user