Google Maps SDK,iOS,如何计算相机移动的差异

时间:2014-06-24 02:38:37

标签: ios google-maps google-maps-sdk-ios

我正在使用适用于iOS的Google地图。每当用户向左或向右平移时,我都会使用此方法根据新位置重新加载一些数据

- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position {

现在我试图找到一种方法来计算如果用户在同一视图中移动了一点,并且更改不是很激烈并且不能保证另一个数据加载,那么就不要加载它。为此,我创建了一个名为mostRecentCoord的变量,我在负载时保持该变量保存初始位置

 - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position    
  {
   //Here mostRecentCoord is self descriptive, latest entry before this move occured.
  if(position.target.latitude == mostRecentCoord.latitude && position.target.longitude == 
   mostRecentCoord.longitude) {
    return;
  }

我认为我可以限制长度或纬度的变化,并根据它决定是否加载新数据,但是我必须考虑缩放级别,覆盖范围。 有人有这方面的想法吗?会很感激

2 个答案:

答案 0 :(得分:0)

这是一个想法:

当您进行数据提取时,将所有边上的可见区域的边界填充一定量(例如,按20%)。

然后,当视图移动时,如果新的可见区域完全包含在填充区域内,则无需重新加载数据。如果某个新区域在外面,则需要重新加载。

答案 1 :(得分:0)

每次相机结束视图更改时都会调用idleAtCameraPosition。

lat和lng是你的动作,直到用户停止平移(改变相机)。您可以使用以下代码将其转换为像素,反之亦然:CGPoint point = [map.projection pointForCoordinate:coordinates];

GMSCameraPosition *lastCameraPosition;



- (void)mapView:(GMSMapView *)pMapView didChangeCameraPosition:(GMSCameraPosition *)position {

            if (lastCameraPosition == nil) lastCameraPosition = position;

            // Algebra :) substract coordinates with the difference of camera changes
            double lat = position.target.latitude - lastCameraPosition.target.latitude;
            double lng = position.target.longitude - lastCameraPosition.target.longitude;
    }

别忘了:

- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position {

    lastCameraPosition = nil;
}