8

我正在开发包括 GoogleMaps 在内的 iOS 应用程序。GoogleMaps SDK for iOS 的实现过程已经完成。

但我想知道如何计算 GMSCamera 缩放以在地图上显示整个路线。

在 Apple Map 中,我们可能会使用 span。但是 GoogleMaps SDK 没有跨度。

请给我建议。

4

7 回答 7

18

实际上,在当前版本的 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];

这样你就可以把数学交给谷歌了,我很确定他们真的很擅长。

于 2013-06-17T07:14:51.703 回答
3

Lee的方法是对的,但是数学不对,基于google maps ios sdk document on zoom

将缩放级别增加 1 会使屏幕上的世界宽度加倍。因此,在缩放级别 N 时,世界的宽度约为 256 * 2^N,即在缩放级别 2 时,整个世界的宽度约为 1024 点。请注意,缩放级别不必是整数。地图允许的缩放级别范围取决于许多因素,包括位置、地图类型和屏幕尺寸。

计算缩放的数学应该是

zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8;
于 2013-03-05T02:56:55.953 回答
3

这是一个可能有帮助的函数,因为它可以从“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;
}

如果您可以获取坐标并将其传递给您,那么您应该没问题。

于 2013-01-18T09:01:52.810 回答
1

我在这里发布了一个类似问题的答案:

如何使用适用于 iOS 的 google maps sdk 设置区域?

它使用与 Lee 的答案类似的方法:将纬度/经度转换为像素,计算比例,然后是缩放级别。

于 2013-02-26T02:30:20.610 回答
1

迅速:

//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)
于 2016-11-02T22:03:42.290 回答
0

使用 GMSCoordinateBounds。您可以使用不同的参数(如坐标、边界等)来拟合地图。

GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:path];

https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_coordinate_bounds#a583bf55d8dd8cd10eec3473688f9d788

于 2014-11-17T17:20:17.047 回答
0

Jing,你的数学对于经度是正确的,但对于纬度,它必须有点棘手。墨卡托投影以不同方式处理纬度和经度。我在这里发布了正确的代码:https ://stackoverflow.com/a/16217785/2291425

于 2013-04-25T14:46:51.400 回答