Ignore:
Timestamp:
2017-09-21T00:17:41+02:00 (7 years ago)
Author:
donvip
Message:

Edigeo: support GEN/GEO files

Location:
applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEN.java

    r33643 r33644  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.plugins.fr.cadastre.edigeo;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
    35
    46import java.io.IOException;
     
    911 */
    1012public class EdigeoFileGEN extends EdigeoFile {
     13
     14    /**
     15     * Geographic bounds.
     16     */
     17    public static class GeoBounds extends Block {
     18        String cm1;
     19        String cm2;
     20
     21        GeoBounds(String type) {
     22            super(type);
     23        }
     24
     25        @Override
     26        void processRecord(EdigeoRecord r) {
     27            switch (r.name) {
     28            case "CM1": cm1 = safeGet(r); break;
     29            case "CM2": cm2 = safeGet(r); break;
     30            default:
     31                super.processRecord(r);
     32            }
     33        }
     34
     35        /**
     36         * Returns the minimal coordinates.
     37         * @return the minimal coordinates
     38         */
     39        public final String getCm1() {
     40            return cm1;
     41        }
     42
     43        /**
     44         * Returns the maximal coordinates.
     45         * @return the maximal coordinates
     46         */
     47        public final String getCm2() {
     48            return cm2;
     49        }
     50    }
     51
     52    /**
     53     * Geographic data.
     54     */
     55    public static class GeoData extends Block {
     56
     57        /**
     58         * Data structure.
     59         */
     60        enum Structure {
     61            TOPO_VECTOR(1),
     62            NETWORK(2),
     63            SPAGHETTI(3),
     64            REAL_MATRIX(4),
     65            CODED_MATRIX(5);
     66
     67            final int code;
     68            Structure(int code) {
     69                this.code = code;
     70            }
     71
     72            public static Structure of(int code) {
     73                for (Structure s : values()) {
     74                    if (s.code == code) {
     75                        return s;
     76                    }
     77                }
     78                throw new IllegalArgumentException(Integer.toString(code));
     79            }
     80        }
     81
     82        String information;
     83        Structure structure;
     84        String offsetId;
     85
     86        GeoData(String type) {
     87            super(type);
     88        }
     89
     90        @Override
     91        void processRecord(EdigeoRecord r) {
     92            switch (r.name) {
     93            case "INF": information = safeGetAndLog(r, tr("Information")); break;
     94            case "STR": structure = Structure.of(safeGetInt(r)); break;
     95            case "REG": offsetId = safeGet(r); break;
     96            default:
     97                super.processRecord(r);
     98            }
     99        }
     100
     101        /**
     102         * Returns general information.
     103         * @return general information
     104         */
     105        public final String getInformation() {
     106            return information;
     107        }
     108
     109        /**
     110         * Returns data structure.
     111         * @return data structure
     112         */
     113        public final Structure getStructure() {
     114            return structure;
     115        }
     116
     117        /**
     118         * Returns offset identifier.
     119         * @return offset identifier
     120         */
     121        public final String getOffsetId() {
     122            return offsetId;
     123        }
     124    }
     125
     126    GeoBounds bounds;
     127    GeoData geodata;
    11128
    12129    /**
     
    21138    @Override
    22139    protected Block createBlock(String type) {
    23         // TODO Auto-generated method stub
    24         return null;
     140        switch (type) {
     141        case "DEG":
     142            bounds = new GeoBounds(type);
     143            return bounds;
     144        case "GSE":
     145            geodata = new GeoData(type);
     146            return geodata;
     147        default:
     148            throw new IllegalArgumentException(type);
     149        }
    25150    }
    26 
    27151}
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEO.java

    r33643 r33644  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.plugins.fr.cadastre.edigeo;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
    35
    46import java.io.IOException;
     
    911 */
    1012public class EdigeoFileGEO extends EdigeoFile {
     13
     14    /**
     15     * Coordinates reference.
     16     */
     17    public static class CoorReference extends Block {
     18
     19        enum ReferenceType {
     20            CARTESIAN("CAR"),
     21            GEOGRAPHIC("GEO"),
     22            PROJECTED("MAP");
     23
     24            String code;
     25            ReferenceType(String code) {
     26                this.code = code;
     27            }
     28
     29            public static ReferenceType of(String code) {
     30                for (ReferenceType r : values()) {
     31                    if (r.code.equals(code)) {
     32                        return r;
     33                    }
     34                }
     35                throw new IllegalArgumentException(code);
     36            }
     37        }
     38
     39        enum AltitudeSystem {
     40            TWO_DIM_PLUS_ALTITUDE(1),
     41            THREE_DIM_OR_NO_ALTITUDE(2);
     42
     43            int code;
     44            AltitudeSystem(int code) {
     45                this.code = code;
     46            }
     47
     48            public static AltitudeSystem of(int code) {
     49                for (AltitudeSystem s : values()) {
     50                    if (s.code == code) {
     51                        return s;
     52                    }
     53                }
     54                throw new IllegalArgumentException(Integer.toString(code));
     55            }
     56        }
     57
     58        ReferenceType type;
     59        String name;
     60        String code;
     61        int nDim;
     62        AltitudeSystem altitudeSystem;
     63        String unit;
     64
     65        CoorReference(String type) {
     66            super(type);
     67        }
     68
     69        @Override
     70        void processRecord(EdigeoRecord r) {
     71            switch (r.name) {
     72            case "RET": type = ReferenceType.of(safeGet(r)); break;
     73            case "REN": name = safeGetAndLog(r, tr("Projection")); break;
     74            case "REL": code = safeGetAndLog(r, tr("Projection")); break;
     75            case "DIM": nDim = safeGetInt(r); break;
     76            case "ALS": altitudeSystem = AltitudeSystem.of(safeGetInt(r)); break;
     77            case "UNH": unit = safeGet(r); break;
     78            default:
     79                super.processRecord(r);
     80            }
     81        }
     82
     83        /**
     84         * Returns reference type.
     85         * @return reference type
     86         */
     87        public final ReferenceType getReferenceType() {
     88            return type;
     89        }
     90
     91        /**
     92         * Returns reference name.
     93         * @return reference name
     94         */
     95        public final String getReferenceName() {
     96            return name;
     97        }
     98
     99        /**
     100         * Returns reference code.
     101         * @return reference code
     102         */
     103        public final String getReferenceCode() {
     104            return code;
     105        }
     106
     107        /**
     108         * Returns number of dimensions.
     109         * @return number of dimensions
     110         */
     111        public final int getNumberOfDimensions() {
     112            return nDim;
     113        }
     114
     115        /**
     116         * Returns altitude system.
     117         * @return altitude system
     118         */
     119        public final AltitudeSystem getAltitudeSystem() {
     120            return altitudeSystem;
     121        }
     122
     123        /**
     124         * Returns unit.
     125         * @return unit
     126         */
     127        public final String getUnit() {
     128            return unit;
     129        }
     130    }
    11131
    12132    /**
     
    21141    @Override
    22142    protected Block createBlock(String type) {
    23         // TODO Auto-generated method stub
    24         return null;
     143        if ("GEO".equals(type)) {
     144            return new CoorReference(type);
     145        }
     146        throw new IllegalArgumentException(type);
    25147    }
    26 
    27148}
Note: See TracChangeset for help on using the changeset viewer.