Changeset 31846 in osm for applications/editors/josm/plugins/seachart/src/s57/S57enc.java
- Timestamp:
- 2015-12-21T16:57:17+01:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/seachart/src/s57/S57enc.java
r31738 r31846 108 108 static final double SOMF=10; 109 109 110 static int intu = 4; 110 static String file = "0S000000.000"; 111 static int intu = 0; 112 static String code = "0S"; 111 113 static int agen = 3878; 112 114 static int cscl = 10000; 115 static int vdat = 23; 116 static int duni = 1; 117 static int huni = 1; 113 118 114 119 static int idx; 115 120 static int recs; 121 116 122 static int isols; 117 123 static int conns; … … 129 135 public static int encodeChart(S57map map, HashMap<String, String> meta, byte[] buf) throws IndexOutOfBoundsException, UnsupportedEncodingException { 130 136 137 for (Entry<String, String> entry : meta.entrySet()) { 138 try { 139 switch (entry.getKey()) { 140 case "FILE": 141 file = entry.getValue(); 142 break; 143 case "INTU": 144 intu = Integer.parseInt(entry.getValue()); 145 break; 146 case "AGEN": 147 String[] tokens = entry.getValue().split("/"); 148 code = tokens[0]; 149 agen = Integer.parseInt(tokens[1]); 150 break; 151 case "VDAT": 152 vdat = Integer.parseInt(entry.getValue()); 153 break; 154 case "CSCL": 155 cscl = Integer.parseInt(entry.getValue()); 156 break; 157 case "DUNI": 158 duni = Integer.parseInt(entry.getValue()); 159 break; 160 case "HUNI": 161 huni = Integer.parseInt(entry.getValue()); 162 break; 163 } 164 } catch (Exception e) { 165 System.err.println("Meta data (" + entry.getKey() + "=" + entry.getValue() + "):" + e.getMessage()); 166 System.exit(-1); 167 } 168 } 169 131 170 //M_COVR & MNSYS in BB if not in map 132 171 if (!map.features.containsKey(Obj.M_COVR)) { 133 172 S57osm.OSMmeta(map); 134 173 } 174 175 S57dat.S57geoms(map); 135 176 136 177 byte[] record; 137 178 ArrayList<Fparams> fields; 138 179 180 isols = conns = metas = geos = edges = 0; 139 181 String date = new SimpleDateFormat("yyyyMMdd").format(Calendar.getInstance().getTime()); 140 ArrayList<Fparams> ds = new ArrayList<Fparams>(); 141 ds.add(new Fparams(S57field.DSID, new Object[] { 10, 1, 1, intu, "0S000000.000", 1, 0, date, date, "03.1", 1, "ENC", "2.0", 1, agen, "Generated by OpenSeaMap.org" })); 142 ds.add(new Fparams(S57field.DSSI, new Object[] { 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 })); 143 ArrayList<Fparams> dp = new ArrayList<Fparams>(); 144 dp.add(new Fparams(S57field.DSPM, new Object[] { 20, 2, 2, 23, 23, cscl, 1, 1, 1, 1, 10000000, 10, "" })); 145 146 isols = conns = metas = geos = edges = 0; 182 ArrayList<Fparams> ds = new ArrayList<>(); 183 ds.add(new Fparams(S57field.DSID, new Object[] { 10, 1, 1, intu, file, "1", "0", date, date, "03.1", 1, "ENC", "2.0", 1, agen, "Generated by OpenSeaMap.org" })); 184 ds.add(new Fparams(S57field.DSSI, new Object[] { 2, 1, 2, metas, 0, geos, 0, isols, conns, edges, 0 })); 185 ArrayList<Fparams> dp = new ArrayList<>(); 186 dp.add(new Fparams(S57field.DSPM, new Object[] { 20, 2, 2, vdat, vdat, cscl, duni, huni, 1, 1, 10000000, 10, "" })); 187 147 188 System.arraycopy(header, 0, buf, 0, header.length); 148 189 idx = header.length; … … 166 207 } 167 208 if (depths.length > 0) { 168 fields = new ArrayList< Fparams>();209 fields = new ArrayList<>(); 169 210 fields.add(new Fparams(S57field.VRID, new Object[] { 110, -2, 1, 1 })); 170 211 fields.add(new Fparams(S57field.SG3D, depths)); … … 179 220 S57map.Snode node = entry.getValue(); 180 221 if (node.flg == Nflag.ISOL) { 181 fields = new ArrayList< Fparams>();222 fields = new ArrayList<>(); 182 223 fields.add(new Fparams(S57field.VRID, new Object[] { 110, hash(entry.getKey()), 1, 1 })); 183 224 fields.add(new Fparams(S57field.SG2D, new Object[] { (Math.toDegrees(node.lat) * COMF), (Math.toDegrees(node.lon) * COMF) })); … … 193 234 S57map.Snode node = entry.getValue(); 194 235 if (node.flg == Nflag.CONN) { 195 fields = new ArrayList< Fparams>();236 fields = new ArrayList<>(); 196 237 fields.add(new Fparams(S57field.VRID, new Object[] { 120, hash(entry.getKey()), 1, 1 })); 197 238 fields.add(new Fparams(S57field.SG2D, new Object[] { (Math.toDegrees(node.lat) * COMF), (Math.toDegrees(node.lon) * COMF) })); … … 206 247 for (Map.Entry<Long, S57map.Edge> entry : map.edges.entrySet()) { 207 248 S57map.Edge edge = entry.getValue(); 208 fields = new ArrayList< Fparams>();249 fields = new ArrayList<>(); 209 250 fields.add(new Fparams(S57field.VRID, new Object[] { 130, hash(entry.getKey()), 1, 1 })); 210 251 fields.add(new Fparams(S57field.VRPT, new Object[] { (((hash(edge.first) & 0xffffffff) << 8) + 120l), 255, 255, 1, 255, (((hash(edge.last) & 0xffffffff) << 8) + 120l), 255, 255, 2, 255 })); … … 240 281 int grup = ((obj == Obj.DEPARE) || (obj == Obj.DRGARE) || (obj == Obj.FLODOC) || (obj == Obj.HULKES) || (obj == Obj.LNDARE) || (obj == Obj.PONTON) || (obj == Obj.UNSARE)) ? 1 : 2; 241 282 242 ArrayList<Fparams> geom = new ArrayList< Fparams>();283 ArrayList<Fparams> geom = new ArrayList<>(); 243 284 int outers = 0; 244 try{245 285 outers = (feature.geom.prim == Pflag.POINT) ? 1 : feature.geom.comps.get(0).size; 246 } catch (IndexOutOfBoundsException e) {247 int x=0;248 }249 286 for (Prim elem : feature.geom.elems) { 250 287 if (feature.geom.prim == Pflag.POINT) { … … 259 296 } 260 297 261 ArrayList<ArrayList<Fparams>> objects = new ArrayList< ArrayList<Fparams>>();262 ArrayList<Long> slaves = new ArrayList< Long>();298 ArrayList<ArrayList<Fparams>> objects = new ArrayList<>(); 299 ArrayList<Long> slaves = new ArrayList<>(); 263 300 long slaveid = feature.id + 0x0100000000000000l; 264 301 for (Entry<Obj, ObjTab> objs : feature.objs.entrySet()) { … … 266 303 boolean master = true; 267 304 for (Entry<Integer, AttMap> object : objs.getValue().entrySet()) { 268 ArrayList<Fparams> objatts = new ArrayList< Fparams>();305 ArrayList<Fparams> objatts = new ArrayList<>(); 269 306 master = (feature.type == objobj) && ((object.getKey() == 0) || (object.getKey() == 1)); 270 307 long id = hash(master ? feature.id : slaveid); … … 308 345 309 346 if (!slaves.isEmpty()) { 310 ArrayList<Fparams> refs = new ArrayList< Fparams>();347 ArrayList<Fparams> refs = new ArrayList<>(); 311 348 Object[] params = new Object[0]; 312 349 while (!slaves.isEmpty()) { … … 335 372 336 373 // Re-write DSID/DSSI with final totals 337 ds = new ArrayList< Fparams>();338 ds.add(new Fparams(S57field.DSID, new Object[] { 10, 1, 1, intu, "0S000000.000", 1, 0, date, date, "03.1", 1, "ENC", "2.0", 1, agen, "Generated by OpenSeaMap.org" }));374 ds = new ArrayList<>(); 375 ds.add(new Fparams(S57field.DSID, new Object[] { 10, 1, 1, intu, file, "1", "0", date, date, "03.1", 1, "ENC", "2.0", 1, agen, "Generated by OpenSeaMap.org" })); 339 376 ds.add(new Fparams(S57field.DSSI, new Object[] { 2, 1, 2, metas, 0, geos, 0, isols, conns, edges, 0 })); 340 377 record = S57dat.encRecord(1, ds);
Note:
See TracChangeset
for help on using the changeset viewer.