我正在开发iOS应用程序,包括GoogleMaps。 GoogleMaps SDK for iOS的实施流程尚未完成。
但我想知道如何计算GMSCamera缩放 在地图上显示整条路线。
在Apple Map中,我们使用span,也许。 但GoogleMaps SDK没有跨度。
请给我建议。
答案 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];