- Timestamp:
- 2022-06-08T20:21:41+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/vector/VectorDataStore.java
r18473 r18477 17 17 import java.util.Map; 18 18 import java.util.Objects; 19 import java.util.stream.Collectors; 19 20 20 21 import org.openstreetmap.gui.jmapviewer.Tile; … … 25 26 import org.openstreetmap.josm.data.imagery.vectortile.VectorTile; 26 27 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.Feature; 28 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.GeometryTypes; 27 29 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.Layer; 28 30 import org.openstreetmap.josm.data.osm.BBox; … … 294 296 final Map<ILatLon, VectorNode> nodeMap = new HashMap<>(); 295 297 for (Layer layer : tile.getLayers()) { 296 for (Feature feature : layer.getFeatures()) { 297 try { 298 addFeatureData(tile, layer, feature, nodeMap); 299 } catch (IllegalArgumentException e) { 300 Logging.error("Cannot add vector data for feature {0} of tile {1}: {2}", feature, tile, e.getMessage()); 301 Logging.error(e); 298 Map<GeometryTypes, List<Feature>> grouped = layer.getFeatures().stream().collect(Collectors.groupingBy(Feature::getGeometryType)); 299 // Unknown -> Point -> LineString -> Polygon 300 for (GeometryTypes type : GeometryTypes.values()) { 301 if (grouped.containsKey(type)) { 302 addFeatureData(tile, layer, grouped.get(type), nodeMap); 302 303 } 303 304 } … … 312 313 } 313 314 315 private <T extends Tile & VectorTile> void addFeatureData(T tile, Layer layer, Collection<Feature> features, Map<ILatLon, VectorNode> nodeMap) { 316 for (Feature feature : features) { 317 try { 318 addFeatureData(tile, layer, feature, nodeMap); 319 } catch (IllegalArgumentException e) { 320 Logging.error("Cannot add vector data for feature {0} of tile {1}: {2}", feature, tile, e.getMessage()); 321 Logging.error(e); 322 } 323 } 324 } 325 314 326 private <T extends Tile & VectorTile> void addFeatureData(T tile, Layer layer, Feature feature, Map<ILatLon, VectorNode> nodeMap) { 315 327 // This will typically be larger than primaryFeatureObjects, but this at least avoids quite a few ArrayList#grow calls 316 328 List<VectorPrimitive> featureObjects = new ArrayList<>(feature.getGeometryObject().getShapes().size()); 317 List<VectorPrimitive> primaryFeatureObjects = new ArrayList<>(feature Objects.size());329 List<VectorPrimitive> primaryFeatureObjects = new ArrayList<>(feature.getGeometryObject().getShapes().size()); 318 330 for (Shape shape : feature.getGeometryObject().getShapes()) { 319 331 primaryFeatureObjects.add(shapeToPrimaryFeatureObject(tile, layer, shape, featureObjects, nodeMap));
Note:
See TracChangeset
for help on using the changeset viewer.
