With the release of KML 2.1 and the introduction of dynamic display boxes, it became necessary to know the relationship between view range (ie Altitude) and cartographic scales to convert the dynamic display values from layers in ArcGIS to its KML representation.
I calculated the following formulas from the Bounding Box and Range parameters returned by GE. I used the Haversine formula and calculated the represented pixel width in meters and then converted that to real world distance. You can see the graph of Scale vs GE Altitude below. There is some difference in the formula if you are looking N/S or E/W. The formulas are below.
Given a relative scale in (1:X) ie 1:24,000
N or S Up
Alt = -0.000000187 * X2 + 2.00587 * X - 5.4758
E or W Up
Alt = -0.000000155 * X2 + 1.80864 * X + 10562.8812
Example:
North Up, Max Scale 1:36,000
X = 36,000
Alt =
-0.000000187 * 360002 + 2.00587 * 36000 - 5.4758
-0.000000187 * 1296000000 + 2.00587 * 36000 - 5.4758
71963.4922 meters
I still need to do the calculations for Min Scale using the MinLodPixels tag. I’d also like to make a little app that will read a ArcGIS layer defination and output the KML tags to use in the Regions tag. I’d love to know if I made an error in my calculations or if anyone has something to contribute.


[...] Should offer to read .lyr files in addition to shape files. All the styling info it needs, including visiblity scaling has already been recorded there. Why should I have to go through all that again, using unfamilar scales of km or mi above earth’s surface. (By the way to help with that you can use the formula provided in an earlier post) [...]
Nice work! Do you think using a different map unit (e.g. miles/degrees instead of meters) can affect the result?
I am not sure which influence the map unit does have on the map scale.
I’m working on something similar, and I noticed that the bounding box returned by google earth is not exactly what is displayed on screen, but slightly bigger. If you display the bounding box information and move your mouse on the edges of the screen you will see that returned bounding box is wider than what you can reach with the pointer. This causes problems when calculating distance/pixel.