我需要在GMSMapView上显示一个圆圈(与MKCircle一样)。使用MKMapView和MKCircle时很容易,但不能将MKCircle与GMSMapView一起使用。 有任何想法吗?
更新:
这是当前(18.03.2013)的选项:
1.包含圆形图像的地面标记
一个由几个部分组成的圆(折线)。
修改
第3。谷歌添加了GMSCircle(2013年4月23日)
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;
答案 0 :(得分:9)
因为这个问题超过一年了,所以有点晚了,但谷歌搜索引导我到这里,所以我想我会更新这个。后人4TW!
据我所知,现在有一个GMSCircle
可以做MKCircle
所能做的所有事情。
Google's documentation on the 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(叠加)的行为非常相似,因为它会根据地图的缩放级别等进行调整。请忽略中心的蓝色圆圈;这是地图视图上显示的用户位置,我只是使用相同的坐标作为GMSCircle的中心点。
超级简单。看看图片:
一个缩放级别:
在这里,我们缩小了一点:
答案 1 :(得分:1)
目前SDK不支持圈子,但在此处添加圈子的功能请求:
https://code.google.com/p/gmaps-api-issues/issues/detail?id=4971
与此同时,您可以通过绘制折线来伪造一个圆圈,并有几个短段?
答案 2 :(得分:0)
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
}