Существует много способов решения этой проблемы с различной степенью точности.Однако все они сводятся к выполнению проекции, которая соответствует проекции вашей карты.
Если вы знаете, что ваша карта относится к многообразию проекций Меркатора, то координаты широты / долготы можно просто рассматривать как X /Y, масштабируется и переводится соответственно.То есть вы найдете простой топор + b и cy + d, которые выполняют эту работу.
Если ваша карта не является проекцией Меркатора (как, вероятно, нет, если она пытается получить согласованный масштаб,как этот, кажется, делает) тогда лучше всего предположить, что это "касательная к земле" проекция.(Это хорошо для небольших массивов.) В этом случае вам сначала нужно спроецировать широту / долготу в трехмерную систему координат.
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)
Положительные z указывают на северный полюс.Положительные y указывают на 0, 0, а положительные x указывают на lat 0 long 90 (восток), а положительные lat / long - север и восток.Конечно, вы должны сначала преобразовать в радианы.
Все это предполагает сферическую Землю, что не совсем верно, но это достаточно близко, если вы не стреляете из дальних минометов.
В любом случае, когда у вас есть XYZ, вам нужно будет поворачивать и масштабировать карту.Чтобы повернуть вокруг оси Z, просто вычтите базовую долготу, прежде чем проецировать в три измерения.Сделайте это, чтобы центрировать карту на нулевой долготе для простоты математики.
После того, как вы это сделаете, вам нужно будет только вращать земной шар вперед, пока исходная карта не окажется лицом вперед.Сделайте это с помощью 2-го поворота по оси YZ.Используйте http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections, чтобы вычислить эту часть.
Наконец, ваши координаты x, z будут очень хорошо совмещаться с координатами x, y вашей карты для соответствующего масштаба / перевода, как описано ранее..