Why does CAMPOSM return incorrect Cartesian coordinates

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 axesaxesm ('vperspec','Grid', 'on','Frame','on')axis off% Display a surfaceload geoidmeshm(geoid, geoidrefvec)% Display coastline vectorsload coastplotm(lat,long)% Change camera position using CAMPOSMlongitude = -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.


Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

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

Now, it should be clear that the specified camera position is off the western edge of the map.

However, when we verify with MFWDTRAN, we see that the given (lat,long) pair evaluates to the same Cartesian cordinates:

[x1,y1,z1] = mfwdtran(0,longitude,42000)isequal([x y z],[x1 y1 z1]) % Evaluates to true

Therefore, it is evident that the round-trip computation does not work in this case, since the specified position is off the edge of the map.

This solution can also be substantiated by choosing a more reasonable camera position, eg. (lat=0,long=-60,alt=42000). This longitude should keep us on the map:




Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Technical Source

Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.