Ticket #16102: kml-v2.patch
| File kml-v2.patch, 3.2 KB (added by , 8 years ago) |
|---|
-
src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java
99 99 List<OsmPrimitive> list = new ArrayList<>(); 100 100 long when = 0; 101 101 Way way = null; 102 List<Node> wayNodes = null; 102 103 Node node = null; 103 104 Relation relation = null; 104 105 String role = ""; … … 130 131 } else if (parser.getLocalName().equals(KML_LINEAR_RING)) { 131 132 if (relation != null) { 132 133 ds.addPrimitive(way = new Way()); 134 wayNodes = new ArrayList<>(); 133 135 relation.addMember(new RelationMember(role, way)); 134 136 } 135 137 } else if (parser.getLocalName().equals(KML_LINE_STRING) || parser.getLocalName().equals(KML_EXT_TRACK)) { 136 138 ds.addPrimitive(way = new Way()); 139 wayNodes = new ArrayList<>(); 137 140 list.add(way); 138 141 } else if (parser.getLocalName().equals(KML_COORDINATES)) { 139 142 String[] tab = parser.getElementText().trim().split("\\s"); 140 143 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(",")); 142 145 } 143 146 } 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")); 145 148 if (node != null && when > 0) { 146 149 node.setRawTimestamp((int) when); 147 150 } … … 153 156 break; 154 157 } else if (parser.getLocalName().equals(KML_POINT)) { 155 158 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<>(); 156 163 } 157 164 } 158 165 } … … 163 170 } 164 171 } 165 172 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) { 167 174 if (values.length >= 2) { 168 175 LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision(); 169 176 node = nodes.get(ll); … … 174 181 node.put("ele", values[2]); 175 182 } 176 183 } 177 if (way != null) {178 way .addNode(node);184 if (wayNodes != null) { 185 wayNodes.add(node); 179 186 } 180 187 } 181 188 return node;
