Changeset 30282 in osm for applications/editors/josm/plugins/smed2/js57toosm/src
- Timestamp:
- 2014-02-15T13:01:07+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/smed2/js57toosm/src/js57toosm/Js57toosm.java
r30279 r30282 11 11 12 12 import java.io.*; 13 import java.util.Iterator; 14 import java.util.Map; 13 import java.util.*; 15 14 16 15 import s57.S57map.Prim; 17 16 import s57.S57obj; 17 import s57.S57obj.*; 18 18 import s57.S57att; 19 import s57.S57obj.Obj;20 19 import s57.S57att.*; 21 20 import s57.S57val; … … 57 56 long objl = 0; 58 57 double minlat = 90, minlon = 180, maxlat = -90, maxlon = -180; 58 59 HashMap<Long, Boolean> done = new HashMap<Long, Boolean>(); 59 60 60 61 while (in.read(leader) == 24) { … … 113 114 long attl = (long) S57dat.getSubf(S57subf.ATTL); 114 115 String atvl = (String) S57dat.getSubf(S57subf.ATVL); 115 map.newAtt(attl, atvl); 116 if (!atvl.isEmpty()) { 117 map.newAtt(attl, atvl); 118 } 116 119 } while (S57dat.more()); 117 120 break; … … 225 228 Snode node; 226 229 while ((node = map.nodes.get(ref)) != null) { 227 out.format(" <node id='%d' lat='%.8f' lon='%.8f' version='1'>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon)); 228 out.format(" <tag k='seamark:type' v=\"%s\"/>%n", type); 229 if ((feature.type == Obj.SOUNDG) && (node.flg == S57map.Nflag.DPTH)) 230 out.format(" <tag k='seamark:sounding:depth' v='%.1f'/>%n", ((Dnode) node).val); 231 writeAtts(feature, type); 232 out.format(" </node>%n"); 233 map.nodes.remove(ref++); 230 if (!done.containsKey(ref)) { 231 out.format(" <node id='%d' lat='%.8f' lon='%.8f' version='1'>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon)); 232 out.format(" <tag k='seamark:type' v=\"%s\"/>%n", type); 233 if ((feature.type == Obj.SOUNDG) && (node.flg == S57map.Nflag.DPTH)) 234 out.format(" <tag k='seamark:sounding:depth' v='%.1f'/>%n", ((Dnode) node).val); 235 writeAtts(feature, type); 236 out.format(" </node>%n"); 237 done.put(ref, true); 238 } 239 ref++; 234 240 } 235 241 } … … 252 258 long ref = git.nextRef(); 253 259 Snode node = map.nodes.get(ref); 254 if ( node != null) {260 if (!done.containsKey(ref)) { 255 261 out.format(" <node id='%d' lat='%.8f' lon='%.8f' version='1'/>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon)); 256 map.nodes.remove(ref);262 done.put(ref, true); 257 263 } 258 264 } … … 273 279 } 274 280 out.format(" </way>%n"); 281 done.put(way, true); 275 282 } 276 283 } else if (feature.geom.prim == Pflag.AREA) { … … 283 290 long ref = git.nextRef(); 284 291 Snode node = map.nodes.get(ref); 285 if ( node != null) {292 if (!done.containsKey(ref)) { 286 293 out.format(" <node id='%d' lat='%.8f' lon='%.8f' version='1'/>%n", -ref, Math.toDegrees(node.lat), Math.toDegrees(node.lon)); 287 map.nodes.remove(ref);294 done.put(ref, true); 288 295 } 289 296 } … … 292 299 git = map.new GeomIterator(feature.geom); 293 300 while (git.hasComp()) { 294 long way = git.nextComp(); 295 out.format(" <way id='%d' version='1'>%n", -way); 296 while (git.hasEdge()) { 297 git.nextEdge(); 298 while (git.hasNode()) { 299 long ref = git.nextRef(); 300 out.format(" <nd ref='%d'/>%n", -ref); 301 } 302 } 303 out.format(" </way>%n"); 301 git.nextComp(); 302 while (git.hasEdge()) { 303 long way = git.nextEdge(); 304 if (!done.containsKey(way)) { 305 out.format(" <way id='%d' version='1'>%n", -way); 306 while (git.hasNode()) { 307 long ref = git.nextRef(true); 308 out.format(" <nd ref='%d'/>%n", -ref); 309 } 310 out.format(" </way>%n"); 311 done.put(way, true); 312 } 313 } 304 314 } 305 315 out.format(" <relation id='%d' version='1'>%n", -map.ref++); 306 316 out.format(" <tag k='type' v='multipolygon'/>%n"); 307 int i = 0; 308 for (Comp comp : feature.geom.refs) { 309 if (i++ < feature.geom.outers) { 310 out.format(" <member type='way' ref='%d' role='outer'/>%n", -comp.ref); 311 } else { 312 out.format(" <member type='way' ref='%d' role='inner'/>%n", -comp.ref); 317 git = map.new GeomIterator(feature.geom); 318 int outers = feature.geom.refs.get(0).size; 319 if (feature.geom.inners != 0){ 320 int x=0; 321 } 322 while (git.hasComp()) { 323 git.nextComp(); 324 while (git.hasEdge()) { 325 long way = git.nextEdge(); 326 if (outers-- > 0) { 327 out.format(" <member type='way' ref='%d' role='outer'/>%n", -way); 328 } else { 329 out.format(" <member type='way' ref='%d' role='inner'/>%n", -way); 330 } 313 331 } 314 332 }
Note:
See TracChangeset
for help on using the changeset viewer.