Ignore:
Timestamp:
2018-06-26T23:54:13+02:00 (6 years ago)
Author:
donvip
Message:

download cadastral data directly from Etalab GeoAPI

Location:
applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre
Files:
1 added
10 edited

Legend:

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

    r34115 r34355  
    3333import org.openstreetmap.josm.gui.MainMenu;
    3434import org.openstreetmap.josm.gui.MapFrame;
     35import org.openstreetmap.josm.gui.download.DownloadDialog;
    3536import org.openstreetmap.josm.gui.layer.Layer;
    3637import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
     
    4950import org.openstreetmap.josm.plugins.fr.cadastre.actions.mapmode.WMSAdjustAction;
    5051import org.openstreetmap.josm.plugins.fr.cadastre.actions.upload.CheckSourceUploadHook;
     52import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadSource;
    5153import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadTask;
    5254import org.openstreetmap.josm.plugins.fr.cadastre.edigeo.pci.EdigeoPciImporter;
     
    233235
    234236        MainApplication.getMenu().openLocation.addDownloadTaskClass(CadastreDownloadTask.class);
    235         //DownloadDialog.addDownloadSource(new CadastreDownloadSource());
     237        DownloadDialog.addDownloadSource(new CadastreDownloadSource());
    236238    }
    237239
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/download/CadastreDownloadData.java

    r34223 r34355  
    4242    }
    4343
    44     final boolean isDownloadWater() {
     44    public final boolean isDownloadWater() {
    4545        return downloadWater;
    4646    }
    4747
    48     final boolean isDownloadBuilding() {
     48    public final boolean isDownloadBuilding() {
    4949        return downloadBuilding;
    5050    }
    5151
    52     final boolean isDownloadSymbol() {
     52    public final boolean isDownloadSymbol() {
    5353        return downloadSymbol;
    5454    }
    5555
    56     final boolean isDownloadParcel() {
     56    public final boolean isDownloadParcel() {
    5757        return downloadParcel;
    5858    }
    5959
    60     final boolean isDownloadParcelNumber() {
     60    public final boolean isDownloadParcelNumber() {
    6161        return downloadParcelNumber;
    6262    }
    6363
    64     final boolean isDownloadAddress() {
     64    public final boolean isDownloadAddress() {
    6565        return downloadAddress;
    6666    }
    6767
    68     final boolean isDownloadLocality() {
     68    public final boolean isDownloadLocality() {
    6969        return downloadLocality;
    7070    }
    7171
    72     final boolean isDownloadSection() {
     72    public final boolean isDownloadSection() {
    7373        return downloadSection;
    7474    }
    7575
    76     final boolean isDownloadCommune() {
     76    public final boolean isDownloadCommune() {
    7777        return downloadCommune;
    7878    }
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/download/CadastreDownloadSource.java

    r33675 r34355  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import org.openstreetmap.josm.actions.downloadtasks.DownloadParams;
     7import org.openstreetmap.josm.data.osm.UploadPolicy;
    68import org.openstreetmap.josm.gui.download.AbstractDownloadSourcePanel;
    79import org.openstreetmap.josm.gui.download.DownloadDialog;
     
    2123    @Override
    2224    public void doDownload(CadastreDownloadData data, DownloadSettings settings) {
    23         // TODO download from cadastre API
     25        if (settings.getDownloadBounds().isPresent()) {
     26            new CadastreDownloadTask(data).download(
     27                    new DownloadParams().withUploadPolicy(UploadPolicy.BLOCKED).withNewLayer(settings.asNewLayer()),
     28                    settings.getDownloadBounds().get(), null);
     29        }
    2430    }
    2531
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/download/CadastreDownloadTask.java

    r34290 r34355  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.io.File;
     7import java.io.IOException;
     8import java.util.ArrayList;
     9import java.util.List;
     10import java.util.Objects;
     11import java.util.concurrent.ExecutionException;
    612import java.util.concurrent.Future;
     13import java.util.stream.Stream;
    714
    815import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
    916import org.openstreetmap.josm.actions.downloadtasks.DownloadParams;
    1017import org.openstreetmap.josm.data.Bounds;
     18import org.openstreetmap.josm.data.osm.DataSet;
     19import org.openstreetmap.josm.data.osm.DownloadPolicy;
     20import org.openstreetmap.josm.data.osm.UploadPolicy;
    1121import org.openstreetmap.josm.gui.MainApplication;
    1222import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1323import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     24import org.openstreetmap.josm.plugins.fr.cadastre.api.CadastreAPI;
     25import org.openstreetmap.josm.tools.Logging;
    1426
    1527/**
     
    1830public class CadastreDownloadTask extends DownloadOsmTask {
    1931
     32    private static final String CADASTRE_URL = "https://cadastre.data.gouv.fr/data/dgfip-pci-vecteur/latest/edigeo/feuilles";
     33
     34    private final CadastreDownloadData data;
     35
     36    /**
     37     * Constructs a new {@code CadastreDownloadTask} with default behaviour.
     38     */
     39    public CadastreDownloadTask() {
     40        this(new CadastreDownloadData(true, true, true, true, true, true, true, true, true));
     41    }
     42
     43    /**
     44     * Constructs a new {@code CadastreDownloadTask} with parameterizable behaviour.
     45     * @param data defines which data has to be downloaded
     46     */
     47    public CadastreDownloadTask(CadastreDownloadData data) {
     48        this.data = Objects.requireNonNull(data);
     49    }
     50
    2051    @Override
    21     public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) {
    22         return null;
     52    public Future<?> download(DownloadParams settings, Bounds downloadArea, ProgressMonitor progressMonitor) {
     53        List<Future<?>> tasks = new ArrayList<>();
     54        try {
     55            for (String id : CadastreAPI.getSheets(downloadArea)) {
     56                String url = String.join("/", CADASTRE_URL, id.substring(0, 2), id.substring(0, 5), "edigeo-"+id+".tar.bz2");
     57                tasks.add(MainApplication.worker.submit(new InternalDownloadTask(settings, url, progressMonitor)));
     58            }
     59        } catch (IOException e) {
     60            Logging.error(e);
     61        }
     62        return MainApplication.worker.submit(() -> {
     63            for (Future<?> f : tasks) {
     64                try {
     65                    f.get();
     66                } catch (InterruptedException | ExecutionException e) {
     67                    Logging.error(e);
     68                }
     69            }
     70        });
    2371    }
    2472
     
    4088    }
    4189
     90    static class CadastreDataLayer extends OsmDataLayer {
     91
     92        CadastreDataLayer(DataSet data, String name, File associatedFile) {
     93            super(data, name, associatedFile);
     94        }
     95    }
     96
    4297    class InternalDownloadTask extends DownloadTask {
    4398
     
    45100
    46101        InternalDownloadTask(DownloadParams settings, String url, ProgressMonitor progressMonitor) {
    47             super(settings, new CadastreServerReader(url), progressMonitor);
     102            super(settings, new CadastreServerReader(url, data), progressMonitor);
    48103            this.url = url;
    49104        }
    50105
    51106        @Override
    52         protected OsmDataLayer createNewLayer(String layerName) {
    53             return super.createNewLayer(layerName != null ? layerName : url.substring(url.lastIndexOf('/')+1));
     107        protected CadastreDataLayer createNewLayer(String layerName) {
     108            String realLayerName = layerName != null ? layerName : url.substring(url.lastIndexOf('/')+1);
     109            if (realLayerName == null || realLayerName.isEmpty()) {
     110                realLayerName = settings.getLayerName();
     111            }
     112            if (realLayerName == null || realLayerName.isEmpty()) {
     113                realLayerName = OsmDataLayer.createNewName();
     114            }
     115            dataSet.setDownloadPolicy(DownloadPolicy.BLOCKED);
     116            dataSet.setUploadPolicy(UploadPolicy.BLOCKED);
     117            return new CadastreDataLayer(dataSet, realLayerName, null);
     118        }
     119
     120        private Stream<CadastreDataLayer> getCadastreDataLayers() {
     121            return MainApplication.getLayerManager().getLayersOfType(CadastreDataLayer.class).stream();
     122        }
     123
     124        @Override
     125        protected long getNumModifiableDataLayers() {
     126            return getCadastreDataLayers().count();
     127        }
     128
     129        @Override
     130        protected CadastreDataLayer getFirstModifiableDataLayer() {
     131            return getCadastreDataLayers().findFirst().orElse(null);
    54132        }
    55133    }
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/download/CadastreServerReader.java

    r33680 r34355  
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     5
     6import java.util.Objects;
    57
    68import org.openstreetmap.josm.data.osm.DataSet;
     
    1618
    1719    private final String url;
     20    private final CadastreDownloadData data;
    1821
    1922    /**
    2023     * Constructs a new {@code CadastreServerReader}.
    2124     * @param url source URL
     25     * @param data defines which data has to be downloaded
    2226     */
    23     public CadastreServerReader(String url) {
    24         this.url = url;
     27    public CadastreServerReader(String url, CadastreDownloadData data) {
     28        this.url = Objects.requireNonNull(url);
     29        this.data = Objects.requireNonNull(data);
    2530    }
    2631
     
    2934        try {
    3035            progressMonitor.beginTask(tr("Contacting Server...", 10));
    31             return new EdigeoPciImporter().parseDataSet(url);
     36            return new EdigeoPciImporter().parseDataSet(url, data);
    3237        } catch (Exception e) {
    3338            throw new OsmTransferException(e);
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFile.java

    r33661 r34355  
    1717import org.openstreetmap.josm.data.coor.EastNorth;
    1818import org.openstreetmap.josm.data.osm.DataSet;
     19import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadData;
    1920import org.openstreetmap.josm.tools.Logging;
    2021
     
    212213    }
    213214
    214     EdigeoFile fill(DataSet ds) {
     215    EdigeoFile fill(DataSet ds, CadastreDownloadData data) {
    215216        // To be overriden if relevant
    216217        return this;
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileTHF.java

    r33663 r34355  
    1515import org.openstreetmap.josm.command.SequenceCommand;
    1616import org.openstreetmap.josm.data.osm.DataSet;
     17import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadData;
    1718import org.openstreetmap.josm.tools.Logging;
    1819
     
    278279        }
    279280
    280         void fill(DataSet ds) {
    281             allFiles.forEach(f -> f.fill(ds));
     281        void fill(DataSet ds, CadastreDownloadData data) {
     282            allFiles.forEach(f -> f.fill(ds, data));
    282283        }
    283284
     
    487488
    488489    @Override
    489     public EdigeoFileTHF fill(DataSet ds) {
    490         super.fill(ds);
     490    public EdigeoFileTHF fill(DataSet ds, CadastreDownloadData data) {
     491        super.fill(ds, data);
    491492        for (Lot lot : getLots()) {
    492493            //ds.addDataSource(new DataSource(lot.gen.getGeoBounds().getBounds(), support.author));
    493             lot.fill(ds);
     494            lot.fill(ds, data);
    494495        }
    495496        ds.getWays().forEach(w -> {
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileVEC.java

    r34140 r34355  
    1212import java.util.Objects;
    1313import java.util.function.BiConsumer;
     14import java.util.function.BiPredicate;
    1415import java.util.function.Predicate;
    1516import java.util.stream.Collectors;
     
    1718
    1819import org.openstreetmap.josm.actions.CreateMultipolygonAction;
     20import org.openstreetmap.josm.command.PurgeCommand;
    1921import org.openstreetmap.josm.command.SequenceCommand;
    2022import org.openstreetmap.josm.data.coor.EastNorth;
     
    2931import org.openstreetmap.josm.data.projection.Projection;
    3032import org.openstreetmap.josm.plugins.fr.cadastre.CadastrePlugin;
     33import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadData;
    3134import org.openstreetmap.josm.plugins.fr.cadastre.edigeo.EdigeoFileSCD.McdAttributeDef;
    3235import org.openstreetmap.josm.plugins.fr.cadastre.edigeo.EdigeoFileSCD.McdConstructionRelationDef;
     
    437440
    438441    private static final List<Predicate<ObjectBlock>> ignoredObjects = new ArrayList<>();
    439     private static final List<Pair<Predicate<ObjectBlock>, BiConsumer<ObjectBlock, OsmPrimitive>>> postProcessors = new ArrayList<>();
     442    private static final List<EdigeoPostProcessor> postProcessors = new ArrayList<>();
    440443
    441444    /**
     
    482485     * @param predicate predicate to match
    483486     */
    484     public static void addObjectPostProcessor(BiConsumer<ObjectBlock, OsmPrimitive> consumer, Predicate<ObjectBlock> predicate) {
    485         postProcessors.add(new Pair<>(Objects.requireNonNull(predicate, "predicate"), Objects.requireNonNull(consumer, "consumer")));
     487    public static void addObjectPostProcessor(
     488            BiConsumer<ObjectBlock, OsmPrimitive> consumer,
     489            Predicate<ObjectBlock> predicate, BiPredicate<CadastreDownloadData, OsmPrimitive> filter) {
     490        postProcessors.add(new EdigeoPostProcessor(predicate, filter, consumer));
    486491    }
    487492
     
    492497     * @param values attribute values
    493498     */
    494     public static void addObjectPostProcessor(BiConsumer<ObjectBlock, OsmPrimitive> consumer, String key, String... values) {
    495         postProcessors.add(new Pair<>(predicate(key, values), Objects.requireNonNull(consumer, "consumer")));
     499    public static void addObjectPostProcessor(
     500            BiConsumer<ObjectBlock, OsmPrimitive> consumer,
     501            BiPredicate<CadastreDownloadData, OsmPrimitive> filter, String key, String... values) {
     502        postProcessors.add(new EdigeoPostProcessor(predicate(key, values), filter, consumer));
    496503    }
    497504
     
    501508     * @param keyValues OSM attribute key/values (int the form {@code foo=bar;bar=baz})
    502509     */
    503     public static void addObjectPostProcessor(String symId, String keyValues) {
    504         postProcessors.add(new Pair<>(predicate("SYM_id", symId), (o, p) -> {
     510    public static void addObjectPostProcessor(String symId, BiPredicate<CadastreDownloadData, OsmPrimitive> filter, String keyValues) {
     511        postProcessors.add(new EdigeoPostProcessor(predicate("SYM_id", symId), filter, (o, p) -> {
    505512            p.remove("SYM_id");
    506513            for (String tag : keyValues.split(";")) {
     
    545552
    546553    @Override
    547     EdigeoFileVEC fill(DataSet ds) {
    548         super.fill(ds);
     554    EdigeoFileVEC fill(DataSet ds, CadastreDownloadData data) {
     555        super.fill(ds, data);
    549556        Projection proj = lot.geo.getCoorReference().getProjection();
     557        List<OsmPrimitive> toPurge = new ArrayList<>();
    550558        for (ObjectBlock obj : getObjects()) {
    551559            if (!ignoredObjects.stream().anyMatch(p -> p.test(obj))) {
     
    559567                }
    560568                if (p != null) {
    561                     for (Pair<Predicate<ObjectBlock>, BiConsumer<ObjectBlock, OsmPrimitive>> e : postProcessors) {
    562                         if (e.a.test(obj)) {
    563                             e.b.accept(obj, p);
     569                    boolean purged = false;
     570                    for (EdigeoPostProcessor e : postProcessors) {
     571                        if (e.predicate.test(obj)) {
     572                            if (e.filter.test(data, p)) {
     573                                purged = toPurge.add(p);
     574                                if (p instanceof Relation) {
     575                                    toPurge.addAll(((Relation) p).getMemberPrimitivesList());
     576                                }
     577                            } else {
     578                                e.consumer.accept(obj, p);
     579                            }
    564580                        }
    565581                    }
    566                     if (p.isTagged()) {
     582                    if (!purged && p.isTagged()) {
    567583                        p.put("source", CadastrePlugin.source);
    568584                    }
    569585                }
    570586            }
     587        }
     588        if (!toPurge.isEmpty()) {
     589            PurgeCommand.build(toPurge, null).executeCommand();
    571590        }
    572591        return this;
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciImporter.java

    r33680 r34355  
    99import java.io.IOException;
    1010import java.io.InputStream;
     11import java.util.Objects;
    1112
    1213import org.openstreetmap.josm.actions.ExtensionFileFilter;
     
    1718import org.openstreetmap.josm.io.CachedFile;
    1819import org.openstreetmap.josm.io.IllegalDataException;
     20import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadData;
    1921import org.openstreetmap.josm.tools.Logging;
    2022
     
    2830
    2931    protected File file;
     32    protected CadastreDownloadData data;
    3033
    3134    /**
     
    5255    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance) throws IllegalDataException {
    5356        try {
    54             return EdigeoPciReader.parseDataSet(in, file, instance);
     57            return EdigeoPciReader.parseDataSet(in, file, data, instance);
    5558        } catch (IOException e) {
    5659            throw new IllegalDataException(e);
     
    6164     * Import data from an URL.
    6265     * @param source source URL
     66     * @param data defines which data has to be downloaded
    6367     * @return imported data set
    6468     * @throws IOException if any I/O error occurs
    6569     * @throws IllegalDataException if an error was found while parsing the data
    6670     */
    67     public DataSet parseDataSet(final String source) throws IOException, IllegalDataException {
     71    public DataSet parseDataSet(final String source, CadastreDownloadData data) throws IOException, IllegalDataException {
    6872        try (CachedFile cf = new CachedFile(source)) {
    6973            this.file = cf.getFile();
     74            this.data = Objects.requireNonNull(data);
    7075            return parseDataSet(cf.getInputStream(), NullProgressMonitor.INSTANCE);
    7176        }
  • applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciReader.java

    r34115 r34355  
    1414import java.util.Map;
    1515import java.util.Map.Entry;
     16import java.util.function.BiPredicate;
    1617import java.util.function.Predicate;
    1718
     
    2930import org.openstreetmap.josm.io.AbstractReader;
    3031import org.openstreetmap.josm.io.IllegalDataException;
     32import org.openstreetmap.josm.plugins.fr.cadastre.download.CadastreDownloadData;
    3133import org.openstreetmap.josm.plugins.fr.cadastre.edigeo.EdigeoFileTHF;
    3234import org.openstreetmap.josm.plugins.fr.cadastre.edigeo.EdigeoFileVEC;
     35import org.openstreetmap.josm.tools.Logging;
    3336import org.openstreetmap.josm.tools.Utils;
    3437
     
    3740 */
    3841public class EdigeoPciReader extends AbstractReader {
     42
     43    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> water = (x, p) -> !x.isDownloadWater();
     44    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> build = (x, p) -> !x.isDownloadBuilding();
     45    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> symbo = (x, p) -> !x.isDownloadSymbol();
     46    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> parce = (x, p) -> !x.isDownloadParcel();
     47    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> parcn = (x, p) -> !x.isDownloadParcelNumber();
     48    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> addre = (x, p) -> !x.isDownloadAddress();
     49    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> local = (x, p) -> !x.isDownloadLocality();
     50    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> secti = (x, p) -> !x.isDownloadSection();
     51    private static final BiPredicate<CadastreDownloadData, OsmPrimitive> commu = (x, p) -> !x.isDownloadCommune();
    3952
    4053    private static final Map<String, List<String>> highways = new HashMap<>();
     
    5669                "31", // Connecting arrows between parcelles and numbers
    5770                "62", // "Sports ground, small streams". What the fuck France?
    58                 "64"  // "parking, terrace, overhang". What the fuck France?
     71                "64", // "parking, terrace, overhang". What the fuck France?
     72                "98"  // "various punctual objects". What the fuck France?
    5973        );
    6074
    6175        // SYM_id mapping
    62         EdigeoFileVEC.addObjectPostProcessor("12", "historic=wayside_cross"); // Calvaire
    63         EdigeoFileVEC.addObjectPostProcessor("14", "amenity=place_of_worship;religion=christian"); // Church
    64         EdigeoFileVEC.addObjectPostProcessor("15", "amenity=place_of_worship;religion=muslim"); // Mosque
    65         EdigeoFileVEC.addObjectPostProcessor("16", "amenity=place_of_worship;religion=jewish"); // Synagogue
    66         EdigeoFileVEC.addObjectPostProcessor("17", "boundary=administrative;admin_level=2"); // State limit
    67         EdigeoFileVEC.addObjectPostProcessor("18", "boundary=administrative;admin_level=6"); // Department limit
    68         EdigeoFileVEC.addObjectPostProcessor("19", "boundary=administrative;admin_level=8"); // Municipality limit trigger
    69         EdigeoFileVEC.addObjectPostProcessor("21", "highway=road"); // Way
    70         EdigeoFileVEC.addObjectPostProcessor("22", "highway=road"); // Road trigger
     76        EdigeoFileVEC.addObjectPostProcessor("12", symbo, "historic=wayside_cross"); // Calvaire
     77        EdigeoFileVEC.addObjectPostProcessor("14", symbo, "amenity=place_of_worship;religion=christian"); // Church
     78        EdigeoFileVEC.addObjectPostProcessor("15", symbo, "amenity=place_of_worship;religion=muslim"); // Mosque
     79        EdigeoFileVEC.addObjectPostProcessor("16", symbo, "amenity=place_of_worship;religion=jewish"); // Synagogue
     80        EdigeoFileVEC.addObjectPostProcessor("17", commu, "boundary=administrative;admin_level=2"); // State limit
     81        EdigeoFileVEC.addObjectPostProcessor("18", commu, "boundary=administrative;admin_level=6"); // Department limit
     82        EdigeoFileVEC.addObjectPostProcessor("19", commu, "boundary=administrative;admin_level=8"); // Municipality limit trigger
     83        EdigeoFileVEC.addObjectPostProcessor("21", symbo, "highway=road"); // Way
     84        EdigeoFileVEC.addObjectPostProcessor("22", symbo, "highway=road"); // Road trigger
    7185        EdigeoFileVEC.addObjectPostProcessor((o, p) -> { // Path / Footway
    7286            String highwayValue = "path";
     
    8195            p.put("highway", highwayValue);
    8296            p.remove("SYM_id");
    83         }, "SYM_id", "23"); // Path / Footway
    84         EdigeoFileVEC.addObjectPostProcessor("24", "man_made=pipeline"); // Pipeline
    85         EdigeoFileVEC.addObjectPostProcessor("25", "man_made=pipeline"); // Aqueduct
    86         EdigeoFileVEC.addObjectPostProcessor("26", "aerialway=cable_car"); // Aerialway
    87         EdigeoFileVEC.addObjectPostProcessor("27", "power=line"); // Force transport line
    88         EdigeoFileVEC.addObjectPostProcessor("29", "railway=rail"); // Railway
    89         EdigeoFileVEC.addObjectPostProcessor("33", "bridge=yes"); // Bridge
    90         EdigeoFileVEC.addObjectPostProcessor("34", "landuse=reservoir;natural=water;water=reservoir"); // reservoir, lake
    91         EdigeoFileVEC.addObjectPostProcessor("37", "tunnel=yes"); // Tunnel
    92         EdigeoFileVEC.addObjectPostProcessor("47", "railway=halt"); // Halt
    93         EdigeoFileVEC.addObjectPostProcessor("48", "railway=stop"); // Stop
    94         EdigeoFileVEC.addObjectPostProcessor("49", "railway=station"); // Station
    95         EdigeoFileVEC.addObjectPostProcessor("50", "man_made=mast"); // Pylon
    96         EdigeoFileVEC.addObjectPostProcessor("51", "landuse=cemetery;religion=christian"); // Christian cemetery
    97         EdigeoFileVEC.addObjectPostProcessor("52", "landuse=cemetery;religion=muslim"); // Muslim cemetery
    98         EdigeoFileVEC.addObjectPostProcessor("53", "landuse=cemetery;religion=jewish"); // Jewish cemetery
    99         EdigeoFileVEC.addObjectPostProcessor("63", "man_made=water_well"); // Well
    100         EdigeoFileVEC.addObjectPostProcessor("65", "leisure=swimming_pool;access=private"); // Swimming pool
     97        }, symbo, "SYM_id", "23"); // Path / Footway
     98        EdigeoFileVEC.addObjectPostProcessor("24", symbo, "man_made=pipeline"); // Pipeline
     99        EdigeoFileVEC.addObjectPostProcessor("25", symbo, "man_made=pipeline"); // Aqueduct
     100        EdigeoFileVEC.addObjectPostProcessor("26", symbo, "aerialway=cable_car"); // Aerialway
     101        EdigeoFileVEC.addObjectPostProcessor("27", symbo, "power=line"); // Force transport line
     102        EdigeoFileVEC.addObjectPostProcessor("29", symbo, "railway=rail"); // Railway
     103        EdigeoFileVEC.addObjectPostProcessor("33", symbo, "bridge=yes"); // Bridge
     104        EdigeoFileVEC.addObjectPostProcessor("34", water, "landuse=reservoir;natural=water;water=reservoir"); // reservoir, lake
     105        EdigeoFileVEC.addObjectPostProcessor("37", symbo, "tunnel=yes"); // Tunnel
     106        EdigeoFileVEC.addObjectPostProcessor("47", symbo, "railway=halt"); // Halt
     107        EdigeoFileVEC.addObjectPostProcessor("48", symbo, "railway=stop"); // Stop
     108        EdigeoFileVEC.addObjectPostProcessor("49", symbo, "railway=station"); // Station
     109        EdigeoFileVEC.addObjectPostProcessor("50", symbo, "man_made=mast"); // Pylon
     110        EdigeoFileVEC.addObjectPostProcessor("51", symbo, "landuse=cemetery;religion=christian"); // Christian cemetery
     111        EdigeoFileVEC.addObjectPostProcessor("52", symbo, "landuse=cemetery;religion=muslim"); // Muslim cemetery
     112        EdigeoFileVEC.addObjectPostProcessor("53", symbo, "landuse=cemetery;religion=jewish"); // Jewish cemetery
     113        EdigeoFileVEC.addObjectPostProcessor("63", symbo, "man_made=water_well"); // Well
     114        EdigeoFileVEC.addObjectPostProcessor("65", water, "leisure=swimming_pool;access=private"); // Swimming pool
    101115
    102116        // Mapping TEX*_id => name (first step)
     
    113127            }
    114128            setName(p, sb.toString());
    115         }, "TEX_id");
     129        }, (x, p) -> false, "TEX_id");
    116130
    117131        // Objects mapping
     
    131145                }
    132146            }
    133         }, o -> o.hasScdIdentifier("ZONCOMMUNI_id"));
     147        }, o -> o.hasScdIdentifier("ZONCOMMUNI_id"), symbo);
    134148
    135149        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     
    140154            p.remove("IDU_id");
    141155            p.remove("TEX2_id");
    142         }, o -> o.hasScdIdentifier("COMMUNE_id"));
     156        }, o -> o.hasScdIdentifier("COMMUNE_id"), commu);
    143157
    144158        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     
    158172            p.remove("SUPF_id");
    159173        }, o -> o.hasScdIdentifier("SECTION_id") || o.hasScdIdentifier("SUBDSECT_id")
    160              || o.hasScdIdentifier("PARCELLE_id") || o.hasScdIdentifier("SUBDFISC_id") || o.hasScdIdentifier("CHARGE_id"));
    161 
    162         EdigeoFileVEC.addObjectPostProcessor((o, p) -> p.put("wall", "no"), "DUR_id", "02");
     174             || o.hasScdIdentifier("PARCELLE_id") || o.hasScdIdentifier("SUBDFISC_id") || o.hasScdIdentifier("CHARGE_id"), parce);
     175
     176        EdigeoFileVEC.addObjectPostProcessor((o, p) -> p.put("wall", "no"), build, "DUR_id", "02");
    163177        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    164178            p.put("building", "yes");
    165179            p.remove("DUR_id");
    166         }, o -> o.hasScdIdentifier("BATIMENT_id"));
     180        }, o -> o.hasScdIdentifier("BATIMENT_id"), build);
    167181
    168182        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    169183            p.put("addr:housenumber", p.get("name"));
    170184            p.remove("name");
    171         }, o -> o.hasScdIdentifier("NUMVOIE_id"));
     185        }, o -> o.hasScdIdentifier("NUMVOIE_id"), addre);
    172186
    173187        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    174188            p.put("place", "unknown");
    175189            p.put("fixme", "place type");
    176         }, o -> o.hasScdIdentifier("LIEUDIT_id"));
     190        }, o -> o.hasScdIdentifier("LIEUDIT_id"), local);
    177191
    178192        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    179193            p.remove("ORI_id");
    180         }, o -> o.hasScdIdentifier("TPOINT_id"));
     194        }, o -> o.hasScdIdentifier("TPOINT_id"), (x, p) -> false);
    181195
    182196        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    183197            p.put("highway", "road");
    184198            p.put("area", "yes");
    185         }, o -> o.hasScdIdentifier("TRONROUTE_id"));
     199        }, o -> o.hasScdIdentifier("TRONROUTE_id"), symbo);
    186200
    187201        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
    188202            p.put("waterway", "riverbank");
    189         }, o -> o.hasScdIdentifier("TRONFLUV_id"));
     203        }, o -> o.hasScdIdentifier("TRONFLUV_id"), water);
    190204
    191205        // Mapping TEX*_id => name (last step)
     
    194208                setName(p, p.get(t));
    195209                p.remove(t);
    196             }, t);
    197         }
     210            }, (x, p) -> false, t);
     211        }
     212
     213        // Allow to filter parcel numbers
     214        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     215            // Do nothing
     216        }, o -> true, (x, p) -> {
     217            try {
     218                return !x.isDownloadParcelNumber() && p.getNumKeys() == 1 && p.hasKey("name") && Integer.parseInt(p.get("name")) > -1;
     219            } catch (NumberFormatException e) {
     220                Logging.trace(e);
     221                return false;
     222            }
     223        });
     224
     225        // Allow to filter labels
     226        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
     227            // Do nothing
     228        }, o -> true, (x, p) -> {
     229            try {
     230                return !x.isDownloadSymbol() && p.getNumKeys() == 1 && p.hasKey("name") && Integer.parseInt(p.get("name")) <= -1;
     231            } catch (NumberFormatException e) {
     232                Logging.trace(e);
     233                return true;
     234            }
     235        });
    198236    }
    199237
     
    228266    }
    229267
    230     static DataSet parseDataSet(InputStream in, File file, ProgressMonitor instance) throws IOException {
     268    static DataSet parseDataSet(InputStream in, File file, CadastreDownloadData data, ProgressMonitor instance) throws IOException {
    231269        if (in != null) {
    232270            in.close();
    233271        }
    234272        try {
    235             return new EdigeoPciReader().parse(file.toPath(), instance);
     273            return new EdigeoPciReader().parse(file.toPath(), data, instance);
    236274        } catch (IOException e) {
    237275            throw e;
     
    241279    }
    242280
    243     DataSet parse(Path path, ProgressMonitor instance) throws IOException, ReflectiveOperationException {
     281    DataSet parse(Path path, CadastreDownloadData data, ProgressMonitor instance) throws IOException, ReflectiveOperationException {
    244282        Path tmpDir = null;
    245283        Path thfPath = path;
     
    265303                }
    266304            }
    267             DataSet data = new DataSet();
    268             data.setUploadPolicy(UploadPolicy.DISCOURAGED);
    269             EdigeoFileTHF thf = new EdigeoFileTHF(thfPath).read().fill(data);
    270             data.setName(thf.getSupport().getBlockIdentifier());
    271             return data;
     305            DataSet ds = new DataSet();
     306            ds.setUploadPolicy(UploadPolicy.BLOCKED);
     307            EdigeoFileTHF thf = new EdigeoFileTHF(thfPath).read().fill(ds, data);
     308            ds.setName(thf.getSupport().getBlockIdentifier());
     309            return ds;
    272310        } finally {
    273311            if (tmpDir != null) {
Note: See TracChangeset for help on using the changeset viewer.