Changeset 30230 in osm for applications


Ignore:
Timestamp:
2014-01-26T19:10:19+01:00 (11 years ago)
Author:
malcolmh
Message:

save

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/smed2/js57toosm/src/js57toosm/Js57toosm.java

    r30226 r30230  
    1515import s57.S57obj;
    1616import s57.S57att;
     17import s57.S57obj.Obj;
    1718import s57.S57att.*;
    1819import s57.S57val;
     
    5152                long name = 0;
    5253                S57map.Nflag nflag = Nflag.ANON;
    53                 S57map.Pflag prim = S57map.Pflag.NOSP;
     54                S57map.Pflag pflag = S57map.Pflag.NOSP;
    5455                long objl = 0;
    5556                double minlat = 90, minlon = 180, maxlat = -90, maxlon = -180;
     
    8889                                                switch ((int)((long)S57dat.getSubf(record, fields + pos, S57field.FRID, S57subf.PRIM))) {
    8990                                                case 1:
    90                                                         prim = S57map.Pflag.POINT;
     91                                                        pflag = S57map.Pflag.POINT;
    9192                                                        break;
    9293                                                case 2:
    93                                                         prim = S57map.Pflag.LINE;
     94                                                        pflag = S57map.Pflag.LINE;
    9495                                                        break;
    9596                                                case 3:
    96                                                         prim = S57map.Pflag.AREA;
     97                                                        pflag = S57map.Pflag.AREA;
    9798                                                        break;
    9899                                                default:
    99                                                         prim = S57map.Pflag.NOSP;
     100                                                        pflag = S57map.Pflag.NOSP;
    100101                                                }
    101102                                                objl = (long)S57dat.getSubf(S57subf.OBJL);
     
    103104                                        case "FOID":
    104105                                                name = (long) S57dat.getSubf(record, fields + pos, S57field.FOID, S57subf.LNAM);
    105                                                 map.newFeature(name, prim, objl);
     106                                                map.newFeature(name, pflag, objl);
    106107                                                break;
    107108                                        case "ATTF":
     
    210211                        if (feature.reln != Rflag.SLAVE) {
    211212                                if (feature.geom.prim == Pflag.POINT) {
    212                                         long ref = feature.geom.elems.get(0).id;
    213                                         Snode node = map.nodes.get(ref);
    214                                         String type = S57obj.stringType(feature.type);
    215                                         out.format("  <node id='%d' lat='%f' lon='%f' version='1'>%n", -ref,  Math.toDegrees(node.lat), Math.toDegrees(node.lon));
    216                                         out.format("    <tag k='seamark:type' v=\"%s\"/>%n", type);
    217                                         writeAtts(feature, type);
    218                                         out.format("  </node>%n");
    219                                         map.nodes.remove(ref);
     213                                        for (Prim prim : feature.geom.elems) {
     214                                                long ref = prim.id;
     215                                                Snode node = map.nodes.get(ref);
     216                                                out.format("  <node id='%d' lat='%f' lon='%f' version='1'>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
     217                                                String type = S57obj.stringType(feature.type);
     218                                                out.format("    <tag k='seamark:type' v=\"%s\"/>%n", type);
     219                                                if ((feature.type == Obj.SOUNDG) && (node.flg == S57map.Nflag.DPTH))
     220                                                        out.format("    <tag k='seamark:sounding:depth' v='%.1f'/>%n", ((Dnode)node).val);
     221                                                writeAtts(feature, type);
     222                                                out.format("  </node>%n");
     223                                                map.nodes.remove(ref);
     224                                        }
    220225                                }
    221226                        }
     
    225230                        Feature feature = map.index.get(id);
    226231                        if (feature.reln != Rflag.SLAVE) {
    227                                 if (feature.geom.prim == Pflag.LINE) {
     232                                if ((feature.geom.prim == Pflag.LINE) || ((feature.geom.prim == Pflag.AREA) && (feature.geom.outers == 1) && (feature.geom.inners == 0))) {
    228233                                        GeomIterator git = map.new GeomIterator(feature.geom);
    229234                                        while (git.hasMore()) {
    230                                                 git.more();
     235                                                git.getMore();
    231236                                                while (git.hasNext()) {
    232237                                                        long ref = git.nextRef();
     
    238243                                                }
    239244                                        }
    240                                         out.format("  <way id='%d' version='1'>%n", -id);
    241245                                        git = map.new GeomIterator(feature.geom);
    242246                                        while (git.hasMore()) {
    243                                                 git.more();
     247                                                long way = git.getMore();
     248                                                out.format("  <way id='%d' version='1'>%n", -way);
    244249                                                while (git.hasNext()) {
    245250                                                        long ref = git.nextRef();
    246251                                                        out.format("    <nd ref='%d'/>%n", -ref);
    247252                                                }
    248                                         }
    249                                         String type = S57obj.stringType(feature.type);
    250                                         out.format("    <tag k='seamark:type' v=\"%s\"/>%n", type);
    251                                         writeAtts(feature, type);
    252                                         out.format("  </way>%n");
    253                                 }
    254                         }
    255                 }
    256 /*              for (long id : map.nodes.keySet()) {
    257                         Snode node = map.nodes.get(id);
    258                         if (node.flg == S57map.Nflag.DPTH) {
    259                                 out.format("  <node id='%d' lat='%f' lon='%f' version='1'>%n", -id, Math.toDegrees(node.lat), Math.toDegrees(node.lon));
    260                                 out.format("    <tag k='seamark:type' v='sounding'/>%n");
    261                                 out.format("    <tag k='seamark:sounding:depth' v='%.1f'/>%n", ((Dnode)node).val);
    262                                 out.format("  </node>%n");
    263                                 map.nodes.remove(id);
    264                         }
    265                 }
    266                
    267                 for (long id : map.edges.keySet()) {
    268                         Edge edge = map.edges.get(id);
    269                         out.format("  <way id='%d' version='1'>%n", -id);
    270                         out.format("    <nd ref='%d'/>%n", -edge.first);
    271                         for (long anon : edge.nodes) {
    272                                 out.format("    <nd ref='%d'/>%n", -anon);
    273                         }
    274                         out.format("    <nd ref='%d'/>%n", -edge.last);
    275                         out.format("  </way>%n");
    276                 }
    277 */             
     253                                                String type = S57obj.stringType(feature.type);
     254                                                out.format("    <tag k='seamark:type' v=\"%s\"/>%n", type);
     255                                                writeAtts(feature, type);
     256                                                out.format("  </way>%n");
     257                                        }
     258                                } else if (feature.geom.prim == Pflag.AREA) {
     259                                       
     260                                }
     261                        }
     262                }
    278263                out.println("</osm>\n");
    279264        }
Note: See TracChangeset for help on using the changeset viewer.