2011-06-25 103 views
1

我正在开发一个android应用程序,我在Google map中有两个GeoPoints。一个GeoPoint已修复,其他GeoPoint是我当前的位置。 在我目前的位置,我正在修复GeoPoint的方向上放置一个箭头点,因为我的当前位置发生变化,所以箭头将改变方向。它工作正常,但在大多数情况下,它显示错误的方向。Google地图中两个GeoPoints之间的方向android

这是我的代码。

  Paint paint = new Paint(); 
     GeoPoint gp1; 
     GeoPoint gp2; 
     Point point1,point2; 
     Projection projection = mapView.getProjection(); 
     projection.toPixels(gp1, point1); 
     projection.toPixels(gp2, point2); 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.arrow); 
     double dlon = gp2.getLongitudeE6() - gp1.getLongitudeE6(); 
     double dlat = gp2.getLatitudeE6() - gp1.getLatitudeE6(); 
     double a = (Math.sin(dlat/2) * Math.sin(dlat/2)) + Math.cos(gp1.getLatitudeE6()) * Math.cos(gp2.getLatitudeE6()) * (Math.sin(dlon/2) * Math.sin(dlon/2)); 
     double angle = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
     Matrix matrix = new Matrix(); 
     matrix.postTranslate(-25, -25); 
     matrix.postRotate(convertToRadians(angle)); 
     matrix.postTranslate(point1.x, point1.y);  
     paint.setAntiAlias(true); 
     paint.setFilterBitmap(true); 
     canvas.drawBitmap(bmp, matrix, paint); 

等待您的帮助,并提前致谢。

Altaf

回答

0

你从哪里得到那个公式?简单的角度计算似乎非常复杂。通常我只是用ATAN2与Y,X:

double angle = Math.atan2(dlat, dlon); // in radians 

这是假设你的箭头沿着由默认的水平轴(正东)指向。你可能需要调整它的箭头所指向的任何方向。例如,如果它指向一个恒定的90度,只需旋转一个额外的0.5 * PI拉弧来对齐它。

+0

我已经改变了箭头的方向,并使用Math.atan2仍然不能正常工作。准确性有所提高,但仍然在某些情况下,它没有正确显示方向 – Altaf

+0

它有多少'关',以及在什么情况下? – Geobits

+0

轴承怎么样? Location.BearingTo(位置2)?? – MSaudi

1

使用投影点进行角度计算而不是地理定位点,因为您的箭头将显示投影点的方向。

替换

double dlon = gp2.getLongitudeE6() - gp1.getLongitudeE6(); 
double dlat = gp2.getLatitudeE6() - gp1.getLatitudeE6(); 

double dlon = point2.x - point1.x; 
double dlat = point2.y - point1.y; 

对于角计算,公式由 'Geobits' 建议是简单&更好。

double angle = Math.atan2(dlat, dlon); 

我彻底测试过这段代码,它适用于我的应用程序中的所有情况。

相关问题