Нарисуйте путь стрелки для навигации по карте на основе местоположения с использованием ARKit iOSIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Нарисуйте путь стрелки для навигации по карте на основе местоположения с использованием ARKit iOS

Сообщение Anonymous »

У меня есть карта помещения, и я хочу нарисовать путь между двумя местоположениями маршрута, например. от A до B. Я хочу нарисовать путь стрелки на основе ARKit в приложении ios. В настоящее время я использую ARAnchor для достижения этой цели, но проблема заключается в том, что если расстояние от A до B составляет 10 метров, и я добавляю узлы на каждом метре, поэтому вместо 10 разных узлов я получаю отдельные узлы со стрелками, показывающие все 10 в нем. Я использую код ниже.
// Ниже код, из которого я вызываю функцию addArpath
if let lat1 = mCurrentPosition?.latitude, let long1 = mCurrentPosition?.longitude {

let latEnd = steplocation.latitude
let longEnd = steplocation.longitude

// if let lastLat = arrpath.last?.latitude,let lastLong = arrpath.last?.longitude,let lastAltitude = arrpath.last?.altitude{

let userLocation = CLLocation(latitude: lat1, longitude: long1)

let endLocation = CLLocation(coordinate: CLLocationCoordinate2DMake(CLLocationDegrees(latEnd), CLLocationDegrees(longEnd)), altitude: CLLocationDistance(steplocation.altitude), horizontalAccuracy: CLLocationAccuracy(5), verticalAccuracy: CLLocationAccuracy(0), course: CLLocationDirection(-1), speed: CLLocationSpeed(5), timestamp: Date())

let heading = getHeadingForDirectionFromCoordinate(from: userLocation, to: endLocation)

let lon1 = degreesToRadians(long1) //DegreesToRadians(long1)
let lon2 = degreesToRadians(longEnd); //DegreesToRadians(longEnd);
let lat2 = degreesToRadians(latEnd);

let dLon = lon2 - lon1

let y = sin(dLon) * cos(lat2);
yVal = yVal + y

// let distanceToendpoint = calculateDistance(lat: endLocation.coordinate.latitude, long: endLocation.coordinate.longitude)
let distvalue = Int(distance) + Int(pathlength)
distance += CGFloat(distvalue)

for i in stride(from: 0, to: distance, by:1) {
print("current loop iteration is:" ,i)
let headingValue = heading - self.heading
zValue = zValue + headingValue

distanceVal = CGFloat(i) + distanceVal
zGlobal = zValue

// Calling addARPathtoLocation

addARPathtoLocation(stepLocation:endLocation,zvalue: zValue, yvalue: yVal, distance:Float(i), direction: manuoverType)
}

// }
}

// MARK: - ARSessionDelegate
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard !(anchor is ARPlaneAnchor) else { return }
let sphereNode = generateArrowNodes(anchor: anchor)
DispatchQueue.main.async {
node.addChildNode(sphereNode)
}
}

//create ARAnchor to add to nodes
func generateArrowNodes(anchor: ARAnchor) -> SCNNode {
let imageMaterial = SCNMaterial()
imageMaterial.isDoubleSided = true
imageMaterial.diffuse.contents = UIImage(named: "blueArrow")

let plane = SCNPlane(width:0.5, height:0.5)
plane.materials = [imageMaterial]
plane.firstMaterial?.isDoubleSided = true

let blueNode = SCNNode(geometry: plane)
blueNode.name = "blueNode"
blueNode.position = SCNVector3(x:Float(zGlobal), y:0, z:Float(distanceVal))

blueNode.eulerAngles.x = -.pi / 2
blueNode.eulerAngles.y -= Float(CGFloat(CGFloat.pi/4*6))

return blueNode
}

func addARPathtoLocation(stepLocation: CLLocation, zvalue: CGFloat, yvalue: CGFloat, distance:Float, direction:VMEManeuverType) {

// give you the depth of anything ARKit has detected

guard let query = sceneView.raycastQuery(from: sceneView.center , allowing: .estimatedPlane, alignment: .any) else {
return
}

let results = sceneView.session.raycast(query)
guard let hitResult = results.first else {
print("No surface found")
return
}

// Add ARAnchor to Scene
let anchor = ARAnchor(transform: hitResult.worldTransform)
sceneView.session.add(anchor: anchor)
}

func radiansToDegrees(_ radians: Double) -> Double {
return (radians) * (180.0 / Double.pi)
}

func degreesToRadians(_ degrees: Double) -> Double {
return (degrees) * (Double.pi / 180.0)
}

func getHeadingForDirectionFromCoordinate(from: CLLocation, to: CLLocation) -> Double {
let fLat = degreesToRadians(from.coordinate.latitude)
let fLng = degreesToRadians(from.coordinate.longitude)
let tLat = degreesToRadians(to.coordinate.latitude)
let tLng = degreesToRadians(to.coordinate.longitude)

let deltaL = tLng - fLng

let x = sin(deltaL) * cos(tLng) //cos(tLat) * sin(deltaL)
let y = cos(fLat) * sin(tLat) - sin(fLat) * cos(tLat) * cos(deltaL)

let bearing = atan2(x,y)
let bearingInDegrees = bearing.toDegrees
print("Bearing Degrees :",bearingInDegrees) // sanity check

// let degree = radiansToDegrees(atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng)))

if bearingInDegrees >= 0 {
return bearingInDegrees
} else {
return bearingInDegrees + 360
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... -arkit-ios
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Нарисуйте путь стрелки для навигации по карте на основе местоположения с использованием ARKit iOS
    Anonymous » » в форуме IOS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Удобные стрелки-карусели: false удаляет все, а не только стрелки.
    Anonymous » » в форуме Jquery
    0 Ответы
    125 Просмотры
    Последнее сообщение Anonymous
  • Удобные стрелки-карусели: false удаляет все, а не только стрелки.
    Anonymous » » в форуме Jquery
    0 Ответы
    81 Просмотры
    Последнее сообщение Anonymous
  • Удобные стрелки-карусели: false удаляет все, а не только стрелки.
    Anonymous » » в форуме Jquery
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Удобные стрелки-карусели: false удаляет все, а не только стрелки.
    Anonymous » » в форуме Jquery
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»