I thought it was very troublesome, but the result is that Baidu has provided: the interface of geocoding & anti-geocoding.
mSearch.geocode(new GeoCodeOption().city( editCity.getText().toString()).address( editGeoCodeKey.getText().toString()));
mSearch.reverseGeoCode(new ReverseGeoCodeOption() .location(ptCenter));After that, you only need to rewrite onGetGeoCodeResult(GeoCodeResult result) and onGetReverseGeoCodeResult(ReverseGeoCodeResult result) to customize the forward and reverse encoding.
Full code:
package baidumapsdk.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.geocode.GeoCodeOption; import com.baidu.mapapi.search.geocode.GeoCodeResult; import com.baidu.mapapi.search.geocode.GeoCoder; import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; /** * This demo is used to show how to perform geocoding search (retrieve coordinates by address), reverse geocoding search (retrieve address by coordinates) */ public class GeoCoderDemo extends Activity implements OnGetGeoCoderResultListener { GeoCoder mSearch = null; // The search module can also be used independently without the map module BaiduMap mBaiduMap = null; MapView mMapView = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_geocoder); CharSequence titleLable = "Geocoding Capability"; setTitle(titleLable); // map initialization mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); // Initialize the search module and register event listeners mSearch = GeoCoder.newInstance(); mSearch.setOnGetGeoCodeResultListener (this); } /** * initiate a search * * @param v */ public void SearchButtonProcess(View v) { if (v.getId() == R.id.reversegeocode) { EditText lat = (EditText) findViewById(R.id.lat); EditText lon = (EditText) findViewById(R.id.lon); LatLng ptCenter = new LatLng((Float.valueOf(lat.getText() .toString())), (Float.valueOf(lon.getText().toString()))); // reverse geo search mSearch.reverseGeoCode(new ReverseGeoCodeOption() .location(ptCenter)); //@param:LatLng } else if (v.getId() == R.id.geocode) { EditText editCity = (EditText) findViewById(R.id.city); EditText editGeoCodeKey = (EditText) findViewById(R.id.geocodekey); // Geo search mSearch.geocode(new GeoCodeOption().city( editCity.getText().toString()).address( editGeoCodeKey.getText().toString())); //@param: city + address } } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onDestroy() { mMapView.onDestroy (); mSearch.destroy(); super.onDestroy (); } @Override public void onGetGeoCodeResult(GeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(GeoCoderDemo.this, "Sorry, no results found", Toast.LENGTH_LONG) .show(); return; } mBaiduMap.clear(); mBaiduMap.addOverlay(new MarkerOptions().position(result.getLocation()) .icon(BitmapDescriptorFactory .fromResource(R.drawable.icon_marka))); //add cover mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(result .getLocation())); //position String strInfo = String.format("Latitude: %f Longitude: %f", result.getLocation().latitude, result.getLocation().longitude); Toast.makeText(GeoCoderDemo.this, strInfo, Toast.LENGTH_LONG).show(); //result saves the result city of geocoding --> coordinates } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(GeoCoderDemo.this, "Sorry, no results found", Toast.LENGTH_LONG) .show(); return; } mBaiduMap.clear(); mBaiduMap.addOverlay(new MarkerOptions().position(result.getLocation()) .icon(BitmapDescriptorFactory .fromResource(R.drawable.icon_marka))); //add cover mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(result .getLocation())); //position Toast.makeText(GeoCoderDemo.this, result.getAddress(), Toast.LENGTH_LONG).show(); //result saves the resulting coordinates of the geocoding --> city } }