我正在开发包括 GoogleMaps 在内的 iOS 应用程序。GoogleMaps SDK for iOS 的实现过程已经完成。
但我想知道如何计算 GMSCamera 缩放以在地图上显示整个路线。
在 Apple Map 中,我们可能会使用 span。但是 GoogleMaps SDK 没有跨度。
请给我建议。
我正在开发包括 GoogleMaps 在内的 iOS 应用程序。GoogleMaps SDK for iOS 的实现过程已经完成。
但我想知道如何计算 GMSCamera 缩放以在地图上显示整个路线。
在 Apple Map 中,我们可能会使用 span。但是 GoogleMaps SDK 没有跨度。
请给我建议。
实际上,在当前版本的 SDK 中,您可以使用 fitBounds:
GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:yourPath];
//There are several useful init methods for the GMSCoordinateBounds!
GMSCameraUpdate *update = [GMSCameraUpdate fitBounds:bounds];
[mapView_ moveCamera:update];
这样你就可以把数学交给谷歌了,我很确定他们真的很擅长。
Lee的方法是对的,但是数学不对,基于google maps ios sdk document on zoom
将缩放级别增加 1 会使屏幕上的世界宽度加倍。因此,在缩放级别 N 时,世界的宽度约为 256 * 2^N,即在缩放级别 2 时,整个世界的宽度约为 1024 点。请注意,缩放级别不必是整数。地图允许的缩放级别范围取决于许多因素,包括位置、地图类型和屏幕尺寸。
计算缩放的数学应该是
zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8;
这是一个可能有帮助的函数,因为它可以从“Google 兼容”的 MKMapView 计算 zoomLevel
- (NSInteger)getZoomLevel
{
MKMapView *map = (MKMapView *)self.mapView;
CLLocationDegrees longitudeDelta = map.region.span.longitudeDelta;
CGFloat mapWidthInPixels = map.bounds.size.width;
double zoomScale = longitudeDelta * 85445659.44705395 * M_PI / (180.0 * mapWidthInPixels);
double zoomer = 20 - log2(zoomScale);
if ( zoomer < 0 ) zoomer = 0;
return (NSInteger)zoomer;
}
如果您可以获取坐标并将其传递给您,那么您应该没问题。
迅速:
//Create a path
let path = GMSMutablePath()
//for each point you need, add it to your path
let position = CLLocationCoordinate2DMake(latitude, longitude)
path.add(position)
//Update your mapView with path
let mapBounds = GMSCoordinateBounds(path: path)
let cameraUpdate = GMSCameraUpdate.fit(mapBounds)
mapView.moveCamera(cameraUpdate)
使用 GMSCoordinateBounds。您可以使用不同的参数(如坐标、边界等)来拟合地图。
GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:path];
Jing,你的数学对于经度是正确的,但对于纬度,它必须有点棘手。墨卡托投影以不同方式处理纬度和经度。我在这里发布了正确的代码:https ://stackoverflow.com/a/16217785/2291425