I'm trying to write reverse geocoding. And i copied code given here… Here is my code sample..
public class MagProActivity extends Activity {
private MapView mMapView;
private GraphicsLayer locationLayer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
mMapView = (MapView) findViewById(R.id.map);
mMapView.addLayer(new ArcGISDynamicMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));
mMapView.setOnLongPressListener(new OnLongPressListener() {
private static final long serialVersionUID = 1L;
@Override
public void onLongPress(float x, float y) {
Point mapPoint = mMapView.toMapPoint(x, y);
new ReverseGeocoding(MagProActivity.this, mMapView).execute(mapPoint);
}
});
}
}
ReverseGeocoding class
import java.util.Map;
import android.app.Activity;
import android.os.AsyncTask;
import android.widget.Toast;
import com.esri.android.map.MapView;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.tasks.ags.geocode.Locator;
import com.esri.core.tasks.ags.geocode.LocatorReverseGeocodeResult;
public class ReverseGeocoding extends AsyncTask<Point, Void, LocatorReverseGeocodeResult>{
private Activity curActivity;
private MapView mapView;
public ReverseGeocoding(Activity _curActivity, MapView _mapView){
this.curActivity = _curActivity;
this.mapView = _mapView;
}
@Override
protected LocatorReverseGeocodeResult doInBackground(Point... params) {
// create results object and set to null
LocatorReverseGeocodeResult result = null;
// set the geocode service
Locator locator = new Locator();
try {
// Attempt to reverse geocode the point.
// Our input and output spatial reference will be the same as the map.
SpatialReference mapRef = mapView.getSpatialReference();
result = locator.reverseGeocode(params[0], 50.0, mapRef, mapRef);
} catch (Exception e) {
e.printStackTrace();
}
// return the resulting point(s)
return result;
}
protected void onPostExecute(LocatorReverseGeocodeResult result) {
String resultAddress = "";
// Construct a nicely formatted address from the results
StringBuilder address = new StringBuilder();
if (result != null && result.getAddressFields() != null) {
Map addressFields = result.getAddressFields();
address.append(String.format("%s\n%s, %s %s",
addressFields.get("Street"), addressFields.get("City"),
addressFields.get("State"), addressFields.get("ZIP")));
// Show the results of the reverse geocoding in a toast.
resultAddress = address.toString();
Toast.makeText(curActivity, resultAddress, Toast.LENGTH_LONG).show();
}
}
}
When i long click on mapview this error will come com.esri.core.io.EsriServiceException: Cannot perform query. Invalid query parameters and toast will show all parameters null except city.. I think i'm doing some mess with Tiled service on Dynamic service.. Please help what i did wrong..
Thanks in Advance
Best Answer
The issue is in the return from the
LocatorReverseGeocodeResult
. Make the following edit to theaddress
string:More information about what is returned from request can be found here. I will update the post you referenced.