Breadcrumb lines for today for node details

This commit is contained in:
Garth Vander Houwen 2023-03-19 11:28:01 -07:00
parent db6500445f
commit f805796af9
3 changed files with 58 additions and 38 deletions

View file

@ -21,7 +21,7 @@ struct MapViewSwiftUI: UIViewRepresentable {
let mapViewType: MKMapType
let userTrackingMode: MKUserTrackingMode
let centeringMode: CenteringMode
let showBreadcrumbLines: Bool
let centerOnPositionsOnly: Bool
@AppStorage("meshMapRecentering") private var recenter: Bool = false
@ -120,6 +120,16 @@ struct MapViewSwiftUI: UIViewRepresentable {
DispatchQueue.main.async {
self.presentCustomMapOverlayHash = self.customMapOverlay
self.loadedLastUpdatedLocalMapFile = self.lastUpdatedLocalMapFile
if showBreadcrumbLines {
let nodePositions = positions.filter { $0.time! > Calendar.current.startOfDay(for: Date()) }
let lineCoords = nodePositions.map ({
(position) -> CLLocationCoordinate2D in
return position.nodeCoordinate!
})
let polyline = MKPolyline(coordinates: lineCoords, count: nodePositions.count)
mapView.addOverlay(polyline)
}
}
}
@ -334,45 +344,54 @@ struct MapViewSwiftUI: UIViewRepresentable {
public func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let index = self.overlays.firstIndex(where: { overlay_ in overlay_.shape.hash == overlay.hash }) {
// if let index = self.overlays.firstIndex(where: { overlay_ in overlay_.shape.hash == overlay.hash }) {
let unwrappedOverlay = self.overlays[index]
if let circleOverlay = unwrappedOverlay.shape as? MKCircle {
let renderer = MKCircleRenderer(circle: circleOverlay)
renderer.fillColor = unwrappedOverlay.fillColor
renderer.strokeColor = unwrappedOverlay.strokeColor
renderer.lineWidth = unwrappedOverlay.lineWidth
return renderer
} else if let polygonOverlay = unwrappedOverlay.shape as? MKPolygon {
let renderer = MKPolygonRenderer(polygon: polygonOverlay)
renderer.fillColor = unwrappedOverlay.fillColor
renderer.strokeColor = unwrappedOverlay.strokeColor
renderer.lineWidth = unwrappedOverlay.lineWidth
return renderer
} else if let multiPolygonOverlay = unwrappedOverlay.shape as? MKMultiPolygon {
let renderer = MKMultiPolygonRenderer(multiPolygon: multiPolygonOverlay)
renderer.fillColor = unwrappedOverlay.fillColor
renderer.strokeColor = unwrappedOverlay.strokeColor
renderer.lineWidth = unwrappedOverlay.lineWidth
return renderer
} else if let polyLineOverlay = unwrappedOverlay.shape as? MKPolyline {
let renderer = MKPolylineRenderer(polyline: polyLineOverlay)
renderer.fillColor = unwrappedOverlay.fillColor
renderer.strokeColor = unwrappedOverlay.strokeColor
renderer.lineWidth = unwrappedOverlay.lineWidth
return renderer
} else if let multiPolylineOverlay = unwrappedOverlay.shape as? MKMultiPolyline {
let renderer = MKMultiPolylineRenderer(multiPolyline: multiPolylineOverlay)
renderer.fillColor = unwrappedOverlay.fillColor
renderer.strokeColor = unwrappedOverlay.strokeColor
renderer.lineWidth = unwrappedOverlay.lineWidth
return renderer
} else {
return MKOverlayRenderer()
}
} else if let tileOverlay = overlay as? MKTileOverlay {
// let unwrappedOverlay = self.overlays[index]
// if let circleOverlay = unwrappedOverlay.shape as? MKCircle {
// let renderer = MKCircleRenderer(circle: circleOverlay)
// renderer.fillColor = unwrappedOverlay.fillColor
// renderer.strokeColor = unwrappedOverlay.strokeColor
// renderer.lineWidth = unwrappedOverlay.lineWidth
// return renderer
// } else
// if let polygonOverlay = unwrappedOverlay.shape as? MKPolygon {
// let renderer = MKPolygonRenderer(polygon: polygonOverlay)
// renderer.fillColor = unwrappedOverlay.fillColor
// renderer.strokeColor = unwrappedOverlay.strokeColor
// renderer.lineWidth = unwrappedOverlay.lineWidth
// return renderer
// } else if let multiPolygonOverlay = unwrappedOverlay.shape as? MKMultiPolygon {
// let renderer = MKMultiPolygonRenderer(multiPolygon: multiPolygonOverlay)
// renderer.fillColor = unwrappedOverlay.fillColor
// renderer.strokeColor = unwrappedOverlay.strokeColor
// renderer.lineWidth = unwrappedOverlay.lineWidth
// return renderer
// } else if let polyLineOverlay = unwrappedOverlay.shape as? MKPolyline {
// let renderer = MKPolylineRenderer(polyline: polyLineOverlay)
// renderer.fillColor = unwrappedOverlay.fillColor
// renderer.strokeColor = unwrappedOverlay.strokeColor
// renderer.lineWidth = unwrappedOverlay.lineWidth
// return renderer
// } else if let multiPolylineOverlay = unwrappedOverlay.shape as? MKMultiPolyline {
// let renderer = MKMultiPolylineRenderer(multiPolyline: multiPolylineOverlay)
// renderer.fillColor = unwrappedOverlay.fillColor
// renderer.strokeColor = unwrappedOverlay.strokeColor
// renderer.lineWidth = unwrappedOverlay.lineWidth
// return renderer
// }
// else {
// return MKOverlayRenderer()
// }
// } else
if let tileOverlay = overlay as? MKTileOverlay {
return MKTileOverlayRenderer(tileOverlay: tileOverlay)
} else {
if let routePolyline = overlay as? MKPolyline {
let renderer = MKPolylineRenderer(polyline: routePolyline)
renderer.strokeColor = UIColor.systemBlue
renderer.lineWidth = 5
return renderer
}
return MKOverlayRenderer()
}
}

View file

@ -71,10 +71,10 @@ struct NodeDetail: View {
mapViewType: mapType,
userTrackingMode: MKUserTrackingMode.none,
centeringMode: .allPositions,
showBreadcrumbLines: true,
centerOnPositionsOnly: true,
customMapOverlay: self.customMapOverlay,
overlays: self.overlays
)
VStack(alignment: .leading) {
Spacer()

View file

@ -84,6 +84,7 @@ struct NodeMap: View {
mapViewType: mapType,
userTrackingMode: userTrackingMode,
centeringMode: mapCenteringMode,
showBreadcrumbLines: false,
centerOnPositionsOnly: false,
customMapOverlay: self.customMapOverlay,
overlays: self.overlays