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"
|
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
|
* 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>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user