Changeset 32906 in osm for applications/editors/josm/plugins/seachart/josmtos57
- Timestamp:
- 2016-09-03T16:18:15+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/seachart/josmtos57/src/josmtos57/Josmtos57.java
r32380 r32906 22 22 public class Josmtos57 { 23 23 24 25 26 27 28 29 30 31 32 33 34 35 36 24 // http://opendatacommons.org/licenses/odbl/1-0/ 25 26 /* 27 URL website = new URL("http://www.website.com/information.asp"); 28 try (InputStream in = website.openStream()) { Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING); } 29 */ 30 31 /* 32 * To do: 33 * 1. Geometry truncation at cell boundary. 34 * 2. Geometry validation/correction to comply with S57 limitations. 35 * 3. Improvements in mapping of OSM features to S57 objects. 36 */ 37 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 38 static byte[] header = { 39 '0', '0', '2', '6', '2', '3', 'L', 'E', '1', ' ', '0', '9', '0', '0', '0', '7', '3', ' ', ' ', ' ', '6', '6', '0', '4', '0', '0', '0', '0', '0', '0', '0', '0', 40 '1', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '4', '8', '0', '0', '0', '0', '1', '9', 'C', 'A', 'T', 'D', '0', '0', '0', '1', 41 '2', '2', '0', '0', '0', '0', '6', '7', 0x1e, '0', '0', '0', '0', ';', '&', ' ', ' ', ' ', 0x1f, '0', '0', '0', '1', 'C', 'A', 'T', 'D', 0x1e, '0', '1', '0', '0', 42 ';', '&', ' ', ' ', ' ', 'I', 'S', 'O', '/', 'I', 'E', 'C', ' ', '8', '2', '1', '1', ' ', 'R', 'e', 'c', 'o', 'r', 'd', ' ', 'I', 'd', 'e', 'n', 't', 'i', 'f', 43 'i', 'e', 'r', 0x1f, 0x1f, '(', 'I', '(', '5', ')', ')', 0x1e, '1', '6', '0', '0', ';', '&', ' ', ' ', ' ', 'C', 'a', 't', 'a', 'l', 'o', 'g', 'u', 'e', ' ', 'D', 44 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', ' ', 'F', 'i', 'e', 'l', 'd', 0x1f, 'R', 'C', 'N', 'M', '!', 'R', 'C', 'I', 'D', '!', 'F', 'I', 'L', 'E', '!', 'L', 'F', 45 'I', 'L', '!', 'V', 'O', 'L', 'M', '!', 'I', 'M', 'P', 'L', '!', 'S', 'L', 'A', 'T', '!', 'W', 'L', 'O', 'N', '!', 'N', 'L', 'A', 'T', '!', 'E', 'L', 'O', 'N', 46 '!', 'C', 'R', 'C', 'S', '!', 'C', 'O', 'M', 'T', 0x1f, '(', 'A', '(', '2', ')', ',', 'I', '(', '1', '0', ')', ',', '3', 'A', ',', 'A', '(', '3', ')', ',', '4', 47 'R', ',', '2', 'A', ')', 0x1e, 48 '0', '0', '1', '0', '1', ' ', 'D', ' ', ' ', ' ', ' ', ' ', '0', '0', '0', '5', '3', ' ', ' ', ' ', '5', '5', '0', '4', 49 '0', '0', '0', '1', '0', '0', '0', '0', '6', '0', '0', '0', '0', '0', 'C', 'A', 'T', 'D', '0', '0', '0', '4', '2', '0', '0', '0', '0', '6', 0x1e, 50 '0', '0', '0', '0', '0', 0x1e, 'C', 'D', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', 'C', 'A', 'T', 'A', 'L', 'O', 'G', '.', '0', '3', '1', 0x1f, 51 0x1f, 'V', '0', '1', 'X', '0', '1', 0x1f, 'A', 'S', 'C', 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1e 52 }; 53 54 static BufferedReader in; 55 static FileOutputStream out; 56 static S57map map; 57 static byte[] buf; 58 static HashMap<String, String> meta; 59 static ArrayList<Fparams> fields; 60 static byte[] record; 61 62 public static void main(String[] args) throws IOException { 63 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 64 map = new S57map(false); 65 int idx = 0; 66 67 if (args.length < 4) { 68 System.err.println("Usage: java -jar josmtos57.jar OSM_filename meta_data_filename S57_ENC_ROOT_directory S57_filename"); 69 System.exit(-1); 70 } 71 try { 72 Scanner min = new Scanner(new FileInputStream(args[1])); 73 meta = new HashMap<>(); 74 meta.put("FILE", args[3]); 75 while (min.hasNext()) { 76 String[] tokens = min.next().split("="); 77 if (tokens.length >= 2) 78 meta.put(tokens[0], tokens[1].split("[ #]")[0]); 79 } 80 min.close(); 81 } catch (IOException e) { 82 System.err.println("Meta data file: " + e.getMessage()); 83 System.exit(-1); 84 } 85 try { 86 in = new BufferedReader(new FileReader(new File(args[0]))); 87 try { 88 S57osm.OSMmap(in, map, false); 89 } catch (Exception e) { 90 System.err.println("Input data error"); 91 System.exit(-1); 92 } 93 in.close(); 94 } catch (IOException e) { 95 System.err.println("Input file: " + e.getMessage()); 96 System.exit(-1); 97 } 98 99 try { 100 buf = new byte[5242880]; 101 idx = S57enc.encodeChart(map, meta, buf); 102 } catch (IndexOutOfBoundsException e) { 103 System.err.println("Output file too big (limit 5 MB) - try smaller areas"); 104 System.exit(-1); 105 } catch (UnsupportedEncodingException e) { 106 System.err.println("Input data error" + e.getMessage()); 107 System.exit(-1); 108 } 109 110 CRC32 crc = new CRC32(); 111 crc.update(buf, 0, idx); 112 try { 113 File file = new File(args[2] + args[3]); 114 if (file.exists()) file.delete(); 115 out = new FileOutputStream(file, false); 116 out.write(buf, 0, idx); 117 } catch (IOException e) { 118 System.err.println("Output file: " + e.getMessage()); 119 System.exit(-1); 120 } 121 out.close(); 122 123 buf = new byte[header.length]; 124 System.arraycopy(header, 0, buf, 0, header.length); 125 idx = header.length; 126 int recs = 2; 127 fields = new ArrayList<>(); 128 fields.add(new Fparams(S57field.CATD, new Object[]{ "CD", recs, args[3], "", "V01X01", "BIN", Math.toDegrees(map.bounds.minlat), 129 Math.toDegrees(map.bounds.minlon), Math.toDegrees(map.bounds.maxlat), Math.toDegrees(map.bounds.maxlon), String.format("%08X", crc.getValue()), "" })); 130 record = S57dat.encRecord(String.valueOf(recs++), fields); 131 buf = Arrays.copyOf(buf, (buf.length + record.length)); 132 System.arraycopy(record, 0, buf, idx, record.length); 133 idx += record.length; 134 134 135 136 137 138 139 140 141 142 143 144 135 try { 136 File file = new File(args[2] + "CATALOG.031"); 137 if (file.exists()) file.delete(); 138 out = new FileOutputStream(file, false); 139 out.write(buf, 0, idx); 140 } catch (IOException e) { 141 System.err.println("Catalogue file: " + e.getMessage()); 142 System.exit(-1); 143 } 144 out.close(); 145 145 146 // 147 // 148 // 149 // 150 151 152 146 // String[] dir = (new File(args[2]).list()); 147 // for (String item : dir) { 148 // System.err.println(item); 149 // } 150 151 System.err.println("Finished"); 152 } 153 153 154 154 }
Note:
See TracChangeset
for help on using the changeset viewer.