高德地图精确查找与定位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() {
}
}
