Сообщение
ILYA_ » 21 май 2012, 16:33
В качестве допущения примем трехмерную систему координат WGS84,
основанную на сфероиде, декартовой в районе города. Город имеет не
большие размеры и находится не в близи полюсов, поэтому такое допущение
не должно сильно сказаться на погрешностях при преобразовании координат.
Для вычисления географических координат по координатам на карте
используем выражения :
Xn=Ax∗Xc+Dx
Yn=Ay∗Yc+Dy
где (Xn ,Yn) — новые географические координаты, (Xc , Yc) —
текущие координаты на карте, (Ax ,Ay) — масштабирование по осям,
(Dx ,Dy ) — географические координаты начала отсчета системы координат
карты.
Но при таком варианте возникает погрешность 25-30м в некоторых точках.
Экспериментальным путем выяснено, что для уменьшения погрешности
необходимо предварительно повернуть карту на 6 градусов относительно начала
координат. Новые выражения преобразования координат имеют вид:
Xn=Ax∗Rx ( Xc , Yc ,angle)+Dx
Xn=Ay∗Ry ( Xc , Yyc ,angle)+Dy
Rx( x , y , angle)=x∗cos (angle)−y∗sin(angle)
Ry ( x , y , angle)=y∗cos(angle)+x∗sin(angle)
где Rx( x , y , angle), Ry (x , y , angle) – функции возвращающие координаты
после вращения точки относительно начале координат.
По 4 точкам вычисляем новые коэффициенты, которые дают
погрешность в пределах 5 метров по большей части города.
Вот изменение для одной таблицы:
update
home_territory_polygon
set
the_geom = rotateZ( the_geom, -0.12538043 );
update
home_territory_polygon
set
the_geom = scale( the_geom, 0.000062421, 0.000032628, 1);
update
home_territory_polygon
set
the_geom = translate( the_geom, 38.727393288, 58.09461128, 0 );