Changeset 15035 in josm for trunk/test
- Timestamp:
- 2019-05-02T06:55:14+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/unit/org/openstreetmap/josm/tools/GeometryTest.java
r15034 r15035 10 10 import java.nio.file.Files; 11 11 import java.nio.file.Paths; 12 import java.util.ArrayList; 12 13 import java.util.Arrays; 13 14 import java.util.List; … … 21 22 import org.openstreetmap.josm.data.osm.DataSet; 22 23 import org.openstreetmap.josm.data.osm.Node; 24 import org.openstreetmap.josm.data.osm.OsmPrimitive; 23 25 import org.openstreetmap.josm.data.osm.Relation; 24 26 import org.openstreetmap.josm.data.osm.RelationMember; … … 261 263 assertTrue(Geometry.isPolygonInsideMultiPolygon(w1.getNodes(), mp, null)); 262 264 } 265 266 /** 267 * Test of {@link Geometry#getDistance} method. 268 */ 269 @Test 270 public void testGetDistance() { 271 Node node1 = new Node(new LatLon(0, 0)); 272 Node node2 = new Node(new LatLon(0.1, 1)); 273 Node node3 = new Node(new LatLon(1.1, 0.1)); 274 Node node4 = new Node(new LatLon(1, 1.1)); 275 Way way1 = TestUtils.newWay("", node1, node2); 276 Way way2 = TestUtils.newWay("", node3, node4); 277 Relation testRelation1 = new Relation(); 278 Relation testRelation2 = new Relation(); 279 testRelation1.addMember(new RelationMember("", way1)); 280 testRelation1.addMember(new RelationMember("", way2)); 281 testRelation2.addMember(new RelationMember("", node1)); 282 testRelation2.addMember(new RelationMember("", node2)); 283 testRelation2.addMember(new RelationMember("", node3)); 284 testRelation2.addMember(new RelationMember("", node4)); 285 286 double distance = Geometry.getDistance(null, node3); 287 assertEquals(Double.NaN, distance, 0.1); 288 289 distance = Geometry.getDistance(way1, null); 290 assertEquals(Double.NaN, distance, 0.1); 291 292 distance = Geometry.getDistance(null, null); 293 assertEquals(Double.NaN, distance, 0.1); 294 295 distance = Geometry.getDistance(node1, node2); 296 assertEquals(111874.6474307704, distance, 0.1); 297 298 distance = Geometry.getDistance(way1, node3); 299 assertEquals(120743.55085962385, distance, 0.1); 300 301 distance = Geometry.getDistance(node3, way1); 302 assertEquals(120743.55085962385, distance, 0.1); 303 304 distance = Geometry.getDistance(way1, way2); 305 assertEquals(100803.63714283936, distance, 0.1); 306 307 distance = Geometry.getDistance(testRelation1, new Node(new LatLon(0, 0.5))); 308 assertEquals(5538.354450686605, distance, 0.1); 309 310 distance = Geometry.getDistance(new Node(new LatLon(0, 0.5)), testRelation1); 311 assertEquals(5538.354450686605, distance, 0.1); 312 313 distance = Geometry.getDistance(testRelation1, testRelation2); 314 assertEquals(0.0, distance, 0.1); 315 } 316 317 /** 318 * Test of {@link Geometry#getClosestPrimitive} method 319 */ 320 @Test 321 public void testGetClosestPrimitive() { 322 Node node1 = new Node(new LatLon(0, 0)); 323 Node node2 = new Node(new LatLon(0.1, 1)); 324 Node node3 = new Node(new LatLon(1.1, 0.1)); 325 Node node4 = new Node(new LatLon(1, 1.1)); 326 Way way1 = TestUtils.newWay("", node1, node2); 327 Way way2 = TestUtils.newWay("", node3, node4); 328 329 List<OsmPrimitive> primitives = new ArrayList<>(); 330 primitives.add(way1); 331 primitives.add(way2); 332 OsmPrimitive closest = Geometry.getClosestPrimitive(node1, primitives); 333 assertEquals(way1, closest); 334 } 335 336 /** 337 * Test of {@link Geometry#getFurthestPrimitive} method 338 */ 339 @Test 340 public void testGetFurthestPrimitive() { 341 Node node1 = new Node(new LatLon(0, 0)); 342 Node node2 = new Node(new LatLon(0, 1.1)); 343 Node node3 = new Node(new LatLon(1, 0.1)); 344 Node node4 = new Node(new LatLon(1.1, 1)); 345 Way way1 = TestUtils.newWay("", node1, node2); 346 Way way2 = TestUtils.newWay("", node3, node4); 347 Way way3 = TestUtils.newWay("", node2, node4); 348 Way way4 = TestUtils.newWay("", node1, node3); 349 350 List<OsmPrimitive> primitives = new ArrayList<>(); 351 primitives.add(way1); 352 OsmPrimitive furthest = Geometry.getFurthestPrimitive(new Node(new LatLon(0, 0.75)), primitives); 353 assertEquals(way1, furthest); 354 primitives.add(way2); 355 primitives.add(way3); 356 primitives.add(way4); 357 furthest = Geometry.getFurthestPrimitive(new Node(new LatLon(0, 0.5)), primitives); 358 assertEquals(way2, furthest); 359 furthest = Geometry.getFurthestPrimitive(new Node(new LatLon(.25, 0.5)), primitives); 360 assertEquals(way2, furthest); 361 } 362 363 /** 364 * Test of {@link Geometry#getClosestWaySegment} method 365 */ 366 @Test 367 public void testGetClosestWaySegment() { 368 Node node1 = new Node(new LatLon(0, 0)); 369 Node node2 = new Node(new LatLon(0, 1)); 370 Node node3 = new Node(new LatLon(0.3, 0.5)); 371 Node node4 = new Node(new LatLon(0.1, 0)); 372 Way way1 = TestUtils.newWay("", node1, node2, node3, node4); 373 374 Way closestSegment = Geometry.getClosestWaySegment(way1, new Node(new LatLon(0, 0.5))).toWay(); 375 Assert.assertTrue(closestSegment.containsNode(node1)); 376 Assert.assertTrue(closestSegment.containsNode(node2)); 377 } 378 379 /** 380 * Test of {@link Geometry#getDistanceSegmentSegment} method 381 */ 382 @Test 383 public void testGetDistanceSegmentSegment() { 384 Node node1 = new Node(new LatLon(2.0, 2.0)); 385 Node node2 = new Node(new LatLon(2.0, 3.0)); 386 Node node3 = new Node(new LatLon(2.3, 2.5)); 387 Node node4 = new Node(new LatLon(2.1, 2.0)); 388 389 // connected segments 390 assertEquals(0.0, Geometry.getDistanceSegmentSegment(node1, node2, node3, node1), 0.000001); 391 392 // distance between node 1 and node4 is the shortest 393 double expected = node1.getEastNorth().distance(node4.getEastNorth()); 394 assertEquals(expected, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.000001); 395 396 // crossing segments 397 node4.setCoor(new LatLon(1.9998192774806864, 2.0004056993230455)); 398 assertEquals(0, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.000001); 399 400 // usual case 401 node4.setCoor(new LatLon(2.0002098170882276, 2.0000778643530537)); 402 assertEquals(23.4, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 1.0); 403 404 // similar segments, reversed direction 405 node3.setCoor(node2.getCoor()); 406 node4.setCoor(node1.getCoor()); 407 assertEquals(0.0, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.000001); 408 409 // overlapping segments 410 node3.setCoor(new LatLon(2.0, 2.2)); 411 node4.setCoor(new LatLon(2.0, 2.3)); 412 assertEquals(0.0, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.000001); 413 414 // parallel segments, n1 and n3 at same longitude 415 node3.setCoor(new LatLon(2.1, 2.0)); 416 node4.setCoor(new LatLon(2.1, 2.3)); 417 expected = node1.getEastNorth().distance(node3.getEastNorth()); 418 assertEquals(expected, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.000001); 419 420 // parallel segments 421 node3.setCoor(new LatLon(2.1, 2.1)); 422 assertEquals(expected, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.000001); 423 424 // almost parallel segments 425 node3.setCoor(new LatLon(2.09999999, 2.1)); 426 assertEquals(expected, Geometry.getDistanceSegmentSegment(node1, node2, node3, node4), 0.01); 427 assertTrue(expected > Geometry.getDistanceSegmentSegment(node1, node2, node3, node4)); 428 } 429 263 430 }
Note:
See TracChangeset
for help on using the changeset viewer.