Ignore:
Timestamp:
2014-02-16T11:17:53+01:00 (11 years ago)
Author:
malcolmh
Message:

save

Location:
applications/editors/josm/plugins/smed2/src/s57
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/smed2/src/s57/S57dat.java

    r30280 r30284  
    134134        }
    135135
     136        private static final EnumMap<S57field, String> FldStr = new EnumMap<S57field, String>(S57field.class);
     137        static {
     138                FldStr.put(S57field.I8RI, "0001");
     139                FldStr.put(S57field.DSID, "DSID"); FldStr.put(S57field.DSSI, "DSSI"); FldStr.put(S57field.DSPM, "DSPM"); FldStr.put(S57field.DSPR, "DSPR");
     140                FldStr.put(S57field.DSRC, "DSRC"); FldStr.put(S57field.DSHT, "DSHT"); FldStr.put(S57field.DSAC, "DSAC"); FldStr.put(S57field.CATD, "CATD");
     141                FldStr.put(S57field.CATX, "CATX"); FldStr.put(S57field.DDDF, "DDDF"); FldStr.put(S57field.DDDR, "DDDR"); FldStr.put(S57field.DDDI, "DDDI");
     142                FldStr.put(S57field.DDOM, "DDOM"); FldStr.put(S57field.DDRF, "DDRF"); FldStr.put(S57field.DDSI, "DDSI"); FldStr.put(S57field.DDSC, "DDSC");
     143                FldStr.put(S57field.FRID, "FRID"); FldStr.put(S57field.FOID, "FOID"); FldStr.put(S57field.ATTF, "ATTF"); FldStr.put(S57field.NATF, "NATF");
     144                FldStr.put(S57field.FFPC, "FFPC"); FldStr.put(S57field.FFPT, "FFPT"); FldStr.put(S57field.FFPC, "FFPC"); FldStr.put(S57field.FSPT, "FSPT");
     145                FldStr.put(S57field.VRID, "VRID"); FldStr.put(S57field.ATTV, "ATTV"); FldStr.put(S57field.VRPC, "VRPC"); FldStr.put(S57field.VRPT, "VRPT");
     146                FldStr.put(S57field.SGCC, "SGCC"); FldStr.put(S57field.SG2D, "SG2D"); FldStr.put(S57field.SG3D, "SG3D"); FldStr.put(S57field.ARCC, "ARCC");
     147                FldStr.put(S57field.AR2D, "AR2D"); FldStr.put(S57field.EL2D, "EL2D"); FldStr.put(S57field.CT2D, "CT2D");
     148        }
     149       
     150        public static String stringField (S57field field) {
     151                return FldStr.get(field);
     152        }
     153       
     154        public static S57field enumField (String field) {
     155                for (S57field fld : FldStr.keySet()) {
     156                        if (FldStr.get(fld).equals(field))
     157                                return fld;
     158                }
     159                return null;
     160        }
     161
    136162        private static byte[] buffer;
    137163        private static int offset;
  • applications/editors/josm/plugins/smed2/src/s57/S57map.java

    r30283 r30284  
    2020
    2121public class S57map {
     22       
     23        public class MapBounds {
     24                public double minlat;
     25                public double minlon;
     26                public double maxlat;
     27                public double maxlon;
     28                public MapBounds() {
     29                        minlat = 90;
     30                        minlon = 180;
     31                        maxlat = -90;
     32                        maxlon = -180;
     33                }
     34        }
    2235
    2336        public enum Nflag {
     
    526539        // Utility methods
    527540       
     541        public void sortGeom() {
     542                for (long id : index.keySet()) {
     543                        feature = index.get(id);
     544                        Geom sort = new Geom(feature.geom.prim);
     545                        long first = 0;
     546                        long last = 0;
     547                        Comp comp = null;
     548                        boolean next = true;
     549                        if ((feature.geom.prim == Pflag.LINE) || (feature.geom.prim == Pflag.AREA)) {
     550                                int sweep = feature.geom.elems.size();
     551                                while (!feature.geom.elems.isEmpty()) {
     552                                        Prim prim = feature.geom.elems.remove(0);
     553                                        Edge edge = edges.get(prim.id);
     554                                        if (next == true) {
     555                                                next = false;
     556                                                if (prim.forward) {
     557                                                        first = edge.first;
     558                                                        last = edge.last;
     559                                                } else {
     560                                                        first = edge.last;
     561                                                        last = edge.first;
     562                                                }
     563                                                sort.elems.add(prim);
     564                                                if (prim.outer) {
     565                                                        sort.outers++;
     566                                                } else {
     567                                                        sort.inners++;
     568                                                }
     569                                                comp = new Comp(ref++, 1);
     570                                                sort.refs.add(comp);
     571                                        } else {
     572                                                if (prim.forward) {
     573                                                        if (edge.first == last) {
     574                                                                sort.elems.add(prim);
     575                                                                last = edge.last;
     576                                                                comp.size++;
     577                                                        } else if (edge.last == first) {
     578                                                                sort.elems.add(0, prim);
     579                                                                first = edge.first;
     580                                                                comp.size++;
     581                                                        } else {
     582                                                                feature.geom.elems.add(prim);
     583                                                        }
     584                                                } else {
     585                                                        if (edge.last == last) {
     586                                                                sort.elems.add(prim);
     587                                                                last = edge.first;
     588                                                                comp.size++;
     589                                                        } else if (edge.first == first) {
     590                                                                sort.elems.add(0, prim);
     591                                                                first = edge.last;
     592                                                                comp.size++;
     593                                                        } else {
     594                                                                feature.geom.elems.add(prim);
     595                                                        }
     596                                                }
     597                                        }
     598                                        if (--sweep == 0) {
     599                                                next = true;
     600                                                sweep = feature.geom.elems.size();
     601                                        }
     602                                }
     603                                if ((sort.prim == Pflag.LINE) && (sort.outers == 1) && (sort.inners == 0) && (first == last)) {
     604                                        sort.prim = Pflag.AREA;
     605                                }
     606                                feature.geom = sort;
     607                        }
     608                        if (feature.geom.prim == Pflag.AREA) {
     609                                ArrayList<Prim> outers = new ArrayList<Prim>();
     610                                ArrayList<Prim> inners = new ArrayList<Prim>();
     611                                for (Prim prim : feature.geom.elems) {
     612                                        if (prim.outer) {
     613                                                outers.add(prim);
     614                                        } else {
     615                                                inners.add(prim);
     616                                        }
     617                                }
     618                                ArrayList<Prim> sorting = outers;
     619                                ArrayList<Prim> closed = null;
     620                                sort = new Geom(feature.geom.prim);
     621                                sort.outers = feature.geom.outers;
     622                                sort.inners = feature.geom.inners;
     623                                sort.refs = feature.geom.refs;
     624                                next = true;
     625                                while (!sorting.isEmpty()) {
     626                                        Prim prim = sorting.remove(0);
     627                                        Edge edge = edges.get(prim.id);
     628                                        if (next == true) {
     629                                                next = false;
     630                                                closed = new ArrayList<Prim>();
     631                                                closed.add(prim);
     632                                                if (prim.forward) {
     633                                                        first = edge.first;
     634                                                        last = edge.last;
     635                                                } else {
     636                                                        first = edge.last;
     637                                                        last = edge.first;
     638                                                }
     639                                        } else {
     640                                                if (prim.forward) {
     641                                                        if (edge.first == last) {
     642                                                                last = edge.last;
     643                                                                closed.add(prim);
     644                                                        } else {
     645                                                                sorting.add(0, prim);
     646                                                                next = true;
     647                                                        }
     648                                                } else {
     649                                                        if (edge.last == last) {
     650                                                                last = edge.first;
     651                                                                closed.add(prim);
     652                                                        } else {
     653                                                                sorting.add(0, prim);
     654                                                                next = true;
     655                                                        }
     656                                                }
     657                                        }
     658                                        if (first == last) {
     659                                                sort.elems.addAll(closed);
     660                                                next = true;
     661                                        }
     662                                        if (sorting.isEmpty() && sorting == outers) {
     663                                                sorting = inners;
     664                                                next = true;
     665                                        }
     666                                }
     667                                feature.geom = sort;
     668                        }
     669                }
     670        }
     671       
    528672        public boolean cmpGeoms (Geom g1, Geom g2) {
    529673                return ((g1.prim == g2.prim) && (g1.outers == g2.outers) && (g1.inners == g2.inners) && (g1.elems.size() == g2.elems.size()));
Note: See TracChangeset for help on using the changeset viewer.