Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何计算GMSCamera缩放_Ios_Google Maps Sdk Ios - Fatal编程技术网

Ios 如何计算GMSCamera缩放

Ios 如何计算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

我正在开发iOS应用程序,包括谷歌地图。 iOS版谷歌地图SDK的实现过程已经完成

但我想知道如何计算GMSCamera zoom 用于在地图上显示整个路线

在苹果地图中,我们可能使用span。 但谷歌地图SDK没有span


请给我一些建议。

这里有一个函数可能会有所帮助,因为它可以从“谷歌兼容”的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)