这里要注意的是:
mCoder.geocode(new GeoCodeOption().city(city).address(address));
必须放在监听后面,否则setOnGetGeoCodeResultListener监听不会回调,至少我遇到的是这样的,不知道其他人的是不是。同理,逆向地理编码也需要放在后面。
private static GeoCoder mCoder;
/**
* 正向地理编码获取坐标
* @param city 城市
* @param address 区县
*/
public static void getGeoCoder(String city,String address){
mCoder = GeoCoder.newInstance();
mCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
if (null != geoCodeResult && null != geoCodeResult.getLocation()) {
if (null == geoCodeResult || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
//没有检索到结果
return;
} else {
double latitude = geoCodeResult.getLocation().latitude;
double longitude = geoCodeResult.getLocation().longitude;
EventBus.getDefault().post(new EventGeoCoder(latitude,longitude));
}
//释放检索实例
mCoder.destroy();
}
}
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
}
});
//必须设置在监听后面,否则监听无法回调。
mCoder.geocode(new GeoCodeOption().city(city).address(address));
}