kopia lustrzana https://github.com/JOSM/MapWithAI
Fix an issue where OSM servers couldn't be used as a mapwithai server
Signed-off-by: Taylor Smock <taylor.smock@kaart.com>pull/1/head v1.1.0
rodzic
4b0a07bb2f
commit
49f6ff7527
|
@ -167,7 +167,7 @@ public class GetDataRunnable extends RecursiveTask<DataSet> {
|
||||||
final List<DataSet> osmData = MainApplication.getLayerManager().getLayersOfType(OsmDataLayer.class)
|
final List<DataSet> osmData = MainApplication.getLayerManager().getLayersOfType(OsmDataLayer.class)
|
||||||
.parallelStream().map(OsmDataLayer::getDataSet).filter(ds -> !ds.equals(dataSet))
|
.parallelStream().map(OsmDataLayer::getDataSet).filter(ds -> !ds.equals(dataSet))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
dataSet.getWays().parallelStream().filter(way -> !way.isDeleted())
|
dataSet.getWays().parallelStream().filter(way -> !way.isDeleted() && way.getOsmId() <= 0)
|
||||||
.filter(way -> osmData.stream().anyMatch(ds -> checkIfPrimitiveDuplicatesPrimitiveInDataSet(way, ds)))
|
.filter(way -> osmData.stream().anyMatch(ds -> checkIfPrimitiveDuplicatesPrimitiveInDataSet(way, ds)))
|
||||||
.forEach(way -> {
|
.forEach(way -> {
|
||||||
final List<Node> nodes = way.getNodes();
|
final List<Node> nodes = way.getNodes();
|
||||||
|
@ -279,17 +279,7 @@ public class GetDataRunnable extends RecursiveTask<DataSet> {
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
for (int i = 0; i < nodes.size(); i++) {
|
for (int i = 0; i < nodes.size(); i++) {
|
||||||
final Node n1 = nodes.get(i);
|
final Node n1 = nodes.get(i);
|
||||||
final BBox bbox = new BBox();
|
final List<Node> nearbyNodes = nearbyNodes(dataSet, n1);
|
||||||
bbox.addPrimitive(n1, 0.001);
|
|
||||||
final List<Node> nearbyNodes = dataSet.searchNodes(bbox).parallelStream().filter(node -> !node.isDeleted()
|
|
||||||
&& !node.equals(n1) && node.getReferrers().parallelStream().allMatch(prim -> prim.hasKey("highway"))
|
|
||||||
&& (((n1.getKeys().equals(node.getKeys()) || n1.getKeys().isEmpty() || node.getKeys().isEmpty())
|
|
||||||
&& (n1.getCoor().greatCircleDistance(node.getCoor()) < MapWithAIPreferenceHelper
|
|
||||||
.getMaxNodeDistance()))
|
|
||||||
|| (!n1.getKeys().isEmpty() && n1.getKeys().equals(node.getKeys())
|
|
||||||
&& (n1.getCoor().greatCircleDistance(
|
|
||||||
node.getCoor()) < (MapWithAIPreferenceHelper.getMaxNodeDistance() * 10)))))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
final Command mergeCommand = MergeNodesAction.mergeNodes(nearbyNodes, n1);
|
final Command mergeCommand = MergeNodesAction.mergeNodes(nearbyNodes, n1);
|
||||||
if (mergeCommand != null) {
|
if (mergeCommand != null) {
|
||||||
mergeCommand.executeCommand();
|
mergeCommand.executeCommand();
|
||||||
|
@ -298,6 +288,43 @@ public class GetDataRunnable extends RecursiveTask<DataSet> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<Node> nearbyNodes(DataSet ds, Node nearNode) {
|
||||||
|
final BBox bbox = new BBox();
|
||||||
|
bbox.addPrimitive(nearNode, 0.001);
|
||||||
|
return ds.searchNodes(bbox).parallelStream().filter(node -> usableNode(nearNode, node))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean usableNode(Node nearNode, Node node) {
|
||||||
|
return basicNodeChecks(nearNode, node) && onlyHasHighwayParents(node)
|
||||||
|
&& ((keyCheck(nearNode, node)
|
||||||
|
&& distanceCheck(nearNode, node, MapWithAIPreferenceHelper.getMaxNodeDistance()))
|
||||||
|
|| (!nearNode.getKeys().isEmpty() && nearNode.getKeys().equals(node.getKeys())
|
||||||
|
&& distanceCheck(nearNode, node, MapWithAIPreferenceHelper.getMaxNodeDistance() * 10)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean distanceCheck(Node nearNode, Node node, Double distance) {
|
||||||
|
try {
|
||||||
|
return nearNode.getCoor().greatCircleDistance(node.getCoor()) < distance;
|
||||||
|
} catch (Exception e) {
|
||||||
|
Logging.error(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean keyCheck(Node nearNode, Node node) {
|
||||||
|
return nearNode.getKeys().equals(node.getKeys()) || nearNode.getKeys().isEmpty() || node.getKeys().isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean onlyHasHighwayParents(Node node) {
|
||||||
|
return node.getReferrers().parallelStream().allMatch(prim -> prim.hasKey("highway"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean basicNodeChecks(Node nearNode, Node node) {
|
||||||
|
return node != null && nearNode != null && !node.isDeleted() && !nearNode.isDeleted() && !nearNode.equals(node)
|
||||||
|
&& node.isLatLonKnown() && nearNode.isLatLonKnown();
|
||||||
|
}
|
||||||
|
|
||||||
private static void mergeWays(DataSet dataSet) {
|
private static void mergeWays(DataSet dataSet) {
|
||||||
final List<Way> ways = dataSet.getWays().parallelStream().filter(way -> !way.isDeleted())
|
final List<Way> ways = dataSet.getWays().parallelStream().filter(way -> !way.isDeleted())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
Ładowanie…
Reference in New Issue