我已经构建了一个活动,该活动采用我用于地图的自定义图像,然后知道左上角和右下角的gps我在地图顶部绘制了一个gps。它工作得很好,但我想提高准确性。我知道它是关闭的,因为当我记录设备位置并将其插入谷歌地图时,它实际上比我在自定义地图上表示的更准确。
所以......因为我有地图的左上角和右下角gps并将它们映射到相应的像素坐标,我如何使用Helmert变换精确地将设备gps精确地绘制成像素。
编辑:
我目前正在使用此功能将设备的gps绘制到屏幕上。
public double getCurrentPixelY(Location upperLeft, Location lowerRight, Location current) {
double hypotenuse = upperLeft.distanceTo(current);
double bearing = upperLeft.bearingTo(current);
double currentDistanceY = Math.cos(bearing * Math.PI / OneEightyDeg) * hypotenuse;
// "percentage to mark the position"
double totalHypotenuse = upperLeft.distanceTo(lowerRight);
double totalDistanceY = totalHypotenuse * Math.cos(upperLeft.bearingTo(lowerRight) * Math.PI / OneEightyDeg);
double currentPixelY = currentDistanceY / totalDistanceY * ImageSizeH;
return currentPixelY;
}
public double getCurrentPixelX(Location upperLeft, Location lowerRight, Location current) {
double hypotenuse = upperLeft.distanceTo(current);
double bearing = upperLeft.bearingTo(current);
double currentDistanceX = Math.sin(bearing * Math.PI / OneEightyDeg) * hypotenuse;
// "percentage to mark the position"
double totalHypotenuse = upperLeft.distanceTo(lowerRight);
double totalDistanceX = totalHypotenuse * Math.sin(upperLeft.bearingTo(lowerRight) * Math.PI / OneEightyDeg);
double currentPixelX = currentDistanceX / totalDistanceX * ImageSizeW;
return currentPixelX;
}
我知道我需要在某处进行调整,但是看看helmert转换,我无法用现有的代码开始实现它。
编辑:
在网上查看更多内容后,我可以看到使用大圈公式可能有所帮助。下面是我正在考虑实施的链接
http://introcs.cs.princeton.edu/java/12types/GreatCircle.java.html
答案 0 :(得分:1)
以下是计算helmert系数的源代码:
http://helmparms3d.sourceforge.net/
也许有一种更简单的方法(对于小地图也有所谓的2d头盔变换,如你的图片)
使用该代码得到helmert系数,这些系数是3x3矩阵。所以你需要能够将向量与矩阵相乘的代码 3d图形例程具有这样的矩阵乘法。