Я хочу добиться этого в своем приложении, я знаю, что собираюсь нарисовать круг, но мне нужно показать маркер в верхней правой части круга на изображении ниже.
Я хочу показать 10 км над кругом, если кто знает об этом, пожалуйста, помогите мне.
Я знаю о этот вопрос, но любезно найду любое решение.
Если вы знаете широту и длину круга (внешний край), нарисуйте это тоже полезно для меня.
Я думаю, что SphericalUtil.computeOffset (from, distance, heading) - это то, что вы хотите - учитывая центр круга (от), радиус круга (расстояние) и заголовок по вашему выбору, вы затем можете добавить маркер в возвращенную позицию. Смотрите - github.com/googlemaps/android-maps-utils.
@Andy, спасибо за ваш комментарий, позвольте мне проверить
@Greggz На шаге 2 заданная широта очень отличается
@Adny прав в этом, я также использую класс SphericalUtil для решения этой проблемы,
Вы можете использовать этот класс SphericalUtil из этого git https://github.com/googlemaps/android-maps-utils
Вы можете использовать этот метод для рисования маркера 10 км
/**
* Returns the location of origin when provided with a LatLng destination,
* meters travelled and original heading. Headings are expressed in degrees
* clockwise from North. This function returns null when no solution is
* available.
* @param to The destination LatLng.
* @param distance The distance travelled, in meters.
* @param heading The heading in degrees clockwise from north.
*/
public static LatLng computeOffsetOrigin(LatLng to, double distance, double heading) {
heading = toRadians(heading);
distance /= EARTH_RADIUS;
// http://lists.maptools.org/pipermail/proj/2008-October/003939.html
double n1 = cos(distance);
double n2 = sin(distance) * cos(heading);
double n3 = sin(distance) * sin(heading);
double n4 = sin(toRadians(to.latitude));
// There are two solutions for b. b = n2 * n4 +/- sqrt(), one solution results
// in the latitude outside the [-90, 90] range. We first try one solution and
// back off to the other if we are outside that range.
double n12 = n1 * n1;
double discriminant = n2 * n2 * n12 + n12 * n12 - n12 * n4 * n4;
if (discriminant < 0) {
// No real solution which would make sense in LatLng-space.
return null;
}
double b = n2 * n4 + sqrt(discriminant);
b /= n1 * n1 + n2 * n2;
double a = (n4 - n2 * b) / n1;
double fromLatRadians = atan2(a, b);
if (fromLatRadians < -PI / 2 || fromLatRadians > PI / 2) {
b = n2 * n4 - sqrt(discriminant);
b /= n1 * n1 + n2 * n2;
fromLatRadians = atan2(a, b);
}
if (fromLatRadians < -PI / 2 || fromLatRadians > PI / 2) {
// No solution which would make sense in LatLng-space.
return null;
}
double fromLngRadians = toRadians(to.longitude) -
atan2(n3, n1 * cos(fromLatRadians) - n2 * sin(fromLatRadians));
return new LatLng(toDegrees(fromLatRadians), toDegrees(fromLngRadians));
}
В ответе на вопрос, который вы разместили, вы можете четко увидеть широту и долготу различных точек круга в шаг 2