如何在Google Maps Android API实用程序库中刷新热力图层的点?

5
我有这段代码,但是当我尝试刷新热力图点时,没有任何反应。我不知道是否需要其他东西,我已经查看了示例,但在我的情况下它不起作用。我正在使用碎片。
是否有其他方法可以刷新热力图层而无需重建地图对象?
public class tab2 extends Fragment{
 MapView mapView;
 GoogleMap MygoogleMap;

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view =inflater.inflate(R.layout.tab2, container, false);
mapView = (MapView) view.findViewById(R.id.mi_mapa);


mapView.onCreate(savedInstanceState);

    MygoogleMap = mapView.getMap();

    MygoogleMap.setMyLocationEnabled(true);
    MapsInitializer.initialize(this.getActivity());
    latitude = 18.916; 
    longitude = -99.236;


MygoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude,
            longitude), 3.5f));
    return view;
}


public void setHotPoints(){

    Handler_sqlite_mapa helper = new Handler_sqlite_mapa(this.miContexto);
    helper.abrir(); //Abre la conexion a la BD
    String resultado[][] = helper.getTop(99);
    helper.cerrar();
    int lecturasConfirmadas=0;
    int columnas = (resultado.length);
    int filas = (resultado[0].length);
    Log.d("MiMapa:", "Columnas:" + columnas);
    Log.d("MiMapa:", "Filas:" + filas);

    if (mProvider == null) {
        List<LatLng> list = new ArrayList<LatLng>();

        String valores = "";
        for(int i = 0; i < filas; i++) {
                if(resultado[3][i]!=null){
                    double la = Double.parseDouble(resultado[1][i]);
                    double lo = Double.parseDouble(resultado[2][i]);
                    list.add(new LatLng(la,lo));
                    lecturasConfirmadas++;
                }
        }

        if(lecturasConfirmadas>0){
            MygoogleMap.clear();
            mProvider = new HeatmapTileProvider.Builder()
                    .data(list)
                    .build();
            mOverlay = MygoogleMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
            mOverlay.clearTileCache();
        }

    }

}

}

我不太确定你所说的“刷新”热力图层是什么意思,但如果你只想删除热力图层,你可以使用mOverlay.remove();并创建一个新的图层,或者你可以使用HeatmapTileProvider.setData()clearTileCache()来更改数据集。如果你还没有查看文档,请查看一下。希望这能帮到你。 - not_a_bot
谢谢。是的,我尝试过了,但当我使用这个时。mOverlay.remove();TileOverlay被删除了,但无法再次添加。我必须翻转手机以重新创建地图上的对象,以再次查看热力图。我正在使用这个库。依赖项 { 编译文件树(dir: 'libs', include: ['*.jar']) 编译'com.android.support:appcompat-v7:22.1.1' 编译'com.google.android.gms:play-services:7.3.0' 编译'com.google.maps.android:android-maps-utils:0.3+' }您有一个删除和添加它的示例吗? - Benjamin
2个回答

2

我不确定是否有更好的方法,我正在使用删除和重新创建来强制更新热图:

    private void removeHeatMap() {
        mOverlay.remove();
    }

    private void addHeatMap() {

        mProvider = new HeatmapTileProvider.Builder()
                .weightedData(samples)
                .build();
        mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
    }

我注意到的一件事是,如果我不使用覆盖物重新创建HeatmapTileProvider实例,则热力图将无法正确更新。


1
清除瓷砖缓存就行了。
if(mHeatmapTileOverlay == null) {
    mHeatmapTileOverlay = mMap.addTileOverlay(options);
} else {
    mHeatmapTileOverlay.clearTileCache();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接