高德地图精确查找与定位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() {
    }
}
经验分享 程序员 微信小程序 职场和发展