Android Open Source - arcgis-runtime-samples-android Identify






From Project

Back to project page arcgis-runtime-samples-android.

License

The source code is released under:

Apache License

If you think the Android project arcgis-runtime-samples-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/* Copyright 2014 ESRI
 *//  w  w w .j a v  a  2 s  .  c o  m
 * All rights reserved under the copyright laws of the United States
 * and applicable international laws, treaties, and conventions.
 *
 * You may freely redistribute and use this sample code, with or
 * without modification, provided you include the original copyright
 * notice and use restrictions.
 *
 * See the Sample code usage restrictions document for further information.
 *
 */

package com.esri.arcgis.android.samples.identifytask;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.esri.android.action.IdentifyResultSpinner;
import com.esri.android.action.IdentifyResultSpinnerAdapter;
import com.esri.android.map.Callout;
import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
import com.esri.android.map.event.OnSingleTapListener;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.Point;
import com.esri.core.tasks.identify.IdentifyParameters;
import com.esri.core.tasks.identify.IdentifyResult;
import com.esri.core.tasks.identify.IdentifyTask;

/**
 * This sample allows the user to identify data based on single tap and view the
 * results in a callout window which has a spinner in its layout. Also the user
 * can select any of the results displayed and view its details. The details are
 * the attribute values.
 * 
 * The output value shown in the spinner is the display field.
 * 
 */

public class Identify extends Activity {

  // create ArcGIS objects
  MapView mMapView = null;
  IdentifyParameters params = null;

  // create UI objects
  static ProgressDialog dialog;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Retrieve the map and initial extent from XML layout
    mMapView = (MapView) findViewById(R.id.map);

    // add demographic layer to the map
    mMapView.addLayer(new ArcGISTiledMapServiceLayer(this.getResources()
        .getString(R.string.identify_task_url_for_avghouseholdsize)));

    // set Identify Parameters
    params = new IdentifyParameters();
    params.setTolerance(20);
    params.setDPI(98);
    params.setLayers(new int[] { 4 });
    params.setLayerMode(IdentifyParameters.ALL_LAYERS);

    // Identify on single tap of map
    mMapView.setOnSingleTapListener(new OnSingleTapListener() {

      private static final long serialVersionUID = 1L;

      @Override
      public void onSingleTap(final float x, final float y) {

        if (!mMapView.isLoaded()) {
          return;
        }

        // Add to Identify Parameters based on tapped location
        Point identifyPoint = mMapView.toMapPoint(x, y);

        params.setGeometry(identifyPoint);
        params.setSpatialReference(mMapView.getSpatialReference());
        params.setMapHeight(mMapView.getHeight());
        params.setMapWidth(mMapView.getWidth());
        params.setReturnGeometry(false);

        // add the area of extent to identify parameters
        Envelope env = new Envelope();
        mMapView.getExtent().queryEnvelope(env);
        params.setMapExtent(env);

        // execute the identify task off UI thread
        MyIdentifyTask mTask = new MyIdentifyTask(identifyPoint);
        mTask.execute(params);
      }

    });

  }

  private ViewGroup createIdentifyContent(final List<IdentifyResult> results) {

    // create a new LinearLayout in application context
    LinearLayout layout = new LinearLayout(this);

    // view height and widthwrap content
    layout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT));

    // default orientation
    layout.setOrientation(LinearLayout.HORIZONTAL);

    // Spinner to hold the results of an identify operation
    IdentifyResultSpinner spinner = new IdentifyResultSpinner(this, results);

    // make view clickable
    spinner.setClickable(false);
    spinner.canScrollHorizontally(BIND_ADJUST_WITH_ACTIVITY);

    // MyIdentifyAdapter creates a bridge between spinner and it's data
    MyIdentifyAdapter adapter = new MyIdentifyAdapter(this, results);
    spinner.setAdapter(adapter);
    spinner.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
        LayoutParams.WRAP_CONTENT));
    layout.addView(spinner);

    return layout;
  }

  /**
   * This class allows the user to customize the string shown in the callout.
   * By default its the display field name.
   * 
   * A spinner adapter defines two different views; one that shows the data in
   * the spinner itself and one that shows the data in the drop down list when
   * spinner is pressed.
   * 
   */
  public class MyIdentifyAdapter extends IdentifyResultSpinnerAdapter {
    String m_show = null;
    List<IdentifyResult> resultList;
    int currentDataViewed = -1;
    Context m_context;

    public MyIdentifyAdapter(Context context, List<IdentifyResult> results) {
      super(context, results);
      this.resultList = results;
      this.m_context = context;
    }

    // Get a TextView that displays identify results in the callout.
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      String LSP = System.getProperty("line.separator");
      StringBuilder outputVal = new StringBuilder();

      // Resource Object to access the Resource fields
      Resources res = getResources();

      // Get Name attribute from identify results
      IdentifyResult curResult = this.resultList.get(position);

      if (curResult.getAttributes().containsKey(
          res.getString(R.string.NAME))) {
        outputVal.append("Place: "
            + curResult.getAttributes()
                .get(res.getString(R.string.NAME)).toString());
        outputVal.append(LSP);
      }

      if (curResult.getAttributes().containsKey(
          res.getString(R.string.ID))) {
        outputVal.append("State ID: "
            + curResult.getAttributes()
                .get(res.getString(R.string.ID)).toString());
        outputVal.append(LSP);
      }

      if (curResult.getAttributes().containsKey(
          res.getString(R.string.ST_ABBREV))) {
        outputVal.append("Abbreviation: "
            + curResult.getAttributes()
                .get(res.getString(R.string.ST_ABBREV))
                .toString());
        outputVal.append(LSP);
      }

      if (curResult.getAttributes().containsKey(
          res.getString(R.string.TOTPOP_CY))) {
        outputVal.append("Population: "
            + curResult.getAttributes()
                .get(res.getString(R.string.TOTPOP_CY))
                .toString());
        outputVal.append(LSP);

      }

      if (curResult.getAttributes().containsKey(
          res.getString(R.string.LANDAREA))) {
        outputVal.append("Area: "
            + curResult.getAttributes()
                .get(res.getString(R.string.LANDAREA))
                .toString());
        outputVal.append(LSP);

      }

      // Create a TextView to write identify results
      TextView txtView;
      txtView = new TextView(this.m_context);
      txtView.setText(outputVal);
      txtView.setTextColor(Color.BLACK);
      txtView.setLayoutParams(new ListView.LayoutParams(
          LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
      txtView.setGravity(Gravity.CENTER_VERTICAL);

      return txtView;
    }
  }

  @Override
  protected void onPause() {
    super.onPause();
    mMapView.pause();
  }

  @Override
  protected void onResume() {
    super.onResume();
    mMapView.unpause();
  }

  private class MyIdentifyTask extends
      AsyncTask<IdentifyParameters, Void, IdentifyResult[]> {

    IdentifyTask task = new IdentifyTask(Identify.this.getResources()
        .getString(R.string.identify_task_url_for_avghouseholdsize));

    IdentifyResult[] M_Result;

    Point mAnchor;

    MyIdentifyTask(Point anchorPoint) {
      mAnchor = anchorPoint;
    }

    @Override
    protected void onPreExecute() {
      // create dialog while working off UI thread
      dialog = ProgressDialog.show(Identify.this, "Identify Task",
          "Identify query ...");

    }

    protected IdentifyResult[] doInBackground(IdentifyParameters... params) {

      // check that you have the identify parameters
      if (params != null && params.length > 0) {
        IdentifyParameters mParams = params[0];

        try {
          // Run IdentifyTask with Identify Parameters

          M_Result = task.execute(mParams);

        } catch (Exception e) {
          e.printStackTrace();
        }
      }

      return M_Result;
    }

    @Override
    protected void onPostExecute(IdentifyResult[] results) {

      // dismiss dialog
      if (dialog.isShowing()) {
        dialog.dismiss();
      }

      ArrayList<IdentifyResult> resultList = new ArrayList<IdentifyResult>();

      IdentifyResult result_1;

      for (int index = 0; index < results.length; index++) {

        result_1 = results[index];
        String displayFieldName = result_1.getDisplayFieldName();
        Map<String, Object> attr = result_1.getAttributes();
        for (String key : attr.keySet()) {
          if (key.equalsIgnoreCase(displayFieldName)) {
            resultList.add(result_1);
          }
        }
      }
      
      Callout callout = mMapView.getCallout();
      callout.setContent(createIdentifyContent(resultList));
      callout.show(mAnchor);

      
    }
  }
}




Java Source Code List

com.arcgis.android.samples.ExportTileCacheTask.ExportTileCacheTaskSampleActivity.java
com.arcgis.android.samples.cloudportal.featureservicetablequery.MainActivity.java
com.arcgis.android.samples.cloudportal.querycloudfeatureservice.MainActivity.java
com.arcgis.android.samples.dynamiclayer.DynamicLayerRendererActivity.java
com.arcgis.android.samples.geometrysample.BufferFragment.java
com.arcgis.android.samples.geometrysample.GeometrySampleActivity.java
com.arcgis.android.samples.geometrysample.GeometryUtil.java
com.arcgis.android.samples.geometrysample.SampleListFragment.java
com.arcgis.android.samples.geometrysample.SpatialRelationshipsFragment.java
com.arcgis.android.samples.geometrysample.UnionDifferenceFragment.java
com.arcgis.android.samples.localdata.localrasterdata.EditTextUtils.java
com.arcgis.android.samples.localdata.localrasterdata.FileBrowserFragment.java
com.arcgis.android.samples.localdata.localrasterdata.HillshadeRendererParametersFragment.java
com.arcgis.android.samples.localdata.localrasterdata.MainActivity.java
com.arcgis.android.samples.localdata.localrasterdata.OnDialogDismissListener.java
com.arcgis.android.samples.localdata.localrasterdata.RendererType.java
com.arcgis.android.samples.localdata.localrasterdata.StretchParametersFragment.java
com.arcgis.android.samples.maps.basemaps.MainActivity.java
com.arcgis.android.samples.maps.fragmentmanagement.BasemapListFragment.java
com.arcgis.android.samples.maps.fragmentmanagement.MainActivity.java
com.arcgis.android.samples.maps.fragmentmanagement.MapFragment.java
com.arcgis.android.samples.maps.helloworld.MainActivity.java
com.arcgis.android.samples.maps.maplegend.LegendDialogFragment.java
com.arcgis.android.samples.maps.maplegend.MainActivity.java
com.arcgis.android.samples.maps.maprotation.Compass.java
com.arcgis.android.samples.maps.maprotation.MainActivity.java
com.arcgis.android.samples.maps.switchmaps.MainActivity.java
com.arcgis.android.samples.maps.switchmaps.MapFragment.java
com.arcgis.android.samples.milsym2525c.MainActivity.java
com.arcgis.android.samples.milsym2525c.Mil2525cMessageParser.java
com.arcgis.android.samples.oauth2sample.MapFragment.java
com.arcgis.android.samples.oauth2sample.OAuth2Sample.java
com.arcgis.android.samples.oauth2sample.UserContentActivity.java
com.arcgis.android.samples.oauth2sample.UserContentArrayAdapter.java
com.arcgis.android.samples.oauth2sample.UserContentFragment.java
com.arcgis.android.samples.oauth2sample.UserWebmaps.java
com.arcgis.android.samples.search.placesearch.MainActivity.java
com.esri.android.sample.closestfacilities.MainActivity.java
com.esri.android.samples.mbtiles.LocalMBTiles.java
com.esri.android.samples.mbtiles.MBTilesLayer.java
com.esri.android.samples.mgrsgrid.LocateMGRSActivity.java
com.esri.arcgis.android.sample.runtimegeodb.CreateRuntimeGeodatabaseActivity.java
com.esri.arcgis.android.sample.simplemap.SimpleMapActivity.java
com.esri.arcgis.android.sample.simplemap.SimpleMapFragment.java
com.esri.arcgis.android.sample.simplemap.SingleFragmentActivity.java
com.esri.arcgis.android.samples.GeoJSONEarthquakeMap.GeoJSONEarthquakeMapActivity.java
com.esri.arcgis.android.samples.PopupUICustomization.LayerQueryTask.java
com.esri.arcgis.android.samples.PopupUICustomization.MyAttachmentsView.java
com.esri.arcgis.android.samples.PopupUICustomization.MyEditAttributesAdapter.java
com.esri.arcgis.android.samples.PopupUICustomization.MyMediaAdapter.java
com.esri.arcgis.android.samples.PopupUICustomization.MyMediaView.java
com.esri.arcgis.android.samples.PopupUICustomization.MyReadOnlyAttributesAdapter.java
com.esri.arcgis.android.samples.PopupUICustomization.MyTitleView.java
com.esri.arcgis.android.samples.PopupUICustomization.PopupFragment.java
com.esri.arcgis.android.samples.PopupUICustomization.PopupUICustomizationActivity.java
com.esri.arcgis.android.samples.addcsv2graphic.AddCSVActivity.java
com.esri.arcgis.android.samples.attributeeditor.AttributeEditorActivity.java
com.esri.arcgis.android.samples.attributeeditor.AttributeItem.java
com.esri.arcgis.android.samples.attributeeditor.AttributeListAdapter.java
com.esri.arcgis.android.samples.attributeeditor.FeatureLayerUtils.java
com.esri.arcgis.android.samples.basiclicense.MainActivity.java
com.esri.arcgis.android.samples.basiclicense.MessageDialogFragment.java
com.esri.arcgis.android.samples.classbreaksrenderer.ClassBreaksRendererActivity.java
com.esri.arcgis.android.samples.featuredusergroup.FeaturedGroupsActivity.java
com.esri.arcgis.android.samples.featuredusergroup.GroupsFragment.java
com.esri.arcgis.android.samples.featuredusergroup.ItemsFragment.java
com.esri.arcgis.android.samples.featuredusergroup.MapActivity.java
com.esri.arcgis.android.samples.geometryeditor.ConfirmDiscardDialogFragment.java
com.esri.arcgis.android.samples.geometryeditor.EditFailedDialogFragment.java
com.esri.arcgis.android.samples.geometryeditor.FeatureTypeData.java
com.esri.arcgis.android.samples.geometryeditor.FeatureTypeDialogFragment.java
com.esri.arcgis.android.samples.geometryeditor.GeometryEditorActivity.java
com.esri.arcgis.android.samples.identifytask.Identify.java
com.esri.arcgis.android.samples.measure.MainActivity.java
com.esri.arcgis.android.samples.nearby.Nearby.java
com.esri.arcgis.android.samples.offlineeditor.GDBUtil.java
com.esri.arcgis.android.samples.offlineeditor.OfflineActions.java
com.esri.arcgis.android.samples.offlineeditor.OfflineEditorActivity.java
com.esri.arcgis.android.samples.offlineeditor.TemplatePicker.java
com.esri.arcgis.android.samples.offlineroutingandgeocoding.RoutingAndGeocoding.java
com.esri.arcgis.android.samples.popupinwebmapforediting.PopupInWebmapForEditing.java
com.esri.arcgis.android.samples.popupinwebmapforviewing.PopupInWebmapForViewing.java
com.esri.arcgis.android.samples.querytask.MainActivity.java
com.esri.arcgis.android.samples.routing.MyAdapter.java
com.esri.arcgis.android.samples.routing.RoutingDialogFragment.java
com.esri.arcgis.android.samples.routing.RoutingListFragment.java
com.esri.arcgis.android.samples.routing.RoutingSample.java
com.esri.arcgis.android.samples.servicearea.EditFragment.java
com.esri.arcgis.android.samples.servicearea.ServiceAreaSample.java
com.esri.arcgis.android.samples.standardlicense.MainActivity.java
com.esri.arcgis.android.samples.standardlicense.MessageDialogFragment.java
com.esri.arcgis.android.samples.standardlicenseoffline.MainActivity.java
com.esri.arcgis.android.samples.standardlicenseoffline.MessageDialogFragment.java
com.esri.arcgis.android.samples.uniquevaluerenderer.UniqueValueRendererSampleActivity.java
com.esri.arcgis.android.samples.viewshed.Viewshed.java
com.esri.arcgis.android.samples.wmslayer.MainActivity.java
com.esri.arcgis.samples.offlineanalysis.MainActivity.java