// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.opendata.modules.fr.paris.datasets; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.openstreetmap.josm.data.coor.EastNorth; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.plugins.opendata.core.OdConstants; import org.openstreetmap.josm.plugins.opendata.core.datasets.fr.FrenchShpHandler; public class ParisShpHandler extends FrenchShpHandler { public final Map<String, Node> nodeMap = new HashMap<>(); protected OsmPrimitive dataPrimitive; protected Way closedWay; protected List<Way> ways; public List<Node> nodes; public ParisShpHandler() { setDbfCharset(Charset.forName(OdConstants.CP850)); } private Node getNode(EastNorth en, String key) { Node n = nodeMap.get(key); /*if (n == null) { for (Node node : nodes.values()) { if (node.getEastNorth().equalsEpsilon(en, 0.0000001)) { return node; } } }*/ return n; } protected Node createOrGetNode(DataSet ds, EastNorth en) { String key = en.getX()+"/"+en.getY(); Node n = getNode(en, key); if (n == null) { n = new Node(en); nodeMap.put(key, n); ds.addPrimitive(n); } return n; } protected final void initFeaturesPrimitives(Set<OsmPrimitive> featurePrimitives) { dataPrimitive = null; closedWay = null; ways = new ArrayList<>(); nodes = new ArrayList<>(); for (OsmPrimitive p : featurePrimitives) { if (p.hasKeys()) { dataPrimitive = p; } if (p instanceof Way) { Way w = (Way) p; ways.add(w); if (w.isClosed()) { closedWay = w; } } else if (p instanceof Node) { nodes.add((Node) p); } } } protected final void removePrimitives(DataSet result) { for (Way w : ways) { w.setNodes(null); result.removePrimitive(w); } for (Node n : nodes) { result.removePrimitive(n); } } }