kopia lustrzana https://github.com/JOSM/MapWithAI
Significantly reduce memory usage by MergeBuildingAddress#getAddressPoints
This reduces CPU usage by 98.6% and memory allocations by 99.6%. The time for adding all addresses in the `39.69427;-86.104252;39.72361;-86.082427` download area went from ~1.25 minutes to ~10 seconds (~86% reduction). Signed-off-by: Taylor Smock <tsmock@meta.com>pull/14/head
rodzic
84682ba8c6
commit
de47e9c589
|
@ -7,6 +7,7 @@ import java.awt.GraphicsEnvironment;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
@ -78,7 +79,7 @@ public abstract class AbstractConflationCommand extends Command {
|
|||
* @return The command that will be run (may be {@code null})
|
||||
*/
|
||||
public Command getCommand(Collection<OsmPrimitive> primitives) {
|
||||
possiblyAffectedPrimitives = primitives.stream().distinct().collect(Collectors.toList());
|
||||
possiblyAffectedPrimitives = new HashSet<>(primitives);
|
||||
return getRealCommand();
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -18,6 +19,7 @@ import org.openstreetmap.josm.command.DeleteCommand;
|
|||
import org.openstreetmap.josm.command.SequenceCommand;
|
||||
import org.openstreetmap.josm.data.osm.BBox;
|
||||
import org.openstreetmap.josm.data.osm.DataSet;
|
||||
import org.openstreetmap.josm.data.osm.IPrimitive;
|
||||
import org.openstreetmap.josm.data.osm.Node;
|
||||
import org.openstreetmap.josm.data.osm.OsmPrimitive;
|
||||
import org.openstreetmap.josm.data.osm.Relation;
|
||||
|
@ -121,9 +123,13 @@ public class MergeBuildingAddress extends AbstractConflationCommand {
|
|||
}
|
||||
|
||||
private static Collection<Node> getAddressPoints(OsmPrimitive prim) {
|
||||
return Geometry.filterInsideAnyPolygon(new ArrayList<>(prim.getDataSet().allNonDeletedPrimitives()), prim)
|
||||
.stream().filter(Node.class::isInstance).map(Node.class::cast).filter(n -> n.hasTag(KEY))
|
||||
.collect(Collectors.toList());
|
||||
BBox bbox = prim.getBBox();
|
||||
final Collection<IPrimitive> searchCollection = new HashSet<>();
|
||||
searchCollection.addAll(prim.getDataSet().searchNodes(bbox));
|
||||
searchCollection.addAll(prim.getDataSet().searchWays(bbox));
|
||||
searchCollection.addAll(prim.getDataSet().searchRelations(bbox));
|
||||
return Geometry.filterInsideAnyPolygon(searchCollection, prim).stream().filter(Node.class::isInstance)
|
||||
.map(Node.class::cast).filter(n -> n.hasTag(KEY)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Ładowanie…
Reference in New Issue