1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
|
<html>
<head>
<script src="../OLLoader.js"></script>
<script type="text/javascript">
var polygon;
var components = [new OpenLayers.Geometry.Point(10,14), new OpenLayers.Geometry.Point(5,3)];
var components2 = [new OpenLayers.Geometry.Point(12,15), new OpenLayers.Geometry.Point(2,3), new OpenLayers.Geometry.Point(10,0), new OpenLayers.Geometry.Point(10,10)];
var linearRing = new OpenLayers.Geometry.LinearRing(components);
var linearRing2 = new OpenLayers.Geometry.LinearRing(components2);
function test_Polygon_constructor (t) {
t.plan( 3 );
polygon = new OpenLayers.Geometry.Polygon();
t.ok( polygon instanceof OpenLayers.Geometry.Polygon, "new OpenLayers.Geometry.Polygon returns polygon object" );
t.eq( polygon.CLASS_NAME, "OpenLayers.Geometry.Polygon", "polygon.CLASS_NAME is set correctly");
t.eq( polygon.components.length, 0, "polygon.components is set correctly");
}
function test_Polygon_constructor (t) {
t.plan( 3 );
polygon = new OpenLayers.Geometry.Polygon([linearRing]);
t.ok( polygon instanceof OpenLayers.Geometry.Polygon, "new OpenLayers.Geometry.Polygon returns polygon object" );
t.eq( polygon.CLASS_NAME, "OpenLayers.Geometry.Polygon", "polygon.CLASS_NAME is set correctly");
t.eq( polygon.components.length, 1, "polygon.components.length is set correctly");
}
function test_Polygon_constructor (t) {
t.plan( 3 );
polygon = new OpenLayers.Geometry.Polygon([linearRing, linearRing2]);
t.ok( polygon instanceof OpenLayers.Geometry.Polygon, "new OpenLayers.Geometry.Polygon returns polygon object" );
t.eq( polygon.CLASS_NAME, "OpenLayers.Geometry.Polygon", "polygon.CLASS_NAME is set correctly");
t.eq( polygon.components.length, 2, "polygon.components.length is set correctly");
}
function test_Polygon_transform_getBounds (t) {
t.plan(3);
var components = [new OpenLayers.Geometry.Point(10,14), new OpenLayers.Geometry.Point(5,3)];
var linearRing = new OpenLayers.Geometry.LinearRing(components);
polygon = new OpenLayers.Geometry.Polygon([linearRing.clone()]);
polygon.calculateBounds();
t.ok( polygon.bounds != null, "bounds calculated by calcBounds" );
polygon.transform(new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913"));
t.eq(polygon.bounds, null, "Point bounds cleared after transform");
t.eq(polygon.getBounds().toBBOX(), "556597.453889,334111.171355,1113194.907778,1574216.547942", "Bounds are correct")
}
function test_Polygon_transform_string (t) {
t.plan(3);
var components = [new OpenLayers.Geometry.Point(10,14), new OpenLayers.Geometry.Point(5,3)];
var linearRing = new OpenLayers.Geometry.LinearRing(components);
polygon = new OpenLayers.Geometry.Polygon([linearRing.clone()]);
polygon.calculateBounds();
t.ok( polygon.bounds != null, "bounds calculated by calcBounds" );
polygon.transform("EPSG:4326", "EPSG:900913");
t.eq(polygon.bounds, null, "Point bounds cleared after transform");
t.eq(polygon.getBounds().toBBOX(), "556597.453889,334111.171355,1113194.907778,1574216.547942", "Bounds are correct")
}
function test_Polygon_getArea(t) {
t.plan( 5 );
//no components
var polygon = new OpenLayers.Geometry.Polygon();
t.eq(polygon.getArea(), 0, "getArea empty polygon is 0");
var createSquareRing = function(area) {
var points = [
new OpenLayers.Geometry.Point(0, 0),
new OpenLayers.Geometry.Point(0, area),
new OpenLayers.Geometry.Point(area, area),
new OpenLayers.Geometry.Point(area, 0)
];
var ring = new OpenLayers.Geometry.LinearRing(points);
return ring;
};
//simple polygon
var comps = [ createSquareRing(2) ];
var polygon = new OpenLayers.Geometry.Polygon(comps);
t.eq(polygon.getArea(), 4, "getArea simple polygon works lovely");
//polygon with holes
comps = [ createSquareRing(10),
createSquareRing(2),
createSquareRing(3),
createSquareRing(4)
];
var polygon = new OpenLayers.Geometry.Polygon(comps);
t.eq(polygon.getArea(), 71, "getArea polygon with holes works lovely");
//simple polygon negative
comps = [ createSquareRing(-2) ];
var polygon = new OpenLayers.Geometry.Polygon(comps);
t.eq(polygon.getArea(), 4, "getArea simple polygon negative works lovely");
//polygon with holes negative
comps = [ createSquareRing(-10),
createSquareRing(-2),
createSquareRing(-3),
createSquareRing(-4)
];
var polygon = new OpenLayers.Geometry.Polygon(comps);
t.eq(polygon.getArea(), 71, "getArea negative polygon with holes works lovely");
}
function test_Polygon_move(t) {
t.plan(4);
polygon = new OpenLayers.Geometry.Polygon([linearRing, linearRing2]);
var x = linearRing.components[0].x;
var y = linearRing.components[0].y;
var x2 = linearRing2.components[0].x;
var y2 = linearRing2.components[0].y;
var dx = 10 * Math.random();
var dy = 10 * Math.random();
polygon.move(dx, dy);
t.eq(polygon.components[0].components[0].x, x + dx, "move() correctly modifies first x");
t.eq(polygon.components[0].components[0].y, y + dy, "move() correctly modifies first y");
t.eq(polygon.components[1].components[0].x, x2 + dx, "move() correctly modifies second x");
t.eq(polygon.components[1].components[0].y, y2 + dy, "move() correctly modifies second y");
}
function test_Polygon_rotate(t) {
t.plan(6);
var geometry = new OpenLayers.Geometry.Polygon([linearRing, linearRing2]);
var originals = [];
var comp;
var angle = 2 * Math.PI * Math.random();
var origin = new OpenLayers.Geometry.Point(10 * Math.random(),
10 * Math.random());
for(var i=0; i<geometry.components.length; ++i) {
comp = geometry.components[i];
originals[i] = comp.rotate;
comp.rotate = function(a, o) {
t.ok(true, "rotate called for component " + i);
t.ok(a == angle, "rotate called with correct angle");
t.ok(o == origin, "rotate called with correct origin");
}
}
geometry.rotate(angle, origin);
// restore the original rotate defs
for(var i=0; i<geometry.components.length; ++i) {
comp.rotate = originals[i];
}
}
function test_Polygon_resize(t) {
t.plan(8);
var tolerance = 1e-10;
var geometry = new OpenLayers.Geometry.Polygon([linearRing, linearRing2]);
var origin = new OpenLayers.Geometry.Point(10 * Math.random(),
10 * Math.random());
var scale = 10 * Math.random();
var oldArea = geometry.getArea();
var oldPerimeter = geometry.getLength();
geometry.resize(scale, origin);
var newArea = geometry.getArea();
var newPerimeter = geometry.getLength();
t.ok((((newArea / oldArea) - (scale * scale)) / (scale * scale)) < tolerance,
"resize correctly changes the area of a polygon")
t.ok((((newPerimeter / oldPerimeter) - scale) / scale) < tolerance,
"resize correctly changes the perimeter of a polygon")
var originals = [];
var comp;
for(var i=0; i<geometry.components.length; ++i) {
comp = geometry.components[i];
originals[i] = comp.resize;
comp.resize = function(s, o) {
t.ok(true, "resize called for component " + i);
t.ok(s == scale, "resize called with correct scale");
t.ok(o == origin, "resize called with correct origin");
}
}
geometry.resize(scale, origin);
// restore the original resize defs
for(var i=0; i<geometry.components.length; ++i) {
comp.resize = originals[i];
}
}
function test_Polygon_createRegular(t) {
t.plan(22);
var sides = 40;
var poly = OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(5,0), 6, sides);
var polyBounds = poly.getBounds();
t.eq(polyBounds.toBBOX(), "-0.981504,-5.981504,10.981504,5.981504", sides + " sided figure generates correct bbox.");
t.eq(poly.components.length, 1, "Poly has one linear ring");
t.eq(poly.components[0].components.length, sides + 1, "ring has 41 components");
t.eq(poly.components[0].components[0].id, poly.components[0].components[sides].id, "ring starts and ends with same geom");
t.eq(Math.round(poly.getArea()), Math.round(Math.PI * 36), "area of "+sides+" sided poly rounds to same area as a circle.");
var sides = 3;
var poly = OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(5,0), 6, sides);
var polyBounds = poly.getBounds();
t.eq(polyBounds.toBBOX(), "-0.196152,-3,10.196152,6", sides + " sided figure generates correct bbox.");
t.eq(poly.components.length, 1, "Poly has one linear ring");
t.eq(poly.components[0].components.length, sides + 1, "ring has correct count of components");
t.eq(poly.components[0].components[0].id, poly.components[0].components[sides].id, "ring starts and ends with same geom");
t.eq(Math.round(poly.getArea()), 47, "area of 3 sided poly is correct");
var sides = 3;
var poly3 = OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(10,0), 15, sides);
var polyBounds = poly3.getBounds();
t.eq(polyBounds.toBBOX(), "-2.990381,-7.5,22.990381,15", sides + " sided figure generates correct bbox.");
t.eq(Math.round(polyBounds.getCenterLonLat().lon), 10, "longitude of center of bounds is same as origin");
t.eq(poly3.components.length, 1, "Poly has one linear ring");
t.eq(poly3.components[0].components.length, sides + 1, "ring has correct count of components");
t.eq(poly3.components[0].components[0].id, poly3.components[0].components[sides].id, "ring starts and ends with same geom");
t.ok(poly3.getArea() > poly.getArea(), "area with radius 15 > poly with radius 6");
var sides = 4;
var poly4 = OpenLayers.Geometry.Polygon.createRegularPolygon(new OpenLayers.Geometry.Point(10,0), 15, sides);
var polyBounds = poly4.getBounds();
t.eq(polyBounds.toBBOX(), "-0.606602,-10.606602,20.606602,10.606602", sides + " sided figure generates correct bbox.");
t.eq(Math.round(polyBounds.getCenterLonLat().lon), 10, "longitude of center of bounds is same as origin");
t.eq(poly4.components.length, 1, "Poly has one linear ring");
t.eq(poly4.components[0].components.length, sides + 1, "ring has correct count of components");
t.eq(poly4.components[0].components[0].id, poly4.components[0].components[sides].id, "ring starts and ends with same geom");
t.ok(poly4.getArea() > poly3.getArea(), "square with radius 15 > triangle with radius 15");
}
function test_Polygon_equals(t) {
t.plan(3);
var x0 = Math.random() * 100;
var y0 = Math.random() * 100;
var x1 = Math.random() * 100;
var y1 = Math.random() * 100;
var x2 = Math.random() * 100;
var y2 = Math.random() * 100;
var point0 = new OpenLayers.Geometry.Point(x0, y0);
var point1 = new OpenLayers.Geometry.Point(x1, y1);
var point2 = new OpenLayers.Geometry.Point(x2, y2);
var pointX = new OpenLayers.Geometry.Point(x0 + 1, y0);
var pointY = new OpenLayers.Geometry.Point(x0, y0 + 1);
var geometry = new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([point0, point1, point2])]);
var equal = new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([point0, point1, point2])]);
var offX = new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([pointX, point1, point2])]);
var offY = new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([pointY, point1, point2])]);
t.ok(geometry.equals(equal),
"equals() returns true for a geometry with equivalent coordinates");
t.ok(!geometry.equals(offX),
"equals() returns false for a geometry with offset x");
t.ok(!geometry.equals(offY),
"equals() returns false for a geometry with offset y");
}
function test_distanceTo(t) {
var wkt = OpenLayers.Geometry.fromWKT;
var geoms = [
wkt("POLYGON((0 3, 1 4, 2 3, 1 2, 0 3))"),
wkt("POINT(0 0)"),
wkt("LINESTRING(-2 0, 0 -2, 2 -1, 2 0)"),
wkt("LINESTRING(0 2, 1 3)"),
wkt("POINT(1 3)")
];
var cases = [{
got: geoms[0].distanceTo(geoms[1]),
expected: Math.sqrt(5)
}, {
got: geoms[0].distanceTo(geoms[1], {details: true}),
expected: {
distance: Math.sqrt(5),
x0: 1, y0: 2,
x1: 0, y1: 0
}
}, {
got: geoms[0].distanceTo(geoms[2], {details: true}),
expected: {
distance: Math.sqrt(5),
x0: 1, y0: 2,
x1: 2, y1: 0
}
}, {
got: geoms[0].distanceTo(geoms[3], {details: true}),
expected: {
distance: 0,
x0: 0.5, y0: 2.5,
x1: 0.5, y1: 2.5
}
}, {
got: geoms[0].distanceTo(geoms[4]),
expected: Math.sqrt(0.5)
}, {
got: geoms[0].distanceTo(geoms[4], {edge: false}),
expected: 0
}];
t.plan(cases.length);
for(var i=0; i<cases.length; ++i) {
t.eq(cases[i].got, cases[i].expected, "case " + i);
}
}
function test_getVertices(t) {
t.plan(6);
var points = [
new OpenLayers.Geometry.Point(10, 20),
new OpenLayers.Geometry.Point(20, 30),
new OpenLayers.Geometry.Point(30, 40),
new OpenLayers.Geometry.Point(40, 50)
];
var polygon = new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing(points)
]);
var verts = polygon.getVertices();
t.ok(verts instanceof Array, "got back an array");
t.eq(verts.length, points.length, "of correct length length");
t.geom_eq(verts[0], points[0], "0: correct geometry");
t.geom_eq(verts[1], points[1], "1: correct geometry");
t.geom_eq(verts[2], points[2], "2: correct geometry");
t.geom_eq(verts[3], points[3], "3: correct geometry");
}
function test_Polygon_clone(t) {
t.plan(2);
var x0 = Math.random() * 100;
var y0 = Math.random() * 100;
var x1 = Math.random() * 100;
var y1 = Math.random() * 100;
var x2 = Math.random() * 100;
var y2 = Math.random() * 100;
var point0 = new OpenLayers.Geometry.Point(x0, y0);
var point1 = new OpenLayers.Geometry.Point(x1, y1);
var point2 = new OpenLayers.Geometry.Point(x2, y2);
var geometry = new OpenLayers.Geometry.Polygon([
new OpenLayers.Geometry.LinearRing([point0, point1, point2])]);
var clone = geometry.clone();
t.ok(clone instanceof OpenLayers.Geometry.Polygon,
"clone() creates an OpenLayers.Geometry.Polygon");
t.ok(geometry.equals(clone), "clone has equivalent coordinates");
}
function test_getGeodesicArea(t) {
t.plan(1);
// from the wfs-states.html example
var illinois = OpenLayers.Geometry.fromWKT(
"MULTIPOLYGON(((-88.071564 37.51099,-88.087883 37.476273,-88.311707 37.442852,-88.359177 37.409309,-88.419853 37.420292,-88.467644 37.400757,-88.511322 37.296852,-88.501427 37.257782,-88.450699 37.205669,-88.422516 37.15691,-88.45047 37.098671,-88.476799 37.072144,-88.4907 37.06818,-88.517273 37.06477,-88.559273 37.072815,-88.61422 37.109047,-88.68837 37.13541,-88.739113 37.141182,-88.746506 37.152107,-88.863289 37.202194,-88.932503 37.218407,-88.993172 37.220036,-89.065033 37.18586,-89.116821 37.112137,-89.146347 37.093185,-89.169548 37.064236,-89.174332 37.025711,-89.150246 36.99844,-89.12986 36.988113,-89.193512 36.986771,-89.210052 37.028973,-89.237679 37.041733,-89.264053 37.087124,-89.284233 37.091244,-89.303291 37.085384,-89.3097 37.060909,-89.264244 37.027733,-89.262001 37.008686,-89.282768 36.999207,-89.310982 37.009682,-89.38295 37.049213,-89.37999 37.099083,-89.423798 37.137203,-89.440521 37.165318,-89.468216 37.224266,-89.465309 37.253731,-89.489594 37.256001,-89.513885 37.276402,-89.513885 37.304962,-89.50058 37.329441,-89.468742 37.339409,-89.435738 37.355717,-89.427574 37.411018,-89.453621 37.453186,-89.494781 37.491726,-89.524971 37.571957,-89.513367 37.615929,-89.51918 37.650375,-89.513374 37.67984,-89.521523 37.694798,-89.581436 37.706104,-89.666458 37.745453,-89.675858 37.78397,-89.691055 37.804794,-89.728447 37.840992,-89.851715 37.905064,-89.861046 37.905487,-89.866814 37.891876,-89.900551 37.875904,-89.937874 37.878044,-89.978912 37.911884,-89.958229 37.963634,-90.010811 37.969318,-90.041924 37.993206,-90.119339 38.032272,-90.134712 38.053951,-90.207527 38.088905,-90.254059 38.122169,-90.289635 38.166817,-90.336716 38.188713,-90.364769 38.234299,-90.369347 38.323559,-90.358688 38.36533,-90.339607 38.390846,-90.301842 38.427357,-90.265785 38.518688,-90.26123 38.532768,-90.240944 38.562805,-90.183708 38.610271,-90.183578 38.658772,-90.20224 38.700363,-90.196571 38.723965,-90.163399 38.773098,-90.135178 38.785484,-90.121727 38.80051,-90.113121 38.830467,-90.132812 38.853031,-90.243927 38.914509,-90.278931 38.924717,-90.31974 38.924908,-90.413071 38.96233,-90.469841 38.959179,-90.530426 38.891609,-90.570328 38.871326,-90.627213 38.880795,-90.668877 38.935253,-90.70607 39.037792,-90.707588 39.058178,-90.690399 39.0937,-90.716736 39.144211,-90.718193 39.195873,-90.732338 39.224747,-90.738083 39.24781,-90.779343 39.296803,-90.850494 39.350452,-90.947891 39.400585,-91.036339 39.444412,-91.064384 39.473984,-91.093613 39.528927,-91.156189 39.552593,-91.203247 39.600021,-91.317665 39.685917,-91.367088 39.72464,-91.373421 39.761272,-91.381714 39.803772,-91.449188 39.863049,-91.450989 39.885242,-91.434052 39.901829,-91.430389 39.921837,-91.447243 39.946064,-91.487289 40.005753,-91.504005 40.066711,-91.516129 40.134544,-91.506546 40.200459,-91.498932 40.251377,-91.486694 40.309624,-91.448593 40.371902,-91.418816 40.386875,-91.385757 40.392361,-91.372757 40.402988,-91.385399 40.44725,-91.374794 40.503654,-91.382103 40.528496,-91.412872 40.547993,-91.411118 40.572971,-91.37561 40.603439,-91.262062 40.639545,-91.214912 40.643818,-91.162498 40.656311,-91.129158 40.682148,-91.119987 40.705402,-91.092751 40.761547,-91.088905 40.833729,-91.04921 40.879585,-90.983276 40.923927,-90.960709 40.950504,-90.954651 41.070362,-90.957787 41.104359,-90.990341 41.144371,-91.018257 41.165825,-91.05632 41.176258,-91.101524 41.231522,-91.102348 41.267818,-91.07328 41.334896,-91.055786 41.401379,-91.027489 41.423508,-91.000694 41.431084,-90.949654 41.421234,-90.844139 41.444622,-90.7799 41.449821,-90.708214 41.450062,-90.658791 41.462318,-90.6007 41.509586,-90.54084 41.52597,-90.454994 41.527546,-90.434967 41.543579,-90.423004 41.567272,-90.348366 41.586849,-90.339348 41.602798,-90.341133 41.64909,-90.326027 41.722736,-90.304886 41.756466,-90.25531 41.781738,-90.195839 41.806137,-90.154518 41.930775,-90.14267 41.983963,-90.150536 42.033428,-90.168098 42.061043,-90.166649 42.103745,-90.176086 42.120502,-90.191574 42.122688,-90.230934 42.159721,-90.323601 42.197319,-90.367729 42.210209,-90.407173 42.242645,-90.417984 42.263924,-90.427681 42.340633,-90.441597 42.360073,-90.491043 42.388783,-90.563583 42.421837,-90.605827 42.46056,-90.648346 42.475643,-90.651772 42.494698,-90.638329 42.509361,-90.419975 42.508362,-89.923569 42.504108,-89.834618 42.50346,-89.400497 42.49749,-89.359444 42.497906,-88.939079 42.490864,-88.764954 42.490906,-88.70652 42.489655,-88.297897 42.49197,-88.194702 42.489613,-87.79731 42.489132,-87.836945 42.314213,-87.760239 42.156456,-87.670547 42.059822,-87.612625 41.847332,-87.529861 41.723591,-87.532646 41.469715,-87.532448 41.301304,-87.531731 41.173756,-87.532021 41.00993,-87.532669 40.745411,-87.53717 40.49461,-87.535675 40.483246,-87.535339 40.166195,-87.535774 39.887302,-87.535576 39.609341,-87.538567 39.477448,-87.540215 39.350525,-87.597664 39.338268,-87.625237 39.307404,-87.610619 39.297661,-87.615799 39.281418,-87.606895 39.258163,-87.584564 39.248753,-87.588593 39.208466,-87.594208 39.198128,-87.607925 39.196068,-87.644257 39.168507,-87.670326 39.146679,-87.659454 39.130653,-87.662262 39.113468,-87.631668 39.103943,-87.630867 39.088974,-87.612007 39.084606,-87.58532 39.062435,-87.581749 38.995743,-87.591858 38.994083,-87.547905 38.977077,-87.53347 38.963703,-87.530182 38.931919,-87.5392 38.904861,-87.559059 38.869812,-87.550507 38.857891,-87.507889 38.795559,-87.519028 38.776699,-87.508003 38.769722,-87.508316 38.736633,-87.543892 38.685974,-87.588478 38.672169,-87.625191 38.642811,-87.628647 38.622917,-87.619827 38.599209,-87.640594 38.593178,-87.652855 38.573872,-87.672943 38.547424,-87.65139 38.515369,-87.653534 38.500443,-87.679909 38.504005,-87.692818 38.481533,-87.756096 38.466125,-87.758659 38.457096,-87.738953 38.44548,-87.748428 38.417965,-87.784019 38.378124,-87.834503 38.352524,-87.850082 38.286098,-87.863007 38.285362,-87.874039 38.316788,-87.883446 38.315552,-87.888466 38.300659,-87.914108 38.281048,-87.913651 38.302345,-87.925919 38.304771,-87.980019 38.241085,-87.986008 38.234814,-87.977928 38.200714,-87.932289 38.171131,-87.931992 38.157528,-87.950569 38.136913,-87.973503 38.13176,-88.018547 38.103302,-88.012329 38.092346,-87.964867 38.096748,-87.975296 38.073307,-88.034729 38.054085,-88.043091 38.04512,-88.041473 38.038303,-88.021698 38.033531,-88.029213 38.008236,-88.021706 37.975056,-88.042511 37.956264,-88.041771 37.934498,-88.064621 37.929783,-88.078941 37.944,-88.084 37.92366,-88.030441 37.917591,-88.026588 37.905758,-88.044868 37.896004,-88.100082 37.90617,-88.101456 37.895306,-88.075737 37.867809,-88.034241 37.843746,-88.042137 37.827522,-88.089264 37.831249,-88.086029 37.817612,-88.035576 37.805683,-88.072472 37.735401,-88.133636 37.700745,-88.15937 37.660686,-88.157631 37.628479,-88.134171 37.583572,-88.071564 37.51099)))"
);
// two calculations of the area (in square meters)
var planar = illinois.getArea() * Math.pow(OpenLayers.INCHES_PER_UNIT['dd'] / OpenLayers.INCHES_PER_UNIT['m'], 2);
var geodesic = illinois.getGeodesicArea();
// from http://en.wikipedia.org/wiki/Illinois
var expected = 1.40998e11; // square meters
var planarErr = Math.abs(planar - expected) / expected;
var geodesicErr = Math.abs(geodesic - expected) / expected;
t.ok(geodesicErr < planarErr, "geodesic measure is better (" + geodesicErr.toFixed(3) + " vs. " + planarErr.toFixed(3) + ")");
}
function test_getCentroid(t) {
t.plan(5);
var bounds = new OpenLayers.Bounds(5, 10, 5, 10);
var geometry = bounds.toGeometry();
var centroid = geometry.getCentroid();
t.eq(geometry.components[0].components.length, 2, "only two vertices since the box has left=right and bottom=top");
t.ok(centroid && centroid.x === 5 && centroid.y === 10, "getCentroid returns a point geometry even if the ring of the polygon has only 2 vertices");
bounds = new OpenLayers.Bounds(123456789.0, 123456789.0, 123456789.1, 123456789.1);
geometry = bounds.toGeometry();
centroid = geometry.getCentroid();
t.eq(geometry.components[0].components.length, 5, "five vertices expected");
var dX = Math.abs(centroid.x - 123456789.05);
var dY = Math.abs(centroid.y - 123456789.05);
t.ok(centroid && dX < 0.0001 && dY < 0.0001, " getCentroid returns the correct point geometry dX = " + dX + ", dY = " + dY);
var components = [
new OpenLayers.Geometry.Point(0,0), new OpenLayers.Geometry.Point(1,1),
new OpenLayers.Geometry.Point(0,1), new OpenLayers.Geometry.Point(1,0)];
var linearRing = new OpenLayers.Geometry.LinearRing(components);
polygon = new OpenLayers.Geometry.Polygon([linearRing.clone()]);
centroid = polygon.getCentroid();
var tX = centroid.x;
var tY = centroid.y;
t.ok( !isNaN(tX) && !isNaN(tY) && tX !== Infinity && tY !== Infinity, " getCentroid for wrong polygon works x = " + tX + ", y = " + tY);
}
</script>
</head>
<body>
</body>
</html>
|