Changeset 30284 in osm for applications/editors/josm/plugins/smed2/src/s57
- Timestamp:
- 2014-02-16T11:17:53+01:00 (11 years ago)
- Location:
- applications/editors/josm/plugins/smed2/src/s57
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/smed2/src/s57/S57dat.java
r30280 r30284 134 134 } 135 135 136 private static final EnumMap<S57field, String> FldStr = new EnumMap<S57field, String>(S57field.class); 137 static { 138 FldStr.put(S57field.I8RI, "0001"); 139 FldStr.put(S57field.DSID, "DSID"); FldStr.put(S57field.DSSI, "DSSI"); FldStr.put(S57field.DSPM, "DSPM"); FldStr.put(S57field.DSPR, "DSPR"); 140 FldStr.put(S57field.DSRC, "DSRC"); FldStr.put(S57field.DSHT, "DSHT"); FldStr.put(S57field.DSAC, "DSAC"); FldStr.put(S57field.CATD, "CATD"); 141 FldStr.put(S57field.CATX, "CATX"); FldStr.put(S57field.DDDF, "DDDF"); FldStr.put(S57field.DDDR, "DDDR"); FldStr.put(S57field.DDDI, "DDDI"); 142 FldStr.put(S57field.DDOM, "DDOM"); FldStr.put(S57field.DDRF, "DDRF"); FldStr.put(S57field.DDSI, "DDSI"); FldStr.put(S57field.DDSC, "DDSC"); 143 FldStr.put(S57field.FRID, "FRID"); FldStr.put(S57field.FOID, "FOID"); FldStr.put(S57field.ATTF, "ATTF"); FldStr.put(S57field.NATF, "NATF"); 144 FldStr.put(S57field.FFPC, "FFPC"); FldStr.put(S57field.FFPT, "FFPT"); FldStr.put(S57field.FFPC, "FFPC"); FldStr.put(S57field.FSPT, "FSPT"); 145 FldStr.put(S57field.VRID, "VRID"); FldStr.put(S57field.ATTV, "ATTV"); FldStr.put(S57field.VRPC, "VRPC"); FldStr.put(S57field.VRPT, "VRPT"); 146 FldStr.put(S57field.SGCC, "SGCC"); FldStr.put(S57field.SG2D, "SG2D"); FldStr.put(S57field.SG3D, "SG3D"); FldStr.put(S57field.ARCC, "ARCC"); 147 FldStr.put(S57field.AR2D, "AR2D"); FldStr.put(S57field.EL2D, "EL2D"); FldStr.put(S57field.CT2D, "CT2D"); 148 } 149 150 public static String stringField (S57field field) { 151 return FldStr.get(field); 152 } 153 154 public static S57field enumField (String field) { 155 for (S57field fld : FldStr.keySet()) { 156 if (FldStr.get(fld).equals(field)) 157 return fld; 158 } 159 return null; 160 } 161 136 162 private static byte[] buffer; 137 163 private static int offset; -
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.