Я пытаюсь использовать ARKit
для наружной навигации.Я использовал mapbox
для AR-навигации и использовал mapboxarkit
и mapboxDirection
cocoapods.
Узлы показаны как пути.Я могу показать пути в виде пунктирных шперов или плоскостей, но не могу показать их в виде линий.Вот мои выходные скриншоты
Это узел, который я попытался показать как разрыв строки и попытался настроить scnbox
так, чтобы он был прямым, и показать как линию: scnbox to be straight and show as a line">.
Это ожидаемый результат:
Вот код, который я пробовал до сих пор - Вот код для добавления аннотации AR и строки AR.
if let route = routes?.first, let leg = route.legs.first {
var polyline = [CLLocationCoordinate2D]()
// Add an AR node and map view annotation for every defined "step" in the route
for step in leg.steps {
let coordinate = step.coordinates!.first!
polyline.append(coordinate)
let stepLocation = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
// Update feature collection for map view
self.updateShapeCollectionFeature(&self.waypointShapeCollectionFeature, with: stepLocation, typeKey: "waypoint-type", typeAttribute: "big")
// Add an AR node
let annotation = Annotation(location: stepLocation, calloutImage: self.calloutImage(for: step.description))
annotationsToAdd.append(annotation)
}
let metersPerNode: CLLocationDistance = 1
let turfPolyline = Polyline(polyline)
// Walk the route line and add a small AR node and map view annotation every metersPerNode
for i in stride(from: metersPerNode, to: turfPolyline.distance() - metersPerNode, by: metersPerNode) {
// Use Turf to find the coordinate of each incremented distance along the polyline
if let nextCoordinate = turfPolyline.coordinateFromStart(distance: i) {
let interpolatedStepLocation = CLLocation(latitude: nextCoordinate.latitude, longitude: nextCoordinate.longitude)
// Update feature collection for map view
self.updateShapeCollectionFeature(&self.waypointShapeCollectionFeature, with: interpolatedStepLocation, typeKey: "waypoint-type", typeAttribute: "small")
// Add an AR node
let annotation = Annotation(location: interpolatedStepLocation, calloutImage: nil)
annotationsToAdd.append(annotation)
}
}
}
Вот код для создания scnplane
:
func createLightBulbNode() -> SCNNode {
let lightBulbNode = collada2SCNNode(filepath: "art.scnassets/cubeSolid.dae")
lightBulbNode.position = SCNVector3(0, -0.5, 0)
return lightBulbNode
}
func collada2SCNNode(filepath:String) -> SCNNode {
let node = SCNNode()
let scene = SCNScene(named: filepath, inDirectory: nil, options: [SCNSceneSource.LoadingOption.animationImportPolicy: SCNSceneSource.AnimationImportPolicy.doNotPlay])
let nodeArray = scene!.rootNode.childNodes
for childNode in nodeArray {
node.addChildNode(childNode as SCNNode)
}
return node
}
func node(for annotation: Annotation) -> SCNNode? {
if annotation.calloutImage == nil {
// Comment `createLightBulbNode` and add `return nil` to use the default node
return createLightBulbNode()
} else {
let firstColor = UIColor(red: 0.0, green: 99/255.0, blue: 175/255.0, alpha: 1.0)
return createSphereNode(with: 0.5, firstColor: firstColor, secondColor: UIColor.green)
}
}