Changeset 30186 in osm for applications/editors/josm/plugins/smed2/js57toosm
- Timestamp:
- 2014-01-06T16:26:41+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/smed2/js57toosm/src/js57toosm/Js57toosm.java
r30184 r30186 19 19 public class Js57toosm { 20 20 21 public static int rnum = 0; 22 21 23 public static void main(String[] args) throws IOException { 22 24 23 FileInputStream in = new FileInputStream("/Users/mherring/boatsw/oseam/ openseamap/renderer/js57toosm/tst.000");25 FileInputStream in = new FileInputStream("/Users/mherring/boatsw/oseam/josm/plugins/smed2/js57toosm/tst.000"); 24 26 PrintStream out = System.out; 25 27 … … 36 38 double somf = 1; 37 39 long name = 0; 38 S57map map = new S57map();; 40 S57map.Nflag nflag = Nflag.ANON; 41 S57map map = new S57map(); 42 double minlat = 90, minlon = 180, maxlat = -90, maxlon = -180; 39 43 40 44 while (in.read(leader) == 24) { … … 55 59 if (!ddr) switch (tag) { 56 60 case "0001": 57 out.println("Record: " + (long)S57dat.getSubf(record, fields+pos, S57field.I8RI, S57subf.I8RN)); 61 int i8rn = (int)(long)S57dat.getSubf(record, fields+pos, S57field.I8RI, S57subf.I8RN); 62 if (i8rn != ++rnum) { 63 out.println("Out of order record ID"); 64 in.close(); 65 System.exit(-1); 66 } 58 67 break; 59 68 case "DSID": … … 82 91 break; 83 92 case "VRID": 84 name = (long)S57dat.getSubf(record, fields+pos, S57field.VRID, S57subf.RCNM) << 32; 93 name = (long)S57dat.getSubf(record, fields+pos, S57field.VRID, S57subf.RCNM); 94 switch ((int)name) { 95 case 110: 96 nflag = Nflag.ISOL; 97 break; 98 case 120: 99 nflag = Nflag.CONN; 100 break; 101 default: 102 nflag = Nflag.ANON; 103 break; 104 } 105 name <<= 32; 85 106 name += (long)S57dat.getSubf(record, fields+pos, S57field.VRID, S57subf.RCID); 86 107 name <<= 16; 108 if (nflag == Nflag.ANON) { 109 map.newEdge(name); 110 } 87 111 break; 88 112 case "ATTV": … … 91 115 break; 92 116 case "VRPT": 117 name = (long)S57dat.getSubf(record, fields+pos, S57field.VRPT, S57subf.NAME) << 16; 118 int topi = (int)((long)S57dat.getSubf(S57subf.TOPI)); 119 map.addConn(name, topi); 120 name = (long)S57dat.getSubf(S57subf.NAME) << 16; 121 topi = (int)((long)S57dat.getSubf(S57subf.TOPI)); 122 map.addConn(name, topi); 93 123 break; 94 124 case "SGCC": … … 99 129 double lat = (double) ((long) S57dat.getSubf(S57subf.YCOO)) / comf; 100 130 double lon = (double) ((long) S57dat.getSubf(S57subf.XCOO)) / comf; 101 map.addNode(name++, lat, lon); 131 if (nflag == Nflag.ANON) { 132 map.newNode(++name, lat, lon, nflag); 133 } else { 134 map.newNode(name, lat, lon, nflag); 135 } 136 if (lat < minlat) minlat = lat; 137 if (lat > maxlat) maxlat = lat; 138 if (lon < minlon) minlon = lon; 139 if (lon > maxlon) maxlon = lon; 102 140 } 103 141 break; … … 108 146 double lon = (double) ((long) S57dat.getSubf(S57subf.XCOO)) / comf; 109 147 double depth = (double) ((long) S57dat.getSubf(S57subf.VE3D)) / somf; 110 map.addNode(name++, lat, lon, depth); 148 map.newNode(name++, lat, lon, depth); 149 if (lat < minlat) minlat = lat; 150 if (lat > maxlat) maxlat = lat; 151 if (lon < minlon) minlon = lon; 152 if (lon > maxlon) maxlon = lon; 111 153 } 112 154 break; … … 114 156 } 115 157 } 116 int a = 0; int i = 0; int c = 0; int d = 0; 117 for (Snode node : map.nodes.values()) { 118 switch (node.flg) { 119 case ANON: a++; break; 120 case ISOL: i++; break; 121 case CONN: c++; break; 122 case DPTH: d++; break; 158 in.close(); 159 160 out.println("<?xml version='1.0' encoding='UTF-8'?>"); 161 out.println("<osm version='0.6' generator='js57toosm'>"); 162 out.println("<bounds minlat='" + minlat +"' minlon='" + minlon + "' maxlat='" + maxlat + "' maxlon='" + maxlon + "'/>"); 163 164 for (long id : map.nodes.keySet()) { 165 Snode node = map.nodes.get(id); 166 if (node.flg == S57map.Nflag.DPTH) { 167 out.format(" <node id='%d' lat='%f' lon='%f' version='1'>%n", -id, Math.toDegrees(node.lat), Math.toDegrees(node.lon)); 168 out.format(" <tag k='seamark:type' v='sounding'/>%n"); 169 out.format(" <tag k='seamark:sounding:depth' v='%.1f'/>%n", ((Dnode)node).val); 170 out.format(" </node>%n"); 171 } else { 172 out.format(" <node id='%d' lat='%f' lon='%f' version='1'/>%n",-id, Math.toDegrees(node.lat), Math.toDegrees(node.lon)); 123 173 } 124 174 } 125 out.println("Anon " + a); 126 out.println("Isol " + i); 127 out.println("Conn " + c); 128 out.println("Dpth " + d); 129 in.close(); 175 176 for (long id : map.edges.keySet()) { 177 Edge edge = map.edges.get(id); 178 out.format(" <way id='%d' version='1'>%n", -id); 179 out.format(" <nd ref='%d'/>%n", -edge.first); 180 for (long anon : edge.nodes) { 181 out.format(" <nd ref='%d'/>%n", -anon); 182 } 183 out.format(" <nd ref='%d'/>%n", -edge.last); 184 out.format(" </way>%n"); 185 } 186 187 out.println("</osm>\n"); 130 188 } 131 189
Note:
See TracChangeset
for help on using the changeset viewer.
