Как определить координаты gps точки на плане? если известны координаты 4-ех его углов
Есть некая картинка/план, который соотносится с координатами gps нашего мира, а именно известны координаты gps всех его четырёх углов. Ширина и высота картинки также известны. Как можно посчитать координаты gps некой точки на этом плане, если мне будут известы только координаты gps четырёх углов картинки, и "пиксельные координаты" выбранной точки на плане?
1)Картинка может быть повёрнута относительно своего центра на любой градус 2)Учитывать кривизну земли не обязательно(не такой большой план)
Я пытался преоброзовывать через плоские координаты Гаусса-Крюгера, но слишком сложно для такой задачи. Через вектора тоже не получилось.
Готовый код решения вопроса(Java)
Спасибо Stanislav Volodarskiy за предоставленные формулы
private static ImmutablePair<Double, Double> convertCoords(
double initialWidth,
double initialHeight,
double targetX,
double targetY,
double pointLTX, // LeftTop
double pointLTY, // LeftTop
double pointRTX, // RightTop
double pointRTY, // RightTop
double pointRBX, // RightBottom
double pointRBY, // RightBottom
double pointLBX, // LeftBottom
double pointLBY // LeftBottom
) {
double c00 = ((initialWidth - targetX) * (initialHeight - targetY))/ (initialWidth * initialHeight);
double cw0 = (targetX * (initialHeight - targetY)) / (initialWidth * initialHeight);
double c0h = ((initialWidth - targetX) * targetY) / (initialWidth * initialHeight);
double cwh = (targetX * targetY) / (initialWidth * initialHeight);
Double x = c00 * pointLTX + cw0 * pointRTX + c0h * pointLBX + cwh * pointRBX;
Double y = c00 * pointLTY + cw0 * pointRTY + c0h * pointLBY + cwh * pointRBY;
return new ImmutablePair<>(x,y);
}
Ответы (1 шт):
g00 - GPS координаты в пикселе (0, 0) gw0 - GPS координаты в пикселе (w, 0) g0h - GPS координаты в пикселе (0, h) gwh - GPS координаты в пикселе (w, h) x, y - координаты пикселя
Тогда:
c00 = ((w - x) * (h - y)) / (w * h) cw0 = ( x * (h - y)) / (w * h) c0h = ((w - x) * y ) / (w * h) cwh = ( x * y ) / (w * h) gxy = c00 * g00 + cw0 * gw0 + c0h * g0h + cwh * gwh