Ignore:
Timestamp:
2018-03-18T15:24:45+01:00 (7 years ago)
Author:
donvip
Message:

fix #josm16102 - KML performance improvements (patch by GerdP)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java

    r33791 r34089  
    100100        long when = 0;
    101101        Way way = null;
     102        List<Node> wayNodes = null;
    102103        Node node = null;
    103104        Relation relation = null;
     
    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);
     
    154157                } else if (parser.getLocalName().equals(KML_POINT)) {
    155158                    list.add(node);
     159                } else if (parser.getLocalName().equals(KML_LINE_STRING)
     160                        || parser.getLocalName().equals(KML_EXT_TRACK)
     161                        || parser.getLocalName().equals(KML_LINEAR_RING)) {
     162                    if (way != null && wayNodes != null)
     163                        way.setNodes(wayNodes);
     164                    wayNodes = new ArrayList<>();
    156165                }
    157166            }
     
    164173    }
    165174
    166     private Node parseNode(DataSet ds, Way way, Node node, String[] values) {
     175    private Node parseNode(DataSet ds, List<Node> wayNodes, Node node, String[] values) {
    167176        if (values.length >= 2) {
    168177            LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision();
     
    175184                }
    176185            }
    177             if (way != null) {
    178                 way.addNode(node);
     186            if (wayNodes != null) {
     187                wayNodes.add(node);
    179188            }
    180189        }
Note: See TracChangeset for help on using the changeset viewer.