Why does CAMPOSM return incorrect Cartesian coordinates that do not map to the specified projected coordinates? I am attempting to set the camera position of a VPERSPEC projection, in order to control the viewing altitude. I can achieve this by using the CAMPOSM function. However, I have found that the Cartesian coordinates of the camera position, as returned by CAMPOSM do not project to the same latitude-longitude pair (obtained by using MINVTRAN to perform the inverse projection) that I use to set the camera position. For example, the following code sets the camera position at (lat=0,long=-87,alt=42000): % Set up axes axesm ('vperspec','Grid', 'on','Frame','on') axis off % Display a surface load geoid meshm(geoid, geoidrefvec) % Display coastline vectors load coast plotm(lat,long) % Change camera position using CAMPOSM longitude = -87; [x, y, z] = camposm(0,longitude,42000) However, the Cartesian coordinates (x,y,z) returned by CAMPOSM project back to (lat,long,alt) as follows: [latc, lonc, altc] = minvtran(x,y,z) latc = -2.1343e-14 lonc = -76.6411 altc = 42000 As is evident, the latitude is set incorrectly to ~-76 when I had originally intended it to be set to -87.
Prashant Kumar answered .
2025-11-20
This difference in the setting of the camera position occurs because the point at which the camera position is being set is off the edge of the map. To illustrate this issue, label the parallels as follows:
setm(gca,'mlabelparallel',0) mlabel on
[x1,y1,z1] = mfwdtran(0,longitude,42000) isequal([x y z],[x1 y1 z1]) % Evaluates to true
longitude = -60; [x,y,z] = camposm(0,longitude,42000) [latc, lonc, altc] = minvtran(x,y,z)
The agreement is excellent in this case.