2011-04-20 65 views
1

我正在開發一個MapView和GPS應用程序。 我的問題是用戶可能會在使用我的應用程序時斷開連接,所以他會走在完全灰色的地圖中。我想暫時緩存地圖,以便稍後查看。 我知道Google地圖API不允許緩存地圖,但我想確定是否TEMPORARILY緩存它(並在應用程序關閉時刪除它)也是禁止的。暫時緩存地圖的一部分(MapView)

我聽說過openstreetmaps/osmdroid,但我想確認在刪除我的一半代碼之前我必須使用它。

回答

2

因爲我需要satelliteView,我最終使用了一種可以改進的方法。

我開始一個線程,要求控制器去用戶附近的位置。它的下載和緩存由MapView的管理:

int latitudeSpan = mapView.getLatitudeSpan(); 
     int longitudeSpan = mapView.getLongitudeSpan(); 
     for(int i=-MEMORIZED_MAP_SIZE;i<=MEMORIZED_MAP_SIZE;i++) 
     { 
      for(int j=-MEMORIZED_MAP_SIZE;j<=MEMORIZED_MAP_SIZE;j++) 
      { 
       synchronized (this) 
       { 
        if(i==j&&j==0) j++; 
        Message msg = new Message(); 
        msg.arg1=latitude+latitudeSpan*i; 
        msg.arg2=longitude+longitudeSpan*j; 
        msg.setTarget(MainActivity.handler); 
        msg.sendToTarget(); 
        try 
        { 
        wait(5000); 
        } 
        catch(Exception e){} 
       } 
      } 
     } 

現在,我只需要找到另一種方式比「等(5000)」要知道,地圖的一部分,我看着被下載。我會修改這條消息,如果我找到一個。

+1

這違反了Google的服務條款。 – 2013-02-05 15:09:40

2

我知道Google地圖API不允許緩存地圖,但我想確定是否TEMPORARILY緩存它(並在應用程序關閉時刪除它)也是禁止的。

沒有辦法使用適用於Android的Google地圖附加組件完成此操作。

0

你有沒有完整的例子?

int latitudeSpan = mapView.getLatitudeSpan(); 
    int longitudeSpan = mapView.getLongitudeSpan(); 
    for(int i=-MEMORIZED_MAP_SIZE;i<=MEMORIZED_MAP_SIZE;i++) 
    { 
     for(int j=-MEMORIZED_MAP_SIZE;j<=MEMORIZED_MAP_SIZE;j++) 
     { 
      synchronized (this) 
      { 
       if(i==j&&j==0) j++; 
       Message msg = new Message(); 
       msg.arg1=latitude+latitudeSpan*i; 
       msg.arg2=longitude+longitudeSpan*j; 
       msg.setTarget(MainActivity.handler); 
       msg.sendToTarget(); 
       try 
       { 
       wait(5000); 
       } 
       catch(Exception e){} 
      } 
     } 
    } 

我設法解決這個部分使用2個MapView片段,其中一個是看不見的。 然後一個循環移動相機爲其他MapView創建緩存