2013-12-05 1 views
0

Я также пытаюсь нарисовать дугу (я ссылаюсь на вопросы this и this). Я получаю от веб-сервиса следующим образом:GroundOverlay, сделанный с холстом в Google Maps API Android v2

  • Lat и LNG
  • Радиус (в метрах)
  • угол Start (конечный угол составляет Старта + 60 градусов)

Сейчас я сталкиваюсь на следующая проблема, потому что у меня нет двух LatLng, только один, а на новой карте api v2 отсутствует радиус = метод Projection.metersToEquatorPixels для предоставления RectF.set (point.x - radius, ...)

Do у вас есть код экзамен плееры, ссылки и т. д.?

А как насчет выступлений приложения, потому что у меня будет до 500 дуг на карте?

ответ

2

Начиная с LatLng точки можно вычислить другую точку LatLng в заданном расстоянии (радиус) и заданный угол следующим образом:

private static final double EARTHRADIUS = 6366198; 

/** 
* Move a LatLng-Point into a given distance and a given angle (0-360, 
* 0=North). 
*/ 
public static LatLng moveByDistance(LatLng startGp, double distance, 
     double angle) { 
    /* 
    * Calculate the part going to north and the part going to east. 
    */ 
    double arc = Math.toRadians(angle); 
    double toNorth = distance * Math.cos(arc); 
    double toEast = distance * Math.sin(arc); 
    double lonDiff = meterToLongitude(toEast, startGp.latitude); 
    double latDiff = meterToLatitude(toNorth); 
    return new LatLng(startGp.latitude + latDiff, startGp.longitude 
      + lonDiff); 
} 

private static double meterToLongitude(double meterToEast, double latitude) { 
    double latArc = Math.toRadians(latitude); 
    double radius = Math.cos(latArc) * EARTHRADIUS; 
    double rad = meterToEast/radius; 
    double degrees = Math.toDegrees(rad); 
    return degrees; 
} 

private static double meterToLatitude(double meterToNorth) { 
    double rad = meterToNorth/EARTHRADIUS; 
    double degrees = Math.toDegrees(rad); 
    return degrees; 
} 
Смежные вопросы