高德地图精确查找与定位RegeocodeQuery与GeocodeQuery
根据输入的字符串精确查找位置,用GeocodeQuery查找坐标,然后根据获取到的坐标,用RegeocodeQuery查询地址。例子中用了两个页面,一个是显示地址信息及定位的页面,另一个是搜索页面,点击搜索结果返回显示页面,显示信息并定位:
显示并定位的页面:
2. 搜索页面:public class SearchSaleActivity extends AppCompatActivity { private static final String TAG = "SearchSaleActivity"; @BindView(R.id.salesearch_edit) TextField salesearchEdit; @BindView(R.id.tv_saleCancel) TextView tvSaleCancel; @BindView(R.id.lvResult) ListView lvResult; GeocodeSearch geocodeSearch; Context mContext; SearchMapAdapter adapter; List<GeocodeAddress> addrList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search_sale); ButterKnife.bind(this); mContext = SearchSaleActivity.this; addrList = new ArrayList<GeocodeAddress>(); //构造 GeocodeSearch 对象,并设置监听。 geocodeSearch = new GeocodeSearch(mContext); geocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { @Override public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) { } @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { //地理编码;根据地址获取坐标 if(i == 1000){ LogUtil.d(TAG,"success"); if(geocodeResult != null && geocodeResult.getGeocodeAddressList() != null && geocodeResult.getGeocodeAddressList().size() != 0){ LogUtil.d(TAG,""+geocodeResult.getGeocodeQuery().getLocationName()); addrList = geocodeResult.getGeocodeAddressList(); adapter = new SearchMapAdapter(mContext,addrList); lvResult.setAdapter(adapter); } } } }); salesearchEdit.addTextChangedListener(new MyTextChangeListener()); lvResult.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(mContext,SaleMapActivity.class); Bundle bundle = new Bundle(); bundle.putParcelable("addr",addrList.get(position)); intent.putExtra("searAddr",bundle); setResult(RESULT_OK,intent); finish(); } }); } //文本框的改变监听 class MyTextChangeListener implements TextWatcher{ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String newText = s.toString().trim(); if(newText != null && !newText.equals("")){ //通过 GeocodeQuery(java.lang.String locationName, java.lang.String city) 设置查询参数 //name表示地址,第二个参数表示查询城市,中文或者中文全拼,citycode、adcode GeocodeQuery query = new GeocodeQuery(newText,"0532"); //调用 GeocodeSearch 的 getFromLocationNameAsyn(GeocodeQuery geocodeQuery) 方法发起请求。 //通过回调接口 onGeocodeSearched 解析返回的结果 geocodeSearch.getFromLocationNameAsyn(query); } } @Override public void afterTextChanged(Editable s) { } } @OnClick(R.id.tv_saleCancel) public void onClick() { } }