我正在处理的应用程序有一张地图,其中包含一个顶部的圆圈,类似于要搜索的区域,另外还显示顶部英里的区域。为了计算覆盖的区域,我需要在地图相机改变后找到圆的半径(或者在Apple地图术语中,当区域改变时)。为了测试地图是否获得了半径的正确目的地/长度,我在其中心放置了一个标记,并在圆的边界处放置了一个标记。之后我计算半径并继续计算面积。我首先使用Apple地图,一切正常,现在我切换到谷歌地图,以便使用Places API和其他API。在Apple地图中,区域中的deltaLongtiude和deltaLatitude可以在区域更改时轻松计算更改。在Google地图中,他们使用相机而不是地区。它没有deltaLatitude / Longitude(如果我错了,请纠正我)。我在这里使用相同的等式来计算使用交叉乘法的距离。当我缩小地图并拖动地图时,中心标记正确放置,但边界上的标记放错了位置。请在下面找到我正在做的事情的代码。
在viewDidLoad中:我将地图设置如下:
GMSMarker *currentLocation = [GMSMarker markerWithPosition:CLLocationCoordinate2DMake(latitude, longitude)];
currentLocation.map = _map;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:latitude+0.0075 longitude:longitude zoom:13];
_map.camera = camera;
[_map setMinZoom:1 maxZoom:13];
0.0075只是为了正确调整相机。
现在,为了查看标记是否正确放置,我使用以下委托方法:
- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position{
GMSMarker *currentLocation = [GMSMarker markerWithPosition:CLLocationCoordinate2DMake(position.target.latitude-0.0075, position.target.longitude)];
currentLocation.map = _map;
GMSMarker *currentLocation2 = [GMSMarker markerWithPosition:CLLocationCoordinate2DMake(position.target.latitude-0.0075, position.target.longitude + ((0.0172*position.zoom)/13))];
currentLocation2.map = _map;
}
currentLocation在中心放置一个标记,currentLocation2在边界处放置一个标记。为了在用户缩小的情况下正确放置标记,我进行交叉乘法。由于在缩放级别13,边界标记应该是距中心标记的经度+ 0.0172,i乘以新的缩放级别0.0172并将其除以13并将该值加到经度上。当我运行应用程序并缩小并拖动地图时,边界标记放错了位置。它以某种方式具有与先前缩放级别相同的坐标。我是否必须更新任何内容以使其正常工作或我做错了什么?
查看我在这里谈论的更多内容是图片。第一个显示缩放级别13的地图。您可以在中心看到标记和边界标记。在第二张图片中,它处于不同的缩放级别,您可以看到边界标记位于同一位置,并且不会在更新的相机上添加新标记。