Подскажите где у меня ошибка в преобразовании координат?
Ведь в пределах малой площади нет искажения? должно работать?
Как это можно сделать правильно?
моя custom-коорд. система считается от нуля до единицы по Х и У.
// локальная дельта
$dx = abs(0.332646677347982 - 0.6040741588464179);
$dy = abs(0.38477149614709694 - 0.5060349431601434);
// аналогичная глобальная дельта (совмещал по точкам типа дом, кольцо троллейбуса)
$dlng = abs(38.449402 - 38.515776);
$dlat = abs(48.937471 - 48.936491);
// коэффициенты
$cfx = $dx / $dlng;
$cfy = $dy / $dlat;
echo "$cfx=$cfx; $dx=$dx; $dlng=$dlng";
echo "\n$cfy=$cfy; $dy=$dy; $dlat=$dlat";
// теперь чтобы перевести локальную произвольную точку $lx $ly в глобальную $lng $lat нужно разделить на коэффициент
$lng_global_from_local = $lx / $cfx;
$lat_global_from_local = $ly / $cfy;
/////// ответ неверный!!!! пробовал на 100 точках, точки почему-то сбиваются вкучу!?
?>
Спасибо.
UPD:
На всякий случай сохраню-ка я код определения начала координат.
// первая совмещенная точка
$p1 = (object)array(
'x' => 0.5153582055390249,
'y' => 0.5072709239337758,
'lng' => 38.500267,
'lat' => 48.936491,
);
// вторая совмещенная точка
$p2 = (object)array(
'x' => 0.4139162279697871,
'y' => 0.33978789959563593,
'lng' => 38.4826,
'lat' => 48.956016,
);
// дельта 1й и 2й точки
$d = (object)array(
'x' => abs($p1->x - $p2->x),
'y' => abs($p1->y - $p2->y),
'lng' => abs($p1->lng - $p2->lng),
'lat' => abs($p1->lat - $p2->lat),
);
// коэффициент для x и y
$kx = $d->x / $d->lng;
$ky = $d->y / $d->lat;
// используя точку p1 и коэффициент, определим начала координат глобальные
// определим дельту от точки 1 до начала координат
$d3 = (object)array(
'x' => $p1->x,
'y' => $p1->y,
);
$d3->lng = $d3->x / $kx;
$d3->lat = $d3->y / $ky;
// определим точку начала координат глобальную
$p0 = (object)array(
'x' => 0.0,
'y' => 0.0,
);
$p0->lng = $p1->lng - $d3->lng;
$p0->lat = $p1->lat + $d3->lat; // к экватору широта уменьшается, поэтому знак обращается, из минуса в плюс!
// определим глобальные координаты произвольной точки
$ozero = (object)array(
'x' => 0.4126039520866712,
'y' => 0.29687953002212564,
);
$ozero->lng = $p0->lng + $ozero->x / $kx;
$ozero->lat = $p0->lat - $ozero->y / $ky; // к экватору широта уменьшается, поэтому знак обращается, из плюса в плюс!
echo '$p0:', print_r($p0, 1), ' $ozero:', print_r($ozero, 1), ' $kx:', $kx, ' $ky:', $ky;
?>