1. 程式人生 > >arcgis for android空間查詢 點選某點,選中該點所在區域,高亮顯示

arcgis for android空間查詢 點選某點,選中該點所在區域,高亮顯示

修改mail.xml

 <com.esri.android.map.MapView
        android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        url="http://www.arcgis.com/home/webmap/viewer.html?webmap=fab9925c7c974a0aa47ea0f463535367" >
    </com.esri.android.map.MapView>

修改MainActivity.java

package com.example.maptest7;

import android.app.Activity;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;

import com.esri.android.map.GraphicsLayer;
import com.esri.android.map.MapView;
import com.esri.android.map.event.OnLongPressListener
; import com.esri.android.map.event.OnStatusChangedListener; import com.esri.core.geometry.Point; import com.esri.core.geometry.SpatialReference; import com.esri.core.map.Feature; import com.esri.core.map.FeatureResult; import com.esri.core.map.Graphic; import com.esri.core.renderer.SimpleRenderer; import com
.esri.core.symbol.SimpleFillSymbol; import com.esri.core.tasks.query.QueryParameters; import com.esri.core.tasks.query.QueryTask; public class MainActivity extends Activity { MapView mMapView; GraphicsLayer graphicsLayer; Graphic fillGraphic; String queryLayer; boolean boolQuery = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.map); //指定查詢的服務圖層 queryLayer = "http://services.arcgisonline.com/ArcGIS/rest/services/Demographics/USA_Average_Household_Size/MapServer/3"; mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { private static final long serialVersionUID = 1L; @Override public void onStatusChanged(Object source, STATUS status) { // TODO Auto-generated method stub if (source == mMapView && status == STATUS.INITIALIZED) { graphicsLayer = new GraphicsLayer(); //設定高亮顯示的顏色 SimpleRenderer sr = new SimpleRenderer( new SimpleFillSymbol(Color.RED)); graphicsLayer.setRenderer(sr); mMapView.addLayer(graphicsLayer); } } }); mMapView.setOnLongPressListener(new OnLongPressListener() { private static final long serialVersionUID = 1L; @Override public boolean onLongPress(float x, float y) { // TODO Auto-generated method stub AsyncQueryTask ayncQuery = new AsyncQueryTask(); ayncQuery.execute(x,y); return true; } }); } private class AsyncQueryTask extends AsyncTask<Float, Void, FeatureResult> { @Override protected FeatureResult doInBackground(Float... queryArray) { // TODO Auto-generated method stub if (queryArray == null || queryArray.length <= 1) return null; float x=queryArray[0]; float y=queryArray[1]; Point point=mMapView.toMapPoint(x,y); QueryParameters qParameters = new QueryParameters(); //建立查詢引數物件 SpatialReference sr = SpatialReference.create(102100);//設定空間參考座標系 qParameters.setGeometry(point);//設定識別位置 qParameters.setOutSpatialReference(sr);//設定輸出座標系 qParameters.setReturnGeometry(true);//指定是否返回幾何物件 QueryTask qTask = new QueryTask(queryLayer); try { FeatureResult results = qTask.execute(qParameters);//執行識別任務 return results; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(FeatureResult results) { if (results != null) { for (Object element : results) { if (element instanceof Feature) { Feature feature = (Feature) element; // turn feature into graphic Graphic graphic = new Graphic(feature.getGeometry(), feature.getSymbol(), feature.getAttributes()); // add graphic to layer graphicsLayer.removeAll(); graphicsLayer.addGraphic(graphic); } } } } } @Override protected void onPause() { super.onPause(); mMapView.pause(); } @Override protected void onResume() { super.onResume(); mMapView.unpause(); } }