Ignore:
Timestamp:
2017-09-30T02:22:48+02:00 (7 years ago)
Author:
donvip
Message:

Edigeo: cleanup data

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/EdigeoFileVEC.java

    r33665 r33685  
    455455    }
    456456
     457    /**
     458     * Adds a predicate to ignore special types of objects based on their SCD identifier.
     459     * @param types SCD identifiers to ignore
     460     */
     461    public static void addIgnoredScdObjects(String... types) {
     462        addIgnoredObject(o -> Arrays.asList(types).contains(o.scdRef.identifier));
     463    }
     464
    457465    private static Predicate<ObjectBlock> predicate(String key, String... values) {
    458466        return o -> {
     
    564572    private static <T extends OsmPrimitive> T addPrimitiveAndTags(DataSet ds, ObjectBlock obj, T osm) {
    565573        if (osm != null) {
    566             osm.put("cadastre_scd", obj.scdRef.identifier);
    567574            for (int i = 0; i < obj.nAttributes; i++) {
    568                 osm.put(obj.attributeDefs.get(i).identifier, obj.attributeValues.get(i));
     575                String key = obj.attributeDefs.get(i).identifier;
     576                if (!key.startsWith("ID_S_ATT_")) { // Ignore Z_1_2_2 text attributes
     577                    osm.put(key, obj.attributeValues.get(i));
     578                }
    569579            }
    570580            if (osm.getDataSet() == null) {
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciReader.java

    r33671 r33685  
    1414import java.util.Map;
    1515import java.util.Map.Entry;
     16import java.util.function.Predicate;
    1617
    1718import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
     
    1920import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
    2021import org.apache.commons.compress.utils.IOUtils;
     22import org.apache.commons.lang3.StringUtils;
     23import org.apache.commons.text.WordUtils;
    2124import org.openstreetmap.josm.data.osm.DataSet;
    2225import org.openstreetmap.josm.data.osm.DataSet.UploadPolicy;
    2326import org.openstreetmap.josm.data.osm.OsmPrimitive;
     27import org.openstreetmap.josm.data.osm.Way;
    2428import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2529import org.openstreetmap.josm.io.AbstractReader;
     
    4246
    4347        // Ignored objects
    44         EdigeoFileVEC.addIgnoredObject("PTCANV_id");  // Canvas point
    45         EdigeoFileVEC.addIgnoredObject("BORNE_id");   // Property boundary marker
    46         EdigeoFileVEC.addIgnoredObject("BOULON_id");  // Property boundary marker for Alsace and Moselle
    47         EdigeoFileVEC.addIgnoredObject("CROIX_id");   // Property boundary marker for Alsace and Moselle
    48         EdigeoFileVEC.addIgnoredObject("SYMBLIM_id"); // Common wall symbol
     48        EdigeoFileVEC.addIgnoredScdObjects(
     49                "PTCANV_id",   // Canvas point
     50                "BORNE_id",    // Property boundary marker
     51                "BOULON_id",   // Property boundary marker for Alsace and Moselle
     52                "CROIX_id",    // Property boundary marker for Alsace and Moselle
     53                "SYMBLIM_id"); // Common wall symbol
    4954        EdigeoFileVEC.addIgnoredObject("SYM_id",
    5055                "30", // Water stream arrow
     
    6469        EdigeoFileVEC.addObjectPostProcessor("21", "highway=road"); // Way
    6570        EdigeoFileVEC.addObjectPostProcessor("22", "highway=road"); // Road trigger
    66         EdigeoFileVEC.addObjectPostProcessor("23", "highway=path"); // Path
     71        EdigeoFileVEC.addObjectPostProcessor((o, p) -> { // Path / Footway
     72            String highwayValue = "path";
     73            if (p instanceof Way) {
     74                Way w = (Way) p;
     75                Predicate<Way> isBuilding = x -> x.hasKey("building");
     76                if (w.firstNode().getParentWays().stream().anyMatch(isBuilding)
     77                  || w.lastNode().getParentWays().stream().anyMatch(isBuilding)) {
     78                    highwayValue = "footway";
     79                }
     80            }
     81            p.put("highway", highwayValue);
     82            p.remove("SYM_id");
     83        }, "SYM_id", "23"); // Path / Footway
    6784        EdigeoFileVEC.addObjectPostProcessor("24", "man_made=pipeline"); // Pipeline
    6885        EdigeoFileVEC.addObjectPostProcessor("25", "man_made=pipeline"); // Aqueduct
     
    83100        EdigeoFileVEC.addObjectPostProcessor("65", "leisure=swimming_pool;access=private"); // Swimming pool
    84101
    85         // Mapping TEX*_id => name
     102        // Mapping TEX*_id => name (first step)
    86103        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    87104            StringBuffer sb = new StringBuffer(p.get("TEX_id").trim());
     
    95112                p.remove(t);
    96113            }
    97             p.put("name", sb.toString().replaceAll("    ", " ").replaceAll("   ", " ").replaceAll("  ", " "));
     114            setName(p, sb.toString());
    98115        }, "TEX_id");
    99116
     
    120137            p.put("admin_level", "8");
    121138            p.put("ref:INSEE", "XX"+p.get("IDU_id")); // TODO: find department number
    122             p.put("name", p.get("TEX2_id")); // TODO: lowercase
     139            p.put("name", WordUtils.capitalizeFully(p.get("TEX2_id")));
    123140            p.remove("IDU_id");
    124141            p.remove("TEX2_id");
     
    129146            p.put("ref", p.get("IDU_id"));
    130147            p.remove("IDU_id");
     148            p.remove("ICL_id");
     149            p.remove("COAR_id");
     150            p.remove("COPL_id");
     151            p.remove("DEDI_id");
     152            p.remove("DIS_id");
     153            p.remove("DRED_id");
     154            p.remove("EOR_id");
     155            p.remove("INDP_id");
     156            p.remove("INP_id");
     157            p.remove("QUPL_id");
     158            p.remove("SUPF_id");
    131159        }, o -> o.hasScdIdentifier("SECTION_id") || o.hasScdIdentifier("SUBDSECT_id")
    132160             || o.hasScdIdentifier("PARCELLE_id") || o.hasScdIdentifier("SUBDFISC_id") || o.hasScdIdentifier("CHARGE_id"));
     
    144172
    145173        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    146             p.put("place", "isolated_dwelling");
     174            p.put("place", "unknown");
    147175        }, o -> o.hasScdIdentifier("LIEUDIT_id"));
     176
     177        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     178            p.remove("ORI_id");
     179        }, o -> o.hasScdIdentifier("TPOINT_id"));
    148180
    149181        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     
    155187            p.put("waterway", "riverbank");
    156188        }, o -> o.hasScdIdentifier("TRONFLUV_id"));
     189
     190        // Mapping TEX*_id => name (last step)
     191        for (String t : Arrays.asList("TEX2_id", "TEX3_id", "TEX4_id", "TEX5_id", "TEX6_id", "TEX7_id", "TEX8_id", "TEX9_id")) {
     192            EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     193                setName(p, p.get(t));
     194                p.remove(t);
     195            }, t);
     196        }
     197    }
     198
     199    private static void setName(OsmPrimitive p, String input) {
     200        if (input != null) {
     201            String name = input.replaceAll("    ", " ").replaceAll("   ", " ").replaceAll("  ", " ");
     202            if (name.length() > 2 && StringUtils.isAllUpperCase(name)) {
     203                name = WordUtils.capitalizeFully(name);
     204            }
     205            p.put("name", name);
     206        }
    157207    }
    158208
Note: See TracChangeset for help on using the changeset viewer.