I would prefer to use the second approach. It looks more complicated than the frist one, but actually it’s not like that

The first one is just a very rough concept which uses quaternions for geometries whose centers conicide with the center of the sphere (notice, I translate vertices of the box geometry at the value of radius). In your case, centers of boxes don’t coincide with the center of the sphere, they are on the surface of the sphere.

The second one, from my point of view, has correct movement of the object on the sphere. Straight from one point to another, along the surface of the sphere.

Using the second approach, your animation will be like that:

```
this.local = points.map((point, index) => {
const { x, y, z } = point.position;
const { x: x2, y: y2, z: z2 } = this.latLngCords[index];
let startVector = new THREE.Vector3(x, y, z);
let endVector = new THREE.Vector3(x2, y2, z2);
let angle = { value: 0 };
let angleEnd = startVector.angleTo(endVector);
let normal = startVector.clone().cross(endVector).normalize();
TweenMax.to(angle, 5.5, {
value: angleEnd,
onUpdate: () => {
point.position.copy(startVector).applyAxisAngle(normal, angle.value);
point.lookAt(this.center);
}
});
});
```