Dans mon projet, j'utilise un MapView
d'ArcGIS Runtime pour Android. J'effectue une requête pour les entités dans un polygone et avec une certaine valeur d'attribut. Lorsque la recherche est terminée, je souhaite effacer tous les graphiques existants sur la carte. J'ai essayé map.removeAll()
mais il efface toutes mes couches! Comment puis-je effacer tous les graphiques au lieu de supprimer tous les calques?Effacer le calque MapView dans ArcGIS Runtime pour Android
Ceci est mon code:
private class AsyncQueryTask extends AsyncTask<String, Void, FeatureResult> {
@Override
protected void onPreExecute() {
progress = new ProgressDialog(Naghshe.this);
progress = ProgressDialog.show(Naghshe.this, "",
"Please wait....query task is executing");
}
@Override
protected FeatureResult doInBackground(String... queryArray) {
if (queryArray == null || queryArray.length <= 1)
return null;
String url = queryArray[0];
QueryParameters qParameters = new QueryParameters();
String whereClause = queryArray[1];
// SpatialReference sr = SpatialReference.create(102100);
qParameters.setGeometry(map.getExtent());
// qParameters.setOutSpatialReference(sr);
qParameters.setReturnGeometry(true);
qParameters.setWhere(whereClause);
QueryTask qTask = new QueryTask(url);
try {
FeatureResult results = qTask.execute(qParameters);
return results;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(FeatureResult results) {
if (results != null) {
int size = (int) results.featureCount();
for (Object element : results) {
progress.incrementProgressBy(size/100);
if (element instanceof Feature) {
Feature feature = (Feature) element;
Graphic graphic = new Graphic(feature.getGeometry(),
feature.getSymbol(), feature.getAttributes());
_graphicsLayer = new GraphicsLayer();
_graphicsLayer.addGraphic(graphic);
SimpleRenderer sr = new SimpleRenderer(new SimpleFillSymbol(Color.RED));
_graphicsLayer.setRenderer(sr);
boolean m =false;
if(!m)
{
map.addLayer(_graphicsLayer);
m=true;
}else {
map.removeLayer(_graphicsLayer);
map.addLayer(_graphicsLayer);
}
map.zoomin();
k++;
}
}
}
progress.dismiss();
boolQuery = false;
}
FYI il semble que vous créez une nouvelle 'GraphicsLayer' pour chaque résultat de recherche. Vous devriez probablement créer votre 'GraphicsLayer' en dehors de la boucle de sorte que vous ayez plusieurs graphismes dans un calque au lieu de plusieurs calques avec un graphisme chacun. Mais c'est à vous de décider. –