# Not able to set position and orientation of tileset json of b3dm

**URL:** <https://community.cesium.com/t/not-able-to-set-position-and-orientation-of-tileset-json-of-b3dm/23007>\
**Category:** CesiumJS\
**Created:** [March 22, 2023, 1:34pm UTC](https://community.cesium.com/t/not-able-to-set-position-and-orientation-of-tileset-json-of-b3dm/23007 "2023-03-22T13:34:33Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![94ankitshrivastava](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/94ankitshrivastava/32/3523_2.png) [@94ankitshrivastava](https://community.cesium.com/u/94ankitshrivastava)\
**Post date:** [March 22, 2023, 1:34pm UTC](https://community.cesium.com/t/not-able-to-set-position-and-orientation-of-tileset-json-of-b3dm/23007/1 "2023-03-22T13:34:33Z")

</div>

Dear Cesium Team,

I am trying to load tileset.json file in cesium viewer but i am not able to set the exact location location of that particular tileset file and the orientation of that modal is also wrong. I tried to find all the solutions but i am not able to get it. kindly i request you to please help me as soon as possible.

Here is the code

const viewer = new Cesium.Viewer(‘cesiumContainer’, {  
terrainProvider: Cesium.createWorldTerrain()  
});

```
const latitude = 28.6496374696;
const longitude = 77.2120535173;
const elevation = 16.4954383582;

var heading = 0; //Cesium.Math.toRadians(0);
var pitch = -0.3; //Cesium.Math.toRadians(10);
var roll = -120.6882219912; //Cesium.Math.toRadians(0);

var modelMatrix = new Cesium.Matrix4();
var headingPitchRoll = new Cesium.HeadingPitchRoll(heading,pitch,roll);
var tileset = undefined;

var cartographic = Cesium.Cartographic.fromDegrees(longitude, latitude, elevation);
  var cartesian = Cesium.Cartographic.toCartesian(cartographic);
  var transform = Cesium.Transforms.headingPitchRollToFixedFrame(cartesian, headingPitchRoll, Cesium.Ellipsoid.WGS84, Cesium.Transforms.eastNorthUpToFixedFrame, modelMatrix);

  //var transform = Cesium.Transforms.headingPitchRollToFixedFrame(tileset.boundingSphere.center, headingPitchRoll, Cesium.Ellipsoid.WGS84, Cesium.Transforms.eastNorthUpToFixedFrame, modelMatrix);

  tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url : './SampleData/Cesium3DTiles/Tilesets/Tileset-ankit/tileset.json',
  }));

  // tileset.modelMatrix = modelMatrix;

  tileset.readyPromise.then(function(loaded_tileset) {
    viewer.scene.primitives.add(tileset);
    loaded_tileset._root.transform = transform;
    viewer.zoomTo(loaded_tileset);
  });

```

When i upload same Mesh into ION i am able to setup the location and orientation and can use it easily. but i want to achieve this from tileset.json.

Thanks in advance. Waiting for your response.

---

<div class="post-metadata">

**Author:** ![theogerritsen](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/theogerritsen/32/12851_2.png) [@theogerritsen](https://community.cesium.com/u/theogerritsen)\
**Post date:** [March 22, 2023, 1:57pm UTC](https://community.cesium.com/t/not-able-to-set-position-and-orientation-of-tileset-json-of-b3dm/23007/2 "2023-03-22T13:57:27Z")

</div>

Hi there. I struggled on the same problem for a long time and just managed to find a solution. The problem when importing an asset from a tileset.json is the origin of your asset will be in the center of the earth. So it’s easy to perform a translation, but not a rotation. The trick is to apply the rotation after your tileset is loaded by defining the origin of `headingPitchRollToFixedFrame` as the center of the tileset’s boundingsphere. I see that you did that but before your tileset was loaded. Try to do it after.  
So first thing to do in so un-comment your `transform` variable (and comment the previous one) that takes into account the center of the tileset’s bounding sphere. At the end of your code

```auto
tileset.readyPromise.then(function(loaded_tileset) {
    viewer.scene.primitives.add(tileset);
    loaded_tileset._root.transform = transform;
    viewer.zoomTo(loaded_tileset);
  });

```

add a `tileset.root.transform = modelMatrix`. It should do the trick to rotate your tileset correctly

---

<div class="post-metadata">

**Author:** ![94ankitshrivastava](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/94ankitshrivastava/32/3523_2.png) [@94ankitshrivastava](https://community.cesium.com/u/94ankitshrivastava)\
**Post date:** [March 23, 2023, 6:05am UTC](https://community.cesium.com/t/not-able-to-set-position-and-orientation-of-tileset-json-of-b3dm/23007/3 "2023-03-23T06:05:53Z")

</div>

@theogerritsen

Respected Sir,

Thaks for your response, but i am not able to access the tileset.boundingSphere.center because it is not present in my tileset.json file. I am also trying to get this value from object of tileset by this \> tileset.\_root.\_boundingSphere.center but it is redirect on somewhere else which is not my correct position. I am totally confused how to plot the correct orientation with position. Right now i am adding the manual heading, pitch and roll which is actully wrong approch. i need to make it automatically grab the heading, pitch roll and position so that whatever modal of tileset i can load, it will loaded without any code level setting.

I am pasting my all code. Please see once and give your valueable word and guidence.

here is the code:

// Your access token can be found at: [Cesium ion](https://ion.cesium.com/tokens).  
// This is the default access token from your ion account

```
// Grant CesiumJS access to your ion assets
Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzZTI5OGE3ZS00YjQ4LTRjNWYtYmEyNS0zNzU5NDdmMDNjZmMiLCJpZCI6NzQ4OSwic2NvcGVzIjpbImFzciIsImdjIl0sImlhdCI6MTU0OTUyMTU0N30.-xQTfe4Lp6ro_rlFzgo-UtxeoU7W1LoGlc213hXbRqI";
// Initialize the Cesium Viewer in the HTML element with the `cesiumContainer` ID.
const viewer = new Cesium.Viewer('cesiumContainer', {
  terrainProvider: Cesium.createWorldTerrain()
});    

const latitude = 28.652433447919023;
const longitude = 77.21181285944374;
const elevation = 16.4954383582;

var heading = 0; //Cesium.Math.toRadians(0);
var pitch = -0.3; //Cesium.Math.toRadians(10);
var roll = -120.6882219912; //Cesium.Math.toRadians(0);

var modelMatrix = new Cesium.Matrix4();
var headingPitchRoll = new Cesium.HeadingPitchRoll(heading,pitch,roll);
var tileset = undefined;

var cartographic = Cesium.Cartographic.fromDegrees(longitude, latitude, elevation);
  var cartesian = Cesium.Cartographic.toCartesian(cartographic);
  var transform = Cesium.Transforms.headingPitchRollToFixedFrame(cartesian, headingPitchRoll, Cesium.Ellipsoid.WGS84, Cesium.Transforms.eastNorthUpToFixedFrame, modelMatrix);

  //var transform = Cesium.Transforms.headingPitchRollToFixedFrame(tileset.boundingSphere.center, headingPitchRoll, Cesium.Ellipsoid.WGS84, Cesium.Transforms.eastNorthUpToFixedFrame, modelMatrix);

  tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url : './SampleData/Cesium3DTiles/Tilesets/Tileset-ankit/tileset.json',
  }));

  // tileset.modelMatrix = modelMatrix;

  tileset.readyPromise.then(function(loaded_tileset) {
    viewer.scene.primitives.add(tileset);
    loaded_tileset._root.transform = transform;
    viewer.zoomTo(loaded_tileset);
  });

```

here is the screenshot of wrong orientation

 ![image](https://global.discourse-cdn.com/cesium/original/2X/e/edbb3b797eec8c79b81f6af77f0225d5a9a969bf.jpeg)

Thanks waiting for your response sir
