/**
* @description:
* @author chenshiqiang E-mail:csqwyyx@163.com
* @date 2014年4月27日 下午7:37:06
* @version 1.0
*/
package com.csq.thesceneryalong.utils.location;
import android.annotation.TargetApi;
import android.location.Geocoder;
import android.os.Build;
import android.text.TextUtils;
import com.amap.api.maps.model.LatLng;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.geocoder.GeocodeResult;
import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.GeocodeSearch.OnGeocodeSearchListener;
import com.amap.api.services.geocoder.RegeocodeQuery;
import com.amap.api.services.geocoder.RegeocodeResult;
import com.csq.thesceneryalong.app.App;
import com.csq.thesceneryalong.models.events.EventReverseGeocodingResult;
import de.greenrobot.event.EventBus;
public class ReverseGeocodingUtil {
/**
* @description: 是否支持反向地理编码
* @author: chenshiqiang E-mail:csqwyyx@163.com
*/
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public static boolean isReverseGeocodePresent(){
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD && Geocoder.isPresent();
}
/**
* @description: 开启一个反向地理编码的任务,通过EventReverseGeocodingResult返回结果
* @author: chenshiqiang E-mail:csqwyyx@163.com
* @param loc
*/
public static void reverseGeocode(final LatLng loc, final Object model){
GeocodeSearch geocoderSearch = new GeocodeSearch(App.app);
geocoderSearch.setOnGeocodeSearchListener(new OnGeocodeSearchListener() {
@Override
public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
// TODO Auto-generated method stub
if (rCode == 0) {
if (result != null && result.getRegeocodeAddress() != null
&& result.getRegeocodeAddress().getFormatAddress() != null) {
String address = result.getRegeocodeAddress().getFormatAddress();
if(TextUtils.isEmpty(address)){
EventBus.getDefault().post(
new EventReverseGeocodingResult(loc, null, model));
}else{
EventBus.getDefault().post(
new EventReverseGeocodingResult(loc, address, model));
}
}
}
}
@Override
public void onGeocodeSearched(GeocodeResult arg0, int arg1) {
}
});
// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
RegeocodeQuery query = new RegeocodeQuery(new LatLonPoint(loc.latitude, loc.longitude),
1000,
GeocodeSearch.AMAP);
geocoderSearch.getFromLocationAsyn(query);// 设置同步逆地理编码请求
}
}