Ignore:
Timestamp:
2015-12-21T16:57:17+01:00 (10 years ago)
Author:
malcolmh
Message:

[seachart] add jbasemap

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/seachart/src/s57/S57enc.java

    r31738 r31846  
    108108        static final double SOMF=10;
    109109       
    110         static int intu = 4;
     110        static String file = "0S000000.000";
     111        static int intu = 0;
     112        static String code = "0S";
    111113        static int agen = 3878;
    112114        static int cscl = 10000;
     115        static int vdat = 23;
     116        static int duni = 1;
     117        static int huni = 1;
    113118       
    114119        static int idx;
    115120        static int recs;
     121       
    116122        static int isols;
    117123        static int conns;
     
    129135        public static int encodeChart(S57map map, HashMap<String, String> meta, byte[] buf) throws IndexOutOfBoundsException, UnsupportedEncodingException {
    130136               
     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               
    131170                //M_COVR & MNSYS in BB if not in map
    132171                if (!map.features.containsKey(Obj.M_COVR)) {
    133172                        S57osm.OSMmeta(map);
    134173                }
     174               
     175                S57dat.S57geoms(map);
    135176
    136177                byte[] record;
    137178                ArrayList<Fparams> fields;
    138179
     180                isols = conns = metas = geos = edges = 0;
    139181                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
    147188                System.arraycopy(header, 0, buf, 0, header.length);
    148189                idx = header.length;
     
    166207                }
    167208                if (depths.length > 0) {
    168                         fields = new ArrayList<Fparams>();
     209                        fields = new ArrayList<>();
    169210                        fields.add(new Fparams(S57field.VRID, new Object[] { 110, -2, 1, 1 }));
    170211                        fields.add(new Fparams(S57field.SG3D, depths));
     
    179220                        S57map.Snode node = entry.getValue();
    180221                        if (node.flg == Nflag.ISOL) {
    181                                 fields = new ArrayList<Fparams>();
     222                                fields = new ArrayList<>();
    182223                                fields.add(new Fparams(S57field.VRID, new Object[] { 110, hash(entry.getKey()), 1, 1 }));
    183224                                fields.add(new Fparams(S57field.SG2D, new Object[] { (Math.toDegrees(node.lat) * COMF), (Math.toDegrees(node.lon) * COMF) }));
     
    193234                        S57map.Snode node = entry.getValue();
    194235                        if (node.flg == Nflag.CONN) {
    195                                 fields = new ArrayList<Fparams>();
     236                                fields = new ArrayList<>();
    196237                                fields.add(new Fparams(S57field.VRID, new Object[] { 120, hash(entry.getKey()), 1, 1 }));
    197238                                fields.add(new Fparams(S57field.SG2D, new Object[] { (Math.toDegrees(node.lat) * COMF), (Math.toDegrees(node.lon) * COMF) }));
     
    206247                for (Map.Entry<Long, S57map.Edge> entry : map.edges.entrySet()) {
    207248                        S57map.Edge edge = entry.getValue();
    208                         fields = new ArrayList<Fparams>();
     249                        fields = new ArrayList<>();
    209250                        fields.add(new Fparams(S57field.VRID, new Object[] { 130, hash(entry.getKey()), 1, 1 }));
    210251                        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 }));
     
    240281                                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;
    241282
    242                                 ArrayList<Fparams> geom = new ArrayList<Fparams>();
     283                                ArrayList<Fparams> geom = new ArrayList<>();
    243284                                int outers = 0;
    244 try{
    245285                                outers = (feature.geom.prim == Pflag.POINT) ? 1 : feature.geom.comps.get(0).size;
    246 } catch (IndexOutOfBoundsException e) {
    247         int x=0;
    248 }
    249286                                for (Prim elem : feature.geom.elems) {
    250287                                        if (feature.geom.prim == Pflag.POINT) {
     
    259296                                }
    260297
    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<>();
    263300                                long slaveid = feature.id + 0x0100000000000000l;
    264301                                for (Entry<Obj, ObjTab> objs : feature.objs.entrySet()) {
     
    266303                                        boolean master = true;
    267304                                        for (Entry<Integer, AttMap> object : objs.getValue().entrySet()) {
    268                                                 ArrayList<Fparams> objatts = new ArrayList<Fparams>();
     305                                                ArrayList<Fparams> objatts = new ArrayList<>();
    269306                                                master = (feature.type == objobj) && ((object.getKey() == 0) || (object.getKey() == 1));
    270307                                                long id = hash(master ? feature.id : slaveid);
     
    308345
    309346                                if (!slaves.isEmpty()) {
    310                                         ArrayList<Fparams> refs = new ArrayList<Fparams>();
     347                                        ArrayList<Fparams> refs = new ArrayList<>();
    311348                                        Object[] params = new Object[0];
    312349                                        while (!slaves.isEmpty()) {
     
    335372
    336373                // 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" }));
    339376                ds.add(new Fparams(S57field.DSSI, new Object[] { 2, 1, 2, metas, 0, geos, 0, isols, conns, edges, 0 }));
    340377                record = S57dat.encRecord(1, ds);
Note: See TracChangeset for help on using the changeset viewer.