Ticket #16102: kml.patch

File kml.patch, 3.0 KB (added by GerdP, 8 years ago)
  • src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java

     
    9999        List<OsmPrimitive> list = new ArrayList<>();
    100100        long when = 0;
    101101        Way way = null;
     102        List<Node> wayNodes = null;
    102103        Node node = null;
    103104        Relation relation = null;
    104105        String role = "";
     
    130131                } else if (parser.getLocalName().equals(KML_LINEAR_RING)) {
    131132                    if (relation != null) {
    132133                        ds.addPrimitive(way = new Way());
     134                        wayNodes = new ArrayList<>();
    133135                        relation.addMember(new RelationMember(role, way));
    134136                    }
    135137                } else if (parser.getLocalName().equals(KML_LINE_STRING) || parser.getLocalName().equals(KML_EXT_TRACK)) {
     
    138140                } else if (parser.getLocalName().equals(KML_COORDINATES)) {
    139141                    String[] tab = parser.getElementText().trim().split("\\s");
    140142                    for (int i = 0; i < tab.length; i++) {
    141                         node = parseNode(ds, way, node, tab[i].split(","));
     143                        node = parseNode(ds, wayNodes, node, tab[i].split(","));
    142144                    }
    143145                } else if (parser.getLocalName().equals(KML_EXT_COORD)) {
    144                     node = parseNode(ds, way, node, parser.getElementText().trim().split("\\s"));
     146                    node = parseNode(ds, wayNodes, node, parser.getElementText().trim().split("\\s"));
    145147                    if (node != null && when > 0) {
    146148                        node.setRawTimestamp((int) when);
    147149                    }
     
    153155                    break;
    154156                } else if (parser.getLocalName().equals(KML_POINT)) {
    155157                    list.add(node);
     158                } else if (parser.getLocalName().equals(KML_COORDINATES)) {
     159                    if (way != null)
     160                        way.setNodes(wayNodes);
     161                    wayNodes = new ArrayList<>();
    156162                }
    157163            }
    158164        }
     
    163169        }
    164170    }
    165171
    166     private Node parseNode(DataSet ds, Way way, Node node, String[] values) {
     172    private Node parseNode(DataSet ds, List<Node> wayNodes, Node node, String[] values) {
    167173        if (values.length >= 2) {
    168174            LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision();
    169175            node = nodes.get(ll);
     
    174180                    node.put("ele", values[2]);
    175181                }
    176182            }
    177             if (way != null) {
    178                 way.addNode(node);
     183            if (wayNodes != null) {
     184                wayNodes.add(node);
    179185            }
    180186        }
    181187        return node;