我有一张地图,上面有很多点添加到ItemizedOverlay。
OverlayItem overlayItem = new OverlayItem(theGeoPoint, title, description);
itemizedOverlay.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay);
有没有办法从itemizedOverlay中删除特定点?
示例,假设我在不同纬度/经度上添加了很多点,我希望删除纬度点:32.3121212和经度:33.1230912,这是之前添加的。
如何删除那个点?
我真的需要这个,所以我希望有人可以提供帮助。
感谢。
全文场景(如果您对如何解决此问题有不同的想法): 将事件添加到从数据库捕获的映射中。现在,当从数据库中删除事件时,我希望同步地图并删除那些被删除的地图。 (请不要建议我重新下载除已删除的点之外的所有点,即使我已经考虑到了这一点,但它不是我想要做的选项。:p)
答案 0 :(得分:4)
使用GeoPoints Array创建MapOverlay并覆盖绘制函数:
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);
尝试谷歌一些谷歌地图教程,也许你会找到更多的解决方案。