Google Map Android: маркер над кругом

Я хочу добиться этого в своем приложении, я знаю, что собираюсь нарисовать круг, но мне нужно показать маркер в верхней правой части круга на изображении ниже.

Google Map Android: маркер над кругом

Я хочу показать 10 км над кругом, если кто знает об этом, пожалуйста, помогите мне.

Я знаю о этот вопрос, но любезно найду любое решение.

Если вы знаете широту и длину круга (внешний край), нарисуйте это тоже полезно для меня.

В ответе на вопрос, который вы разместили, вы можете четко увидеть широту и долготу различных точек круга в шаг 2

Greggz 13.09.2018 15:40

Я думаю, что SphericalUtil.computeOffset (from, distance, heading) - это то, что вы хотите - учитывая центр круга (от), радиус круга (расстояние) и заголовок по вашему выбору, вы затем можете добавить маркер в возвращенную позицию. Смотрите - github.com/googlemaps/android-maps-utils.

Andy 13.09.2018 17:47

@Andy, спасибо за ваш комментарий, позвольте мне проверить

Mohit Suthar 14.09.2018 07:00

@Greggz На шаге 2 заданная широта очень отличается

Mohit Suthar 14.09.2018 07:00
0
4
469
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавьте следующий код в метод onMapReady ():

Ответ принят как подходящий

@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));
}

Другие вопросы по теме