Ios 如何计算GMSCamera缩放
我正在开发iOS应用程序,包括谷歌地图。 iOS版谷歌地图SDK的实现过程已经完成 但我想知道如何计算GMSCamera zoom 用于在地图上显示整个路线 在苹果地图中,我们可能使用span。 但谷歌地图SDK没有spanIos 如何计算GMSCamera缩放,ios,google-maps-sdk-ios,Ios,Google Maps Sdk Ios,我正在开发iOS应用程序,包括谷歌地图。 iOS版谷歌地图SDK的实现过程已经完成 但我想知道如何计算GMSCamera zoom 用于在地图上显示整个路线 在苹果地图中,我们可能使用span。 但谷歌地图SDK没有span 请给我一些建议。这里有一个函数可能会有所帮助,因为它可以从“谷歌兼容”的MKMapView计算zoomLevel -(NSInteger)getZoomLevel { MKMapView*map=(MKMapView*)self.mapView; CLLocationDeg
请给我一些建议。这里有一个函数可能会有所帮助,因为它可以从“谷歌兼容”的MKMapView计算zoomLevel
-(NSInteger)getZoomLevel
{
MKMapView*map=(MKMapView*)self.mapView;
CLLocationDegrees longitudeDelta=map.region.span.longitudeDelta;
CGFloat mapWidthInPixels=map.bounds.size.width;
双zoomScale=longitudeDelta*85445659.44705395*M_PI/(180.0*mapWidthInPixels);
双缩放器=20-log2(缩放比例);
如果(zoomer<0)zoomer=0;
返回(NSInteger)缩放器;
}
如果你能抓取坐标并把它们传进来,你应该没问题。我在这里发布了一个类似问题的答案:
它使用了与Lee的答案类似的方法:将lat/lon转换为像素,计算比例,然后计算缩放级别。Lee的方法是正确的,但数学不正确,基于google maps ios sdk关于缩放的文档 将“缩放级别”增加1会使屏幕上的世界宽度增加一倍 屏幕。因此,在缩放级别N时,世界的宽度约为 256*2^N,即在缩放级别2时,整个世界大约为1024 点宽。请注意,缩放级别不必是整数。这个 地图允许的缩放级别范围取决于以下因素: 因素包括位置、地图类型和屏幕大小 计算缩放的数学应该是
zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8;
Jing,你的数学对经度是正确的,但对纬度来说,它必须稍微复杂一点。墨卡托投影以不同的方式处理纬度和经度。我在这里发布了正确的代码:实际上,在当前版本的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];
这样你就可以把数学知识传授给谷歌了,我敢肯定他们真的很擅长 使用gmscoordinatedbounds。可以使用不同的参数(如坐标、边界等)拟合贴图 GMSCoordinateBounds*bounds=[[GMSCoordinateBounds alloc]initWithPath:path]
Swift:
//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)
非常感谢你!我明天就试试这个!计算zoomscale的数学正确吗?为什么与具有相同longitudeDelta的MapKit地图相比,我在google地图上获得了更小的缩放…反问题解决方案如下:
longitudeDelta=360*mapView.bounds.size.width/(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)