2014-06-24 52 views
0

我正在使用適用於iOS的Google地圖。每當用戶鍋向左或向右我用這個方法Google Maps SDK,iOS,如何計算相機移動差異

- (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; 
    } 

我認爲我可以把限制在lngtitude或緯度的變化初始位置的負載,並根據該決定是否加載新數據與否,但我必須考慮縮放級別,覆蓋範圍。 任何人都有這個想法?將不勝感激

回答

0

這裏有一個想法:

當你做你的數據提取,墊在各方面的可見區域的一些量(例如20%)的範圍。

然後當視圖移動時,如果新的可見區域完全包含在填充區域內,則不需要重新加載數據。如果某些新區域在外面,則需要重新加載。

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; 
}