2016-12-08 4 views
0

Я использую arcgis library 100.0.0 в android для отображения карт и информации внутри карты.Как получить все поля из ServiceFeatureTable в arcgis

Я использую следующий код для заполнения ServiceFeaturetable, используя URL, предоставленный arcGis. Я могу успешно загрузить функциональный слой в mapview. Я написал код, который прослушивает щелчок по символу на карте, чтобы я мог получить некоторую информацию о конкретной функции на карте. Я могу получить конкретную функцию OnClick.

При исследовании результата GetAttributes() конкретной функции я понимаю, что у нее нет всех полей. После изучения в Интернете я обнаружил, что FeatureTable.QueryFeaturesAsync можно использовать для получения всех полей этой функции. Несмотря на то, что я написал код для получения всех полей, я не знаю, как связать этот результат с функциональным слоем, чтобы функция имела все поля, которые мне нужны. Вот код

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); 
      } 
     }); 

ответ

0

Попробуйте заменить код

из

final ListenableFuture<FeatureQueryResult> future = featureLayer.selectFeaturesAsync(query, FeatureLayer.SelectionMode.NEW); 

в

final ListenableFuture<FeatureQueryResult> future = serviceFeatureTable.queryFeaturesAsync(query, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL); 

Это работает для меня!

 Смежные вопросы

  • Нет связанных вопросов^_^