Ignore:
Timestamp:
2013-03-02T00:34:32+01:00 (12 years ago)
Author:
donvip
Message:

[josm_opendata] fix #josm8469 - Support of "assainissement" French data set (several nodes per line)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/AssainissementHandler.java

    r28113 r29299  
    1919import java.net.URL;
    2020import java.util.ArrayList;
     21import java.util.HashSet;
    2122import java.util.List;
     23import java.util.Map;
     24import java.util.Set;
    2225
    2326import org.openstreetmap.josm.data.osm.DataSet;
     27import org.openstreetmap.josm.data.osm.Node;
     28import org.openstreetmap.josm.data.osm.Way;
     29import org.openstreetmap.josm.plugins.opendata.core.io.tabular.DefaultSpreadSheetHandler;
     30import org.openstreetmap.josm.plugins.opendata.core.io.tabular.SpreadSheetReader.CoordinateColumns;
    2431import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
    2532import org.openstreetmap.josm.tools.Pair;
     
    3037                super("assainissement-collectif-30381843");
    3138                setName("Assainissement collectif");
    32                 getSpreadSheetHandler().setSheetNumber(1);
     39                setSpreadSheetHandler(new InternalOdsHandler());
    3340        }
    3441
     
    4047        @Override
    4148        public void updateDataSet(DataSet ds) {
    42                 // TODO Auto-generated method stub
     49                // Implemented in InternalOdsHandler.nodesAdded()
    4350        }
    4451
     
    5158                try {
    5259                        result.add(new Pair<String, URL>("Données 2009", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2.php")));
    53                         // FIXME problem with 2010 file (blank cells ?)
    54                         //result.add(new Pair<String, URL>("Données 2010", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2_2010.php")));
     60                        result.add(new Pair<String, URL>("Données 2010", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2_2010.php")));
     61                        result.add(new Pair<String, URL>("Données 2011", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2_2011.php")));
    5562                } catch (MalformedURLException e) {
    5663                        e.printStackTrace();
     
    5865                return result;
    5966        }
     67       
     68        private final class InternalOdsHandler extends DefaultSpreadSheetHandler {
     69
     70            private Node nodeWithKeys;
     71           
     72            private final Set<String> interestingKeys = new HashSet<String>();
     73           
     74        public InternalOdsHandler() {
     75            setSheetNumber(1);
     76        }
     77       
     78        private void updateTag(Node node, String odsKey, String osmKey) {
     79            String value = nodeWithKeys.get(odsKey);
     80            removeTag(odsKey);
     81            if (value != null && !value.isEmpty()) {
     82                addTag(node, osmKey, value);
     83            }
     84        }
     85       
     86        private void addTag(Node node, String osmKey, String value) {
     87            node.put(osmKey, value);
     88            interestingKeys.add(osmKey);
     89        }
     90       
     91        private void removeTag(String odsKey) {
     92            nodeWithKeys.remove(odsKey);
     93        }
     94       
     95        private void removeUninterestingTags() {
     96            for (String key : nodeWithKeys.getKeys().keySet()) {
     97                if (!interestingKeys.contains(key)) {
     98                    nodeWithKeys.remove(key);
     99                }
     100            }
     101        }
     102
     103        @Override
     104        public void nodesAdded(DataSet ds, Map<CoordinateColumns, Node> nodes, String[] header, int lineNumber) {
     105            Node steuNode = null;
     106            Node rejetNode = null;
     107            for (CoordinateColumns c : nodes.keySet()) {
     108                if (header[c.xCol].contains("STEU") && header[c.yCol].contains("STEU")) {
     109                    steuNode = nodes.get(c);
     110                } else if (header[c.xCol].contains("rejet") && header[c.yCol].contains("rejet")) {
     111                    rejetNode = nodes.get(c);
     112                } else {
     113                    System.err.println("Line "+lineNumber+": Unexpected coordinate columns: "+c);
     114                }
     115            }
     116            if (steuNode == null || rejetNode == null) {
     117                System.err.println("Line "+lineNumber+": 'STEU' or 'rejet' information not found");
     118                return;
     119            }
     120            nodeWithKeys = steuNode.hasKeys() ? steuNode : rejetNode;
     121           
     122            addTag(steuNode, "man_made", "wastewater_plant");
     123            updateTag(steuNode, "Code du STEU", "ref");
     124            updateTag(steuNode, "Nom du STEU", "name");
     125            updateTag(steuNode, "Date de mise en service du STEU", "start_date");
     126            updateTag(steuNode, "Date de mise hors service du STEU", "end_date");
     127            updateTag(steuNode, "Exploitant", "operator");
     128            updateTag(steuNode, "Capacité nominale en EH", "capacity");
     129            updateTag(rejetNode, "Nom du milieu de rejet", "name");
     130           
     131            Way pipeline = new Way();
     132            pipeline.addNode(steuNode);
     133            pipeline.addNode(rejetNode);
     134            if (pipeline.getLength() > 1) {
     135                //pipeline.put("man_made", "pipeline");
     136                //pipeline.put("type", "water");
     137                ds.addPrimitive(pipeline);
     138            }
     139           
     140            removeUninterestingTags();
     141        }
     142        }
    60143}
Note: See TracChangeset for help on using the changeset viewer.