如何计算GMSCamera zoom

时间:2013-01-16 08:55:46

标签: ios google-maps-sdk-ios

我正在开发iOS应用程序,包括GoogleMaps。 GoogleMaps SDK for iOS的实施流程尚未完成。

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

在Apple Map中,我们使用span,也许。 但GoogleMaps SDK没有跨度。

请给我建议。

7 个答案:

答案 0 :(得分: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];

通过这种方式,您可以将数学运用到谷歌,我非常确定他们真的很擅长。

答案 1 :(得分: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;
}

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

答案 2 :(得分:3)

李的方法是对的,但数学不对,基于谷歌地图ios sdk文件缩放

  

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

计算缩放的数学运算应为

zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8;

答案 3 :(得分:1)

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

How to setRegion with google maps sdk for iOS?

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

答案 4 :(得分: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)

答案 5 :(得分:0)

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

答案 6 :(得分:0)

使用GMSCoordinateBounds。您可以使用不同的参数来拟合地图,例如cooodinates,bounds等。

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

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