Changeset 32082 in osm for applications/editors/josm/plugins/seachart/src/s57/S57map.java
- Timestamp:
- 2016-02-27T09:09:45+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/seachart/src/s57/S57map.java
r31955 r32082 234 234 private Feature feature; 235 235 private Edge edge; 236 private KeyVal<?> osm = S57osm.OSMtag("", "");236 private ArrayList<KeyVal<?>> osm; 237 237 private boolean sea; 238 238 … … 375 375 feature.geom.elems.add(new Prim(id)); 376 376 edge = null; 377 osm = S57osm.OSMtag("", "");377 osm = new ArrayList<>(); 378 378 } 379 379 … … 385 385 feature.geom.elems.add(new Prim(id)); 386 386 edge = new Edge(); 387 osm = S57osm.OSMtag("", "");387 osm = new ArrayList<>(); 388 388 } 389 389 … … 406 406 feature.geom.prim = Pflag.AREA; 407 407 edge = null; 408 osm = S57osm.OSMtag("", "");408 osm = new ArrayList<>(); 409 409 } 410 410 … … 475 475 } 476 476 } else if (!sea) { 477 KeyVal<?> kv = S57osm.OSMtag(key, val); 478 if (kv.obj != Obj.UNKOBJ) { 479 osm.obj = kv.obj; 480 if (kv.att != Att.UNKATT) { 481 osm = kv; 482 } 483 } 477 S57osm.OSMtag(osm, key, val); 484 478 } 485 479 } … … 489 483 case POINT: 490 484 Snode node = nodes.get(id); 491 if ((node.flg != Nflag.CONN) && (node.flg != Nflag.DPTH) && (!feature.objs.isEmpty() || (osm.obj != Obj.UNKOBJ))) {485 if ((node.flg != Nflag.CONN) && (node.flg != Nflag.DPTH) && (!feature.objs.isEmpty() || !osm.isEmpty())) { 492 486 node.flg = Nflag.ISOL; 493 487 } … … 507 501 } 508 502 if (sortGeom(feature) && !((edge != null) && (edge.last == 0))) { 509 if (osm.obj != Obj.UNKOBJ) { 503 if (feature.type != Obj.UNKOBJ) { 504 index.put(id, feature); 505 if (features.get(feature.type) == null) { 506 features.put(feature.type, new ArrayList<Feature>()); 507 } 508 features.get(feature.type).add(feature); 509 } 510 for (KeyVal<?> kvx : osm) { 511 Feature base = new Feature(); 512 base.reln = Rflag.MASTER; 513 base.geom = feature.geom; 514 base.type = kvx.obj; 515 ObjTab objs = new ObjTab(); 516 base.objs.put(kvx.obj, objs); 517 AttMap atts = new AttMap(); 518 objs.put(0, atts); 519 if (kvx.att != Att.UNKATT) { 520 atts.put(kvx.att, new AttVal<>(kvx.conv, kvx.val)); 521 } 522 index.put(++xref, base); 523 if (features.get(kvx.obj) == null) { 524 features.put(kvx.obj, new ArrayList<Feature>()); 525 } 526 features.get(kvx.obj).add(base); 527 } 528 /* if (!osm.isEmpty()) { 510 529 if (feature.type == Obj.UNKOBJ) { 511 530 feature.type = osm.obj; … … 541 560 features.get(osm.obj).add(base); 542 561 } 543 } 544 if (feature.type != Obj.UNKOBJ) { 545 index.put(id, feature); 546 if (features.get(feature.type) == null) { 547 features.put(feature.type, new ArrayList<Feature>()); 548 } 549 features.get(feature.type).add(feature); 550 } 562 }*/ 551 563 } 552 564 } … … 575 587 feature.geom.centre = nodes.get(feature.geom.elems.get(0).id); 576 588 return true; 577 } else { 578 int sweep = feature.geom.elems.size(); 579 while (!feature.geom.elems.isEmpty()) { 580 Prim prim = feature.geom.elems.remove(0); 581 Edge edge = edges.get(prim.id); 582 if (edge == null) { 583 return false; 584 } 585 if (next == true) { 586 next = false; 587 first = edge.first; 589 } 590 Geom outer = new Geom(feature.geom.prim); 591 Geom inner = new Geom(feature.geom.prim); 592 for (Prim prim : feature.geom.elems) { 593 if (prim.outer) { 594 outer.elems.add(prim); 595 } else { 596 inner.elems.add(prim); 597 } 598 } 599 boolean outin = true; 600 int sweep = outer.elems.size(); 601 if (sweep == 0) { 602 return false; 603 } 604 int prev = sweep; 605 int top = 0; 606 while (!outer.elems.isEmpty()) { 607 Prim prim = outer.elems.remove(0); 608 Edge edge = edges.get(prim.id); 609 if (edge == null) { 610 return false; 611 } 612 if (next == true) { 613 next = false; 614 first = edge.first; 615 last = edge.last; 616 prim.forward = true; 617 sort.elems.add(prim); 618 if (prim.outer) { 619 sort.outers++; 620 } else { 621 sort.inners++; 622 } 623 comp = new Comp(cref++, 1); 624 sort.comps.add(comp); 625 } else { 626 if (edge.first == last) { 627 sort.elems.add(prim); 588 628 last = edge.last; 589 629 prim.forward = true; 630 comp.size++; 631 } else if (edge.last == first) { 632 sort.elems.add(top, prim); 633 first = edge.first; 634 prim.forward = true; 635 comp.size++; 636 } else if (edge.last == last) { 590 637 sort.elems.add(prim); 591 if (prim.outer) { 592 sort.outers++; 593 } else { 594 sort.inners++; 638 last = edge.first; 639 prim.forward = false; 640 comp.size++; 641 } else if (edge.first == first) { 642 sort.elems.add(top, prim); 643 first = edge.last; 644 prim.forward = false; 645 comp.size++; 646 } else { 647 outer.elems.add(prim); 648 } 649 } 650 if (--sweep == 0) { 651 sweep = outer.elems.size(); 652 if ((sweep == 0) || (sweep == prev)) { 653 if ((sort.prim == Pflag.AREA) && (first != last)) { 654 return false; 595 655 } 596 comp = new Comp(cref++, 1); 597 sort.comps.add(comp); 598 } else { 599 if (edge.first == last) { 600 sort.elems.add(prim); 601 last = edge.last; 602 prim.forward = true; 603 comp.size++; 604 } else if (edge.last == first) { 605 sort.elems.add(0, prim); 606 first = edge.first; 607 prim.forward = true; 608 comp.size++; 609 } else if (edge.last == last) { 610 sort.elems.add(prim); 611 last = edge.first; 612 prim.forward = false; 613 comp.size++; 614 } else if (edge.first == first) { 615 sort.elems.add(0, prim); 616 first = edge.last; 617 prim.forward = false; 618 comp.size++; 619 } else { 620 feature.geom.elems.add(prim); 656 if (outin) { 657 if (sweep != 0) { 658 return false; 659 } 660 outer = inner; 661 outin = false; 662 sweep = outer.elems.size(); 621 663 } 622 }623 if (--sweep == 0) {624 664 next = true; 625 sweep = feature.geom.elems.size(); 626 } 627 } 628 if ((sort.prim == Pflag.LINE) && (sort.outers == 1) && (sort.inners == 0) && (first == last)) { 629 sort.prim = Pflag.AREA; 630 } 631 feature.geom = sort; 632 } 665 top = sort.elems.size(); 666 } 667 prev = sweep; 668 } 669 } 670 if ((sort.prim == Pflag.LINE) && (sort.outers == 1) && (sort.inners == 0) && (first == last)) { 671 sort.prim = Pflag.AREA; 672 } 673 feature.geom = sort; 633 674 if (feature.geom.prim == Pflag.AREA) { 634 675 int ie = 0;
Note:
See TracChangeset
for help on using the changeset viewer.