Skip to content

Commit

Permalink
#368 migrate edge analysis
Browse files Browse the repository at this point in the history
  • Loading branch information
vmarc committed Jul 20, 2024
1 parent 91160ad commit 516334a
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,8 @@ class RouteAnalysisCompareTool(config: AnalysisStartConfiguration) {

def analyze(): Unit = {
log.info("Collecting routeIds")
val file = new File(Dirs.root, "logs/mismatch-ids.txt")
val routeIds = FileUtils.readFileToString(file, "UTF-8").split("\n").map(_.toLong)
// val routeIds = Seq(17700250L) // config.oldDatabase.oldRoutes.ids()
// val routeIds = readRouteIds("logs/mismatch-ids-4.txt")
val routeIds = Seq(17613906L) // config.oldDatabase.oldRoutes.ids()
log.info(s"Comparing ${routeIds.size} routes")
routeIds.zipWithIndex.foreach { case (routeId, index) =>
if (index % 50 == 0) {
Expand Down Expand Up @@ -72,4 +71,9 @@ class RouteAnalysisCompareTool(config: AnalysisStartConfiguration) {
private def compare(oldRouteDoc: OldRouteDoc, newRouteDoc: RouteDetailDoc): Unit = {
new CompareEdges(oldRouteDoc, newRouteDoc, log).compare()
}

private def readRouteIds(filename: String): Seq[Long] = {
val file = new File(Dirs.root, filename)
FileUtils.readFileToString(file, "UTF-8").split("\n").map(_.toLong)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ class RouteAnalysisTool(config: AnalysisStartConfiguration) {

// analyzeRoutes(essenOkRouteIds)
// analyzeRoutes(law9)
analyzeRoutes(Seq(13844575L))
analyzeRoutes(Seq(17700250L)) // exception during structure analysis
// analyzeRoutes(Seq(13844575L))
analyzeRoutes(Seq(17613906L)) // exception during structure analysis
// analyzeRoutes(Seq(3952592)) // broken route
// analyzeRoutes(Seq(3963819)) // route with roundabout
buildTiles()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,25 @@ case class CompareEdge(

class CompareEdges(oldRouteDoc: OldRouteDoc, newRouteDoc: RouteDetailDoc, log: Log) {
def compare(): Unit = {
if (newRouteDoc.segments.size == 1) { // cannot compare edges
val oldEdges = oldCompareEdges()
val newEdges = newCompareEdges()
if (!edgesEqual(oldEdges, newEdges)) {
val detail = Seq(
oldRouteDoc.edges.map(edge => s"old-edge $edge"),
newRouteDoc.edges.map(edge => s"new-edge $edge"),
oldEdges.map(edge => s"old-edge $edge"),
newEdges.map(edge => s"new-edge $edge"),
).flatten.mkString("\n")
log.info(s"edge mismatch\n$detail")
}
if (oldRouteDoc.facts.nonEmpty && newRouteDoc.facts.isEmpty && newRouteDoc.edges.nonEmpty) {
// new analysis without problem found edges, old analysis failed: assume new edges better than old
return
}
if (newRouteDoc.segments.size != 1) {
// cannot compare edges
return
}

val oldEdges = oldCompareEdges()
val newEdges = newCompareEdges()
if (!edgesEqual(oldEdges, newEdges)) {
val detail = Seq(
oldRouteDoc.edges.map(edge => s"old-edge $edge"),
newRouteDoc.edges.map(edge => s"new-edge $edge"),
oldEdges.map(edge => s"old-edge $edge"),
newEdges.map(edge => s"new-edge $edge"),
).flatten.mkString("\n")
log.info(s"edge mismatch\n$detail")
}
}

Expand Down Expand Up @@ -77,9 +84,13 @@ class CompareEdges(oldRouteDoc: OldRouteDoc, newRouteDoc: RouteDetailDoc, log: L
}

private def edgeEqual(oldEdge: CompareEdge, newEdge: CompareEdge): Boolean = {
val metersEqual = abs(oldEdge.meters - newEdge.meters) < (newEdge.meters / 20) // 20%
oldEdge.sourceNodeId == newEdge.sourceNodeId &&
oldEdge.sinkNodeId == newEdge.sinkNodeId &&
metersEqual
val metersEqual = abs(oldEdge.meters - newEdge.meters) < (newEdge.meters / 5) // 20%
if (metersEqual) {
(oldEdge.sourceNodeId == newEdge.sourceNodeId && oldEdge.sinkNodeId == newEdge.sinkNodeId) ||
(oldEdge.sourceNodeId == newEdge.sinkNodeId && oldEdge.sinkNodeId == newEdge.sourceNodeId)
}
else {
false
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import kpn.core.analysis.RouteMember
import kpn.core.analysis.RouteMemberWay
import kpn.core.tools.next.domain.RouteRelation
import kpn.core.util.Log
import kpn.server.analyzer.engine.analysis.route.analyzers.EdgeRouteAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.FactCombinationAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.FixmeTodoRouteAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.GeometryDigestAnalyzer
Expand All @@ -24,6 +23,7 @@ import kpn.server.analyzer.engine.analysis.route.analyzers.ProposedAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteContextAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteCountryAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteEdgeAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteElementsAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteLabelsAnalyzer
import kpn.server.analyzer.engine.analysis.route.analyzers.RouteLastSurveyAnalyzer
Expand Down Expand Up @@ -103,7 +103,7 @@ class RouteDetailMainAnalyzer(
RouteElementsAnalyzer,
// TODO oldRouteTileAnalyzer,
routeTileAnalyzer,
EdgeRouteAnalyzer,
RouteEdgeAnalyzer,
RouteLabelsAnalyzer, // this always should be the last analyzer
RouteContextAnalyzer // helper to be used during development only
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ import kpn.api.common.route.RouteEdge
import kpn.server.analyzer.engine.analysis.route.domain.RouteDetailAnalysisContext
import kpn.server.analyzer.engine.analysis.route.structure.StructurePath

object EdgeRouteAnalyzer extends RouteAnalyzer {
object RouteEdgeAnalyzer extends RouteAnalyzer {
def analyze(context: RouteDetailAnalysisContext): RouteDetailAnalysisContext = {
new EdgeRouteAnalyzer(context).analyze
new RouteEdgeAnalyzer(context).analyze
}
}

class EdgeRouteAnalyzer(context: RouteDetailAnalysisContext) {
class RouteEdgeAnalyzer(context: RouteDetailAnalysisContext) {

def analyze: RouteDetailAnalysisContext = {
val edges = if (context.nodeNetwork) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kpn.server.analyzer.engine.analysis.route.report

import kpn.server.analyzer.engine.analysis.route.domain.RouteDetailAnalysisContext
import kpn.server.analyzer.engine.analysis.route.report.ReportUtil.osmNodeLink
import kpn.server.analyzer.engine.analysis.route.structure.RouteAnalysisNode

object RouteNodeAnalysisReport {
Expand All @@ -19,9 +20,11 @@ object RouteNodeAnalysisReport {
| <td>name</td>
| <td>isInWay</td>
| </tr>
| ${nodes.startNode.map(n => routeNodeReport("startNode", n)).mkString}
| ${nodes.endNode.map(n => routeNodeReport("endNode", n)).mkString}
| ${nodes.redundantNodes.map(n => routeNodeReport("redundantNode", n)).mkString}
| ${nodes.startNode.map(n => routeNodeReport("start", n)).mkString}
| ${nodes.endNode.map(n => routeNodeReport("end", n)).mkString}
| ${nodes.startTentacleNodes.map(n => routeNodeReport("start-tentacle", n)).mkString}
| ${nodes.endTentacleNodes.map(n => routeNodeReport("end-tentacle", n)).mkString}
| ${nodes.redundantNodes.map(n => routeNodeReport("redundant", n)).mkString}
|</table>
|""".stripMargin
}
Expand All @@ -39,7 +42,7 @@ object RouteNodeAnalysisReport {
private def routeNodeReport(nodeType: String, routeNode: RouteAnalysisNode): String = {
s"""<tr>
| <td>$nodeType</td>
| <td>${routeNode.node.id}</td>
| <td>${osmNodeLink(routeNode.node.id)}</td>
| <td>${routeNode.name}</td>
| <td>${yes(routeNode.isInWay)}</td>
|</tr>
Expand Down

0 comments on commit 516334a

Please sign in to comment.