J'utilise la bibliothèque arcgis 100.0.0 dans android pour afficher des cartes et des informations à l'intérieur de la carte.Comment extraire tous les champs de ServiceFeatureTable dans arcgis
J'utilise le code suivant pour remplir un ServiceFeaturetable en utilisant l'URL fournie par arcGis. Je suis capable de charger la couche d'entités avec succès dans la carte. J'ai écrit un code qui écoute le clic sur le symbole sur la carte, afin que je puisse obtenir des informations sur l'élément spécifique sur la carte. Je suis en mesure d'obtenir la fonctionnalité spécifique OnClick.
Lors de l'analyse du résultat GetAttributes() de l'entité spécifique, je me rends compte qu'elle ne possède pas tous les champs. Après avoir enquêté sur internet, j'ai trouvé que FeatureTable.QueryFeaturesAsync pouvait être utilisé pour obtenir tous les champs de la fonctionnalité. Même si j'ai écrit le code pour obtenir tous les champs, je ne sais pas comment lier ce résultat avec la couche d'entités, de sorte que la fonctionnalité possède tous les champs dont j'ai besoin. Voici le code
final ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable("some URL");
ListenableFuture<FeatureQueryResult> queryresult = serviceFeatureTable.queryFeaturesAsync(null, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);
// create the feature layer using the service feature table
final FeatureLayer featureLayer = new FeatureLayer(serviceFeatureTable);
featureLayer.setSelectionColor(Color.YELLOW);
featureLayer.setSelectionWidth(10);
// add the layer to the map
mapView.getMap().getOperationalLayers().add(featureLayer);
// set an on touch listener to listen for click events
mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(getContext(), mapView) {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// get the point that was clicked and convert it to a point in map coordinates
Point clickPoint = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
int tolerance = 10;
double mapTolerance = tolerance * mMapView.getUnitsPerDensityIndependentPixel();
// create objects required to do a selection with a query
Envelope envelope = new Envelope(clickPoint.getX() - mapTolerance, clickPoint.getY() - mapTolerance, clickPoint.getX() + mapTolerance, clickPoint.getY() + mapTolerance, mapView.getMap().getSpatialReference());
QueryParameters query = new QueryParameters();
query.setGeometry(envelope);
// call select features
final ListenableFuture<FeatureQueryResult> future = featureLayer.selectFeaturesAsync(query, FeatureLayer.SelectionMode.NEW);
// add done loading listener to fire when the selection returns
future.addDoneListener(new Runnable() {
@Override
public void run() {
try {
//call get on the future to get the result
FeatureQueryResult result = future.get();
// create an Iterator
Iterator<Feature> iterator = result.iterator();
Feature feature;
// cycle through selections
int counter = 0;
while (iterator.hasNext()){
feature = iterator.next();
counter++;
String name = feature.getAttributes().get(Constants.FIELD_NAME).toString();
Log.d(getResources().getString(R.string.app_name), "Selection #: " + counter + " Table name: " + feature.getFeatureTable().getTableName());
}
//Toast.makeText(getApplicationContext(), counter + " features selected", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e(getResources().getString(R.string.app_name), "Select feature failed: " + e.getMessage());
}
}
});
return super.onSingleTapConfirmed(e);
}
});