Ticket #16102: kml-v2.patch

File kml-v2.patch, 3.2 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)) {
    136138                    ds.addPrimitive(way = new Way());
     139                    wayNodes = new ArrayList<>();
    137140                    list.add(way);
    138141                } else if (parser.getLocalName().equals(KML_COORDINATES)) {
    139142                    String[] tab = parser.getElementText().trim().split("\\s");
    140143                    for (int i = 0; i < tab.length; i++) {
    141                         node = parseNode(ds, way, node, tab[i].split(","));
     144                        node = parseNode(ds, wayNodes, node, tab[i].split(","));
    142145                    }
    143146                } else if (parser.getLocalName().equals(KML_EXT_COORD)) {
    144                     node = parseNode(ds, way, node, parser.getElementText().trim().split("\\s"));
     147                    node = parseNode(ds, wayNodes, node, parser.getElementText().trim().split("\\s"));
    145148                    if (node != null && when > 0) {
    146149                        node.setRawTimestamp((int) when);
    147150                    }
     
    153156                    break;
    154157                } else if (parser.getLocalName().equals(KML_POINT)) {
    155158                    list.add(node);
     159                } else if (parser.getLocalName().equals(KML_LINE_STRING) || parser.getLocalName().equals(KML_EXT_TRACK) || parser.getLocalName().equals(KML_LINEAR_RING)) {
     160                    if (way != null && wayNodes != null)
     161                        way.setNodes(wayNodes);
     162                    wayNodes = new ArrayList<>();
    156163                }
    157164            }
    158165        }
     
    163170        }
    164171    }
    165172
    166     private Node parseNode(DataSet ds, Way way, Node node, String[] values) {
     173    private Node parseNode(DataSet ds, List<Node> wayNodes, Node node, String[] values) {
    167174        if (values.length >= 2) {
    168175            LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision();
    169176            node = nodes.get(ll);
     
    174181                    node.put("ele", values[2]);
    175182                }
    176183            }
    177             if (way != null) {
    178                 way.addNode(node);
     184            if (wayNodes != null) {
     185                wayNodes.add(node);
    179186            }
    180187        }
    181188        return node;