Как отобразить круг в GMSMapView

мне нужно отобразить круг (как с MKCircle) на GMSMapView. Это легко при использовании MKMapView и MKCircle, но не может использовать MKCircle с GMSMapView. Есть идеи?

обновление:
Это текущие (18.03.2013) опции:
1. Маркер земли, содержащий изображение круга.
2. A окружность, состоящая из нескольких сегментов (полилиния).

Edit:
3. Google добавил GMSCircle (23.04.2013)

 GMSGroundOverlayOptions *overlayOptions = [GMSGroundOverlayOptions options];
    overlayOptions.icon = [UIImage imageNamed:@"circle"];
    overlayOptions.position = touchMapCoordinate;
    overlayOptions.bearing = 0;
    overlayOptions.zoomLevel = 14.3;
 [mapView addGroundOverlayWithOptions:overlayOptions];

для изображения круга 40x40 пикселей он выглядит нормально. (радиус примерно 100 м)

небольшое сегментированное решение пути:

    GMSPolylineOptions *circle = [GMSPolylineOptions options];
    CGPoint touchPoint = [mapView.projection pointForCoordinate:touchMapCoordinate];
    GMSMutablePath *path = [GMSMutablePath path];

    CGPoint circlePoint;

    for (int i = 0; i < 360; i++)
    { 
        circlePoint.x = touchPoint.x + radius * cos(i*M_PI/180);
        circlePoint.y = touchPoint.y + radius * sin(i*M_PI/180);

        CLLocationCoordinate2D aux = [mapView.projection coordinateForPoint:circlePoint];
        [path addCoordinate:aux];
    }

    circle.path = path;
    circle.width = 1;

    [mapView addPolylineWithOptions:circle];

изменить : 08.05.2013

решение GMSCircle:

     CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(latitude, longitude);
     GMSCircle *circ = [GMSCircle circleWithPosition:circleCenter
                                     radius:1000];

     circ.fillColor = [UIColor blueColor];
     circ.strokeColor = [UIColor redColor];
     circ.strokeWidth = 5;
     circ.map = mapView;

3 ответов


на данный момент SDK не поддерживает круги, но есть запрос функции для добавления кругов здесь:

https://code.google.com/p/gmaps-api-issues/issues/detail?id=4971

тем временем вы могли бы подделать круг, нарисовав полилинию с несколькими короткими сегментами?


немного поздно, так как вопрос старше года, но поиск Google привел меня сюда, поэтому я подумал, что обновлю это. Потомство 4tw успешно!

сейчас GMSCircle который может сделать, насколько я знаю, почти все MKCircle может.
документация Google по GMSCircle.

// Build a circle for the GMSMapView
GMSCircle *geoFenceCircle = [[GMSCircle alloc] init];
geoFenceCircle.radius = 130; // Meters
geoFenceCircle.position = SOME_CLLOCATION.coordinate; // Some CLLocationCoordinate2D position
geoFenceCircle.fillColor = [UIColor colorWithWhite:0.7 alpha:0.5];
geoFenceCircle.strokeWidth = 3;
geoFenceCircle.strokeColor = [UIColor orangeColor];
geoFenceCircle.map = mapView; // Add it to the map.

он ведет себя очень похоже на MKCircle (overlay) в том, что он изменяет размер с уровнем масштабирования карты и т. д. Не обращайте внимания на синий круг в центр; это местоположение пользователя, показанное на карте, и я просто использовал ту же координату для центральной точки GMSCircle.

супер просто. Проверьте изображения:

один уровень масштабирования : enter image description here

и здесь мы немного уменьшены: enter image description here


func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
    // Make sure cicle is a GMSCircle Object  and it is a class variable
    circle.map = nil

    let point = mapView.center
    circle.position = mapView.projection.coordinate(for: point)
    circle.radius = 130.0
    circle.fillColor = .clear
    circle.strokeColor = .black
    circle.strokeWidth = 3.4
    circle.map = mapView
}