Changeset 30284 in osm for applications/editors/josm/plugins/smed2/src/s57/S57map.java
- Timestamp:
- 2014-02-16T11:17:53+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/smed2/src/s57/S57map.java
r30283 r30284 20 20 21 21 public class S57map { 22 23 public class MapBounds { 24 public double minlat; 25 public double minlon; 26 public double maxlat; 27 public double maxlon; 28 public MapBounds() { 29 minlat = 90; 30 minlon = 180; 31 maxlat = -90; 32 maxlon = -180; 33 } 34 } 22 35 23 36 public enum Nflag { … … 526 539 // Utility methods 527 540 541 public void sortGeom() { 542 for (long id : index.keySet()) { 543 feature = index.get(id); 544 Geom sort = new Geom(feature.geom.prim); 545 long first = 0; 546 long last = 0; 547 Comp comp = null; 548 boolean next = true; 549 if ((feature.geom.prim == Pflag.LINE) || (feature.geom.prim == Pflag.AREA)) { 550 int sweep = feature.geom.elems.size(); 551 while (!feature.geom.elems.isEmpty()) { 552 Prim prim = feature.geom.elems.remove(0); 553 Edge edge = edges.get(prim.id); 554 if (next == true) { 555 next = false; 556 if (prim.forward) { 557 first = edge.first; 558 last = edge.last; 559 } else { 560 first = edge.last; 561 last = edge.first; 562 } 563 sort.elems.add(prim); 564 if (prim.outer) { 565 sort.outers++; 566 } else { 567 sort.inners++; 568 } 569 comp = new Comp(ref++, 1); 570 sort.refs.add(comp); 571 } else { 572 if (prim.forward) { 573 if (edge.first == last) { 574 sort.elems.add(prim); 575 last = edge.last; 576 comp.size++; 577 } else if (edge.last == first) { 578 sort.elems.add(0, prim); 579 first = edge.first; 580 comp.size++; 581 } else { 582 feature.geom.elems.add(prim); 583 } 584 } else { 585 if (edge.last == last) { 586 sort.elems.add(prim); 587 last = edge.first; 588 comp.size++; 589 } else if (edge.first == first) { 590 sort.elems.add(0, prim); 591 first = edge.last; 592 comp.size++; 593 } else { 594 feature.geom.elems.add(prim); 595 } 596 } 597 } 598 if (--sweep == 0) { 599 next = true; 600 sweep = feature.geom.elems.size(); 601 } 602 } 603 if ((sort.prim == Pflag.LINE) && (sort.outers == 1) && (sort.inners == 0) && (first == last)) { 604 sort.prim = Pflag.AREA; 605 } 606 feature.geom = sort; 607 } 608 if (feature.geom.prim == Pflag.AREA) { 609 ArrayList<Prim> outers = new ArrayList<Prim>(); 610 ArrayList<Prim> inners = new ArrayList<Prim>(); 611 for (Prim prim : feature.geom.elems) { 612 if (prim.outer) { 613 outers.add(prim); 614 } else { 615 inners.add(prim); 616 } 617 } 618 ArrayList<Prim> sorting = outers; 619 ArrayList<Prim> closed = null; 620 sort = new Geom(feature.geom.prim); 621 sort.outers = feature.geom.outers; 622 sort.inners = feature.geom.inners; 623 sort.refs = feature.geom.refs; 624 next = true; 625 while (!sorting.isEmpty()) { 626 Prim prim = sorting.remove(0); 627 Edge edge = edges.get(prim.id); 628 if (next == true) { 629 next = false; 630 closed = new ArrayList<Prim>(); 631 closed.add(prim); 632 if (prim.forward) { 633 first = edge.first; 634 last = edge.last; 635 } else { 636 first = edge.last; 637 last = edge.first; 638 } 639 } else { 640 if (prim.forward) { 641 if (edge.first == last) { 642 last = edge.last; 643 closed.add(prim); 644 } else { 645 sorting.add(0, prim); 646 next = true; 647 } 648 } else { 649 if (edge.last == last) { 650 last = edge.first; 651 closed.add(prim); 652 } else { 653 sorting.add(0, prim); 654 next = true; 655 } 656 } 657 } 658 if (first == last) { 659 sort.elems.addAll(closed); 660 next = true; 661 } 662 if (sorting.isEmpty() && sorting == outers) { 663 sorting = inners; 664 next = true; 665 } 666 } 667 feature.geom = sort; 668 } 669 } 670 } 671 528 672 public boolean cmpGeoms (Geom g1, Geom g2) { 529 673 return ((g1.prim == g2.prim) && (g1.outers == g2.outers) && (g1.inners == g2.inners) && (g1.elems.size() == g2.elems.size()));
Note:
See TracChangeset
for help on using the changeset viewer.