I am not sure I understand the problem. In an equal-area projection, every plot does have the same area. That is the very point of an equal-area projection.
Can you elaborate again what the problem is?
While this is true on an equal area map projection, the "plots" on such a map are NOT of equal size on the map. Look at the map that you provided for the Biome file discussion again:
Notice that while each square on the map is of the same area, the squares on the map are
NOT of equal apparent size. The squares get smaller as one moves toward the poles. Notice how latitude distance between lines decreases as one gets closer to the poles. The 30 degree parallel is
half way up from the equator on the map even though in reality it is only a third of the way in real life.
Civ4 plots don't work this way. All Civ plots are all of equal apparent size which means they are
NOT of equal area if one is using an equal area projection. If one uses an equal area projection, the area of land bound by a single plot
increases as one moves toward the poles. The equalization of area on a equal area map comes in the spacing of latitude thus changing the size of squares to become smaller as one moves toward the poles.
Here is a specific example of how this changes things depending on which type of projection is used. The code from the SDK that I have added to calculate latitude is as follows:
Code:
int CvGeoRealismEngine::getMapLatitude(int iY)
// returns the map latitude based on map Y position and type of map
{
int iResult = 0;
int iHalfHeight = m_pTheMap->getGridHeightINLINE() / 2;
bool bEvenPlots = ((m_pTheMap->getGridHeightINLINE() % 2) == 0);
double dMaxSin = sin((double) MAX_LATITUDE);
// first determine where we are relative to the equator:
// if we have an even number of plots we need to increment
// a non-negative result so that our result cannot be zero
iResult = iHalfHeight - iY;
if (bEvenPlots && (iResult >= 0)) ++iResult;
// now figure out our latitude depending on which type of map
if (m_bEqualArea)
{
bool bIsSouthern = (iResult < 0);
if (bIsSouthern)
iResult = 0 - iResult;
// calculate the position in degrees
iResult = (int)((asin((double)iResult / (double)iHalfHeight * dMaxSin) * 180.0 / 2.0) + 0.5);
if (bIsSouthern)
return 0 - iResult;
else
return iResult;
}
else
return MAX_LATITUDE * iResult / iHalfHeight;
}
Notice the two different algorithms in calculating latitude depending on whether an equal area projection is used. If m_bEqualArea is NOT used (false), the else statement is executed, returning a latitude that is directly proportional to the Y position. If m_bEqualArea is true, then we must use a non linear relationship based on the arcsin (to determine the angle) of the Y distance. This is why the squares (plots) get smaller as you move toward the poles on an equal area projection. Latitude lines become closer together as you move towards the poles.
However, in Civ, the plots are ALL evenly spaced (and sized). This means that a plot's actual contained area will increase as one moves toward the poles on an equal area projection map.
Generally speaking, I don't insist that we use "my baby", the equal-area projection. You were the one who originally made the suggestion that we use my
Gigantic Accurate Earth Map as a yardstick for the climate engine. In reply to this, I pointed out that my map uses an equal-area projection, so if we want to use it as a yardstick, the climate engine would have to be able to produce equal-area projections as well.
True. Ok. It's not your baby in that sense. Its just that I like the equal area projection map... gives a nice undistorted look that portrays the size of the continents fairly well. However, as we have just seen, the distances themselves going north to south are distorted.