arcgis for android空間查詢 點選某點,選中該點所在區域,高亮顯示
阿新 • • 發佈:2019-02-03
修改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();
}
}