Changeset 30186 in osm for applications/editors/josm/plugins/smed2/src/s57/S57dat.java
- Timestamp:
- 2014-01-06T16:26:41+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/smed2/src/s57/S57dat.java
r30183 r30186 4 4 import java.util.Arrays; 5 5 import java.util.EnumMap; 6 7 import js57toosm.Js57toosm; 6 8 7 9 public class S57dat { … … 27 29 static { 28 30 convs.put(S57subf.I8RN, new S57conv(5,2,Dom.INT)); 29 convs.put(S57subf.RCNM, new S57conv(2,1,Dom.AN)); convs.put(S57subf.RCID, new S57conv(10, 4,Dom.INT)); convs.put(S57subf.EXPP, new S57conv(1,1,Dom.AN));31 convs.put(S57subf.RCNM, new S57conv(2,1,Dom.AN)); convs.put(S57subf.RCID, new S57conv(10,32,Dom.INT)); convs.put(S57subf.EXPP, new S57conv(1,1,Dom.AN)); 30 32 convs.put(S57subf.INTU, new S57conv(1,1,Dom.INT)); convs.put(S57subf.DSNM, new S57conv(0,0,Dom.BT)); convs.put(S57subf.EDTN, new S57conv(0,0,Dom.BT)); 31 33 convs.put(S57subf.UPDN, new S57conv(0,0,Dom.BT)); convs.put(S57subf.UADT, new S57conv(8,0,Dom.DATE)); convs.put(S57subf.ISDT, new S57conv(8,0,Dom.DATE)); … … 49 51 convs.put(S57subf.LFIL, new S57conv(0,0,Dom.BT)); convs.put(S57subf.VOLM, new S57conv(0,0,Dom.BT)); convs.put(S57subf.IMPL, new S57conv(3,0,Dom.AN)); 50 52 convs.put(S57subf.SLAT, new S57conv(0,0,Dom.REAL)); convs.put(S57subf.WLON, new S57conv(0,0,Dom.REAL)); convs.put(S57subf.NLAT, new S57conv(0,0,Dom.REAL)); 51 convs.put(S57subf.ELON, new S57conv(0,0,Dom.REAL)); convs.put(S57subf.CRCS, new S57conv(0,0,Dom.HEX)); convs.put(S57subf.NAM1, new S57conv(12, 5,Dom.AN));52 convs.put(S57subf.NAM2, new S57conv(12, 5,Dom.AN)); convs.put(S57subf.OORA, new S57conv(1,1,Dom.AN)); convs.put(S57subf.OAAC, new S57conv(6,0,Dom.BT));53 convs.put(S57subf.ELON, new S57conv(0,0,Dom.REAL)); convs.put(S57subf.CRCS, new S57conv(0,0,Dom.HEX)); convs.put(S57subf.NAM1, new S57conv(12,40,Dom.AN)); 54 convs.put(S57subf.NAM2, new S57conv(12,40,Dom.AN)); convs.put(S57subf.OORA, new S57conv(1,1,Dom.AN)); convs.put(S57subf.OAAC, new S57conv(6,0,Dom.BT)); 53 55 convs.put(S57subf.OACO, new S57conv(5,2,Dom.INT)); convs.put(S57subf.OALL, new S57conv(0,0,Dom.BT)); convs.put(S57subf.OATY, new S57conv(1,1,Dom.AN)); 54 56 convs.put(S57subf.DEFN, new S57conv(0,0,Dom.BT)); convs.put(S57subf.AUTH, new S57conv(2,2,Dom.AN)); convs.put(S57subf.RFTP, new S57conv(2,1,Dom.AN)); … … 60 62 convs.put(S57subf.FIDN, new S57conv(10,4,Dom.INT)); convs.put(S57subf.FIDS, new S57conv(5,2,Dom.INT)); convs.put(S57subf.ATTL, new S57conv(5,2,Dom.INT)); 61 63 convs.put(S57subf.ATVL, new S57conv(0,0,Dom.GT)); convs.put(S57subf.FFUI, new S57conv(1,1,Dom.AN)); convs.put(S57subf.FFIX, new S57conv(0,2,Dom.INT)); 62 convs.put(S57subf.NFPT, new S57conv(0,2,Dom.INT)); convs.put(S57subf.LNAM, new S57conv(17, 8,Dom.AN)); convs.put(S57subf.RIND, new S57conv(0,1,Dom.AN));64 convs.put(S57subf.NFPT, new S57conv(0,2,Dom.INT)); convs.put(S57subf.LNAM, new S57conv(17,64,Dom.AN)); convs.put(S57subf.RIND, new S57conv(0,1,Dom.AN)); 63 65 convs.put(S57subf.FSUI, new S57conv(1,1,Dom.AN)); convs.put(S57subf.FSIX, new S57conv(0,2,Dom.INT)); convs.put(S57subf.NSPT, new S57conv(0,2,Dom.INT)); 64 convs.put(S57subf.NAME, new S57conv(12, 5,Dom.AN)); convs.put(S57subf.ORNT, new S57conv(1,1,Dom.AN)); convs.put(S57subf.USAG, new S57conv(1,1,Dom.AN));66 convs.put(S57subf.NAME, new S57conv(12,40,Dom.AN)); convs.put(S57subf.ORNT, new S57conv(1,1,Dom.AN)); convs.put(S57subf.USAG, new S57conv(1,1,Dom.AN)); 65 67 convs.put(S57subf.MASK, new S57conv(1,1,Dom.AN)); convs.put(S57subf.VPUI, new S57conv(1,1,Dom.AN)); convs.put(S57subf.VPIX, new S57conv(0,2,Dom.INT)); 66 68 convs.put(S57subf.NVPT, new S57conv(0,2,Dom.INT)); convs.put(S57subf.TOPI, new S57conv(1,1,Dom.AN)); convs.put(S57subf.CCUI, new S57conv(1,1,Dom.AN)); … … 166 168 public static Object getSubf(S57subf subf) { 167 169 ArrayList<S57subf> subs = fields.get(field); 168 if (index == subs.size()) 169 index = 0; 170 while (index < subs.size()) { 170 boolean wrap = false; 171 while (true) { 172 if (index == subs.size()) { 173 if (!wrap) { 174 index = 0; 175 wrap = true; 176 } else { 177 System.out.println("ERROR: Subfield not found " + subf.name() + " in " + field.name() + " in record " + Js57toosm.rnum); 178 System.exit(-1); 179 } 180 } 171 181 S57subf sub = subs.get(index++); 172 182 S57conv conv = convs.get(sub); 173 183 if (sub == subf) { 174 184 if (conv.bin == 0) { 185 String str = ""; 175 186 if (conv.asc == 0) { 176 String str = "";177 187 while (buffer[offset] != 0x1f) { 178 188 str += buffer[offset++]; 179 189 } 180 offset += (conv.bin != 0) ? Math.abs(conv.bin) : conv.asc; 181 return str; 182 } else 183 return new String(buffer, offset, conv.asc); 190 } else { 191 str = new String(buffer, offset, conv.asc); 192 offset += conv.asc; 193 } 194 return str; 184 195 } else { 185 int i = Math.abs(conv.bin); 186 long val = buffer[offset + --i]; 187 if (conv.bin > 0) 188 val &= 0xff; 189 while (i > 0) { 190 val = (val << 8) + (buffer[offset + --i] & 0xff); 196 int f = Math.abs(conv.bin); 197 if (f < 8) { 198 long val = buffer[offset + --f]; 199 if (conv.bin > 0) 200 val &= 0xff; 201 while (f > 0) { 202 val = (val << 8) + (buffer[offset + --f] & 0xff); 203 } 204 offset += Math.abs(conv.bin); 205 return val; 206 } else { 207 f /= 8; 208 long val = 0; 209 for (int i = 0; i < f; i++) { 210 val = (val << 8) + (buffer[offset++] & 0xff); 211 } 212 return val; 191 213 } 192 offset += (conv.bin != 0) ? Math.abs(conv.bin) : conv.asc;193 return val;194 214 } 195 215 } else { 196 offset += (conv.bin != 0) ? Math.abs(conv.bin) : conv.asc; 216 offset += (conv.bin != 0) ? ((conv.bin < 8) ? Math.abs(conv.bin) : conv.bin / 8) : conv.asc; 197 217 } 198 218 } 199 return null;200 219 } 201 220
Note:
See TracChangeset
for help on using the changeset viewer.
