2012-05-17 27 views
0

我有一個地圖上有很多點添加到ItemizedOverlay。從ItemizedOverlay中移除特定的GeoPoint?

OverlayItem overlayItem = new OverlayItem(theGeoPoint, title, description); 
itemizedOverlay.addOverlay(overlayItem); 
mapOverlays.add(itemizedOverlay); 

有沒有辦法從itemizedOverlay中刪除特定點?

例如,我已經在不同緯度/經度增加了很多點,我希望刪除之前添加的緯度:32.3121212和經度:33.1230912。

如何刪除JUST那一點?

我真的需要這個,所以我希望有人能幫助。

謝謝。

全文情景(如果您對如何解決此問題有不同的想法): 將事件添加到從數據庫捕獲的地圖。現在,當事件從數據庫中刪除時,我希望同步地圖並刪除那些被刪除的地圖。 (請不要建議我重新下載除已刪除的所有點以外的所有點,儘管我已經想到了這一點,但它不是我想要做的選項:p)

回答

4

創建MapOverlay GeoPoints陣列並覆蓋繪製函數:

public class MapOverlay extends Overlay 
{ 

    private ArrayList<GeoPoints>points; 
    ... 


    @Override 
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) 
    { 
      super.draw(canvas, mapView, shadow);  
      int len = points.size(); 
      if(len > 0) 
      { 
       for(int i = 0; i < len; i++) 
       { 
        // do with your points whatever you want 
        // you connect them, draw a bitmap over them and etc. 
        // for example: 
        Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.pointer); 
        mapView.getProjection().toPixels(points.get(i), screenPts); 
        canvas.drawBitmap(bmp, screenPts.x-bmp.getWidth()/2, screenPts.y - bmp.getHeight()/2, null); 
       } 
      } 
    } 

    public void addPoint(GeoPoint p) 
    { 
     // add point to the display array 
    } 

    public void removePointByIndex(int i) 
    { 
     points.remove(i); 
    } 

    public void removePointByCordinate(Double lat, Double lng) 
    { 
     int index = -1; 
     int len = points.size(); 
     if(len > 0) 
     { 
       for(int i = 0; i < len; i++) 
       { 
        if((int)(lat*1E6) == points.get(i).getLatitudeE6() && (int)(lng*1E6) == points.get(i).getLongitudeE6()) 
        { 
          index = i; 
        } 
       } 
      } 

      if(index != -1) 
      { 
       points.remove(index); 
      } 
     } 
    } 

    public void removePoint(GeoPoint p) 
    { 
     int index = -1; 
     int len = points.size(); 
     if(len > 0) 
     { 
       for(int i = 0; i < len; i++) 
       { 
        if(p == points.get(i)) 
        { 
          index = i; 
        } 
       } 
      } 

      if(index != -1) 
      { 
       points.remove(index); 
      } 
     } 
    } 

} 

(我沒有測試上面的類)

,然後在MapActivity類你可以:

MapView mapView = (MapView) findViewById(R.id.mapview); 
mapView.setClickable(true); 
MapOverlay mapOverlay = new MapOverlay();      
List<Overlay> listOfOverlays = mapView.getOverlays(); 
listOfOverlays.add(mapOverlay); 

嘗試谷歌的一些谷歌地圖教程,也許你會發現更多的解決方案。

+0

謝謝你爲回答我而付出的巨大努力。你在那裏給出的好的代碼。我可以理解很多,但我沒有看到實際上可以刪除某個特定點的部分。方法removePoint(GeoPoint p),應該在那裏做什麼?這是令我困擾的事情。 另外,在你提到MapActivity類的地方,這些命令不會清除listOfOverlays中的所有點嗎? – bubbly

+0

這個方法你在開始時只調用一次,我從我的代碼複製它。你以前不需要清除。 – goodm

+0

removePoint(GeoPoint p)只是從數組中刪除一個點嗎?但是,如果我發送座標,它怎麼知道我說的是哪一點? (geopoint) – bubbly