百度api集成(留作参考)


主要是百度定位以及附近建筑列表


import java.util.ArrayList;
import java.util.List;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult.AddressComponent;
import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;
import com.baidu.mapapi.search.sug.SuggestionResult;
import com.baidu.mapapi.search.sug.SuggestionSearch;
import com.baidu.mapapi.search.sug.SuggestionSearchOption;
import com.baidu.mapapi.search.sug.SuggestionResult.SuggestionInfo;


/**
 * 
 * 地理位置设置类
 *
 */
public class LocationSet implements OnGetGeoCoderResultListener, OnGetSuggestionResultListener{
private static final int TYPE_LOAD_NEARBY = 0;
private Context context;
private LocationClient locationClient;
private SearchLocationListener locationListener;
private LoadNearbyPositionListener loadNearbyPositionListener;
private LoadSuggestionSearchListener loadSuggestionSearchListener;
private GetCrtLatlngListener getCrtLatlngListener;
private GeoCoder geoCoder;
private SuggestionSearch suggestionSearch;

public static LocationSet getInstance(Context context){
return new LocationSet(context);
}

private LocationSet(Context context){
this.context = context;
initLocation();
}

private LocationSet(){

}

private void locate(int type){
if(locationClient != null){
locationListener = new SearchLocationListener(type);
locationClient.registerLocationListener(locationListener);
locationClient.start();
}
}

/**
* init location
*/
private void initLocation(){
locationClient = new LocationClient(context);
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式 
option.setCoorType("bd0911");//返回的定位结果是百度经纬度,默认值gcj02
option.setIsNeedAddress(true);
locationClient.setLocOption(option); 
}

/**
* init suggest search
*/
private void initSuggestSearch(){
suggestionSearch = SuggestionSearch.newInstance();
suggestionSearch.setOnGetSuggestionResultListener(this);
}

/**
* search location listener
*
*/
private class SearchLocationListener implements BDLocationListener{
private int type = -1;
public SearchLocationListener(int type){
this.type = type;
}


@Override
public void onReceiveLocation(BDLocation location) {
if (location != null) {
/**更新本地经纬度*/
MyApplication.getInstance().setLon(location.getLongitude());
MyApplication.getInstance().setLat(location.getLatitude());
DeviceInfo.saveLocationLat(String.valueOf(location.getLatitude()),context);
DeviceInfo.saveLocationLon(String.valueOf(location.getLongitude()),context);


//更新城市信息
String cityName = location.getCity(); 
String provinceName = location.getProvince();
String addr = location.getAddrStr(); 



switch (type) {
case TYPE_LOAD_NEARBY://获取附近位置
if(geoCoder != null){
if(cityName == null || addr == null){//定位失败
//更新搜索状态
if(loadNearbyPositionListener != null){
loadNearbyPositionListener.loadNearBy(null);
}
}
else {
geoCoder.geocode(new GeoCodeOption().city(cityName).address(addr));
SharedPreferencesKeeper.writeInfomation(context, -3, cityName);
SharedPreferencesKeeper.writeInfomation(context, -5, provinceName);
}
}
else {
//更新搜索状态
if(loadNearbyPositionListener != null){
loadNearbyPositionListener.loadNearBy(null);
}
}
break;


default:
break;
}
}
else {
//更新搜索状态
if(loadNearbyPositionListener != null){
loadNearbyPositionListener.loadNearBy(null);
}
}
}

}

/**
* 获取附近位置
*/
public void loadNearByPosition(LoadNearbyPositionListener listener){
loadNearbyPositionListener = listener;
geoCoder = GeoCoder.newInstance();
geoCoder.setOnGetGeoCodeResultListener(this);
//定位当前位置
locate(TYPE_LOAD_NEARBY);
}


/**
* 获取suggestion search
* @param key: 搜索关键字
*/
public void loadSuggestionSearch(String key, LoadSuggestionSearchListener listener){
loadSuggestionSearchListener = listener;

if(suggestionSearch == null){
initSuggestSearch();
}

SuggestionSearchOption searchOption = new SuggestionSearchOption();
searchOption.city(SharedPreferencesKeeper.readInfomation(context, -3));
searchOption.keyword(key);
suggestionSearch.requestSuggestion(searchOption);
}

/**
* 获取经纬度信息
*/
public void getCrtLatLng(String city, String name, GetCrtLatlngListener listener){
getCrtLatlngListener = listener;
geoCoder = GeoCoder.newInstance(); 
geoCoder.setOnGetGeoCodeResultListener(this);
geoCoder.geocode(new GeoCodeOption().city(city).address(name));
}

/**

* 返回位置信息
*/
@Override
public void onGetGeoCodeResult(GeoCodeResult result) {
if(result == null || result.error != SearchResult.ERRORNO.NO_ERROR){
Toast.makeText(context, "没有搜索到相关位置信息", Toast.LENGTH_SHORT).show();
//更新搜索状态
if(loadNearbyPositionListener != null){
loadNearbyPositionListener.loadNearBy(null);
}

if(getCrtLatlngListener != null){
getCrtLatlngListener.getCrtLatlng(null);
}

return;
}

LatLng latLng = result.getLocation();

//获取位置信息
if(loadNearbyPositionListener != null){
if(geoCoder != null){ 
geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng));

}
else {
loadNearbyPositionListener.loadNearBy(null);
}
}

//返回经纬度
if(getCrtLatlngListener != null){
getCrtLatlngListener.getCrtLatlng(latLng);
}

}


@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
if(result == null || result.error != SearchResult.ERRORNO.NO_ERROR){
Toast.makeText(context, "没有搜索到相关位置信息", Toast.LENGTH_SHORT).show();
//更新搜索状态
if(loadNearbyPositionListener != null){
loadNearbyPositionListener.loadNearBy(null);
}
return;
}

AddressComponent addrDetail = result.getAddressDetail();
String cityName = addrDetail.city;
List<PoiInfo> poiInfos = result.getPoiList();
List<LocalBean> list = new ArrayList<LocalBean>();

if(poiInfos != null){
LocalBean addrBean = null;
PoiInfo poiInfo = null;
int size = poiInfos.size();
for(int i = 0; i < size; i++){
poiInfo = poiInfos.get(i);
addrBean = new LocalBean();
addrBean.setName(cityName + "-" + poiInfo.name);
addrBean.setAddr(poiInfo.address);
addrBean.setLatitude(poiInfo.location.latitude);
addrBean.setLongitude(poiInfo.location.longitude);
list.add(addrBean);
}
}

if(loadNearbyPositionListener != null){
loadNearbyPositionListener.loadNearBy(list);
}
else {
LogUtil.e("","--loadNearbyPositionListener is null--");
}
}

/**
* onDestroy
*/
public void onDestroy(){
try {
if(locationClient != null){
locationClient.stop();
locationClient.unRegisterLocationListener(locationListener);
locationClient = null;
}

if(geoCoder != null){
geoCoder.destroy(); 
geoCoder = null;
}

if(suggestionSearch != null){
suggestionSearch.destroy();
suggestionSearch = null;
}

loadNearbyPositionListener = null;
loadSuggestionSearchListener = null;
getCrtLatlngListener = null;

} catch (Exception e) {
e.printStackTrace();
}
}


@Override
public void onGetSuggestionResult(SuggestionResult result) {
if(result == null){
if(loadSuggestionSearchListener != null){
loadSuggestionSearchListener.loadSuggestion(null);
}

LogUtil.e("","--load--no--suggestion--");
return;
}

List<SuggestionInfo> list = result.getAllSuggestions();
List<LocalBean> addrs = new ArrayList<LocalBean>();
if(list != null){
int size = list.size();
LocalBean addrBean = null;
double latitude = MyApplication.getInstance().getLat();
double longitude = MyApplication.getInstance().getLon();
for(int i = 0; i < size; i++){
addrBean = new LocalBean();
addrBean.setName(list.get(i).key);
addrBean.setLatitude(latitude);
addrBean.setLongitude(longitude);
addrs.add(addrBean);
}
}

if(loadSuggestionSearchListener != null){
loadSuggestionSearchListener.loadSuggestion(addrs);
}
else {
LogUtil.e("","--loadSuggestionSearchListener is null--");
}
}

}

涉及到的listener

import com.baidu.mapapi.model.LatLng;


public interface GetCrtLatlngListener {
public void getCrtLatlng(LatLng latLng);
}

/**
 * 
 * 获取当前所在位置信息listener
 *
 */
public interface LoadNearbyPositionListener {
public void loadNearBy(List<LocalBean> addrs);
}

/**
 * 
 * 获取suggestion search listener
 *
 */
public interface LoadSuggestionSearchListener {
public void loadSuggestion(List<LocalBean> addrs);
}

bean文件

public class LocalBean implements Serializable{
private static final long serialVersionUID = 1L;
private String name = "";     //地址
private String addr = "";   //详细地址
private double longitude;//地址经度
private double latitude; //地址纬度

private boolean isSelected = false;

public String getAddr() {
return addr;
}

public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public void setAddr(String addr) {
this.addr = addr;
}

public double getLongitude() {
return longitude;
}


public void setLongitude(double longitude) {
this.longitude = longitude;
}


public double getLatitude() {
return latitude;
}


public void setLatitude(double latitude) {
this.latitude = latitude;
}


public boolean isSelected() {
return isSelected;
}


public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
}

}

使用百度定位当前位置时

private LocationSet locationSet;//位置设定
private List<LocalBean> addrList;
private LocalBean bbsAddr;

private void initLocate() {
// TODO Auto-generated method stub
locationSet = LocationSet.getInstance(this); 
locationSet.loadNearByPosition(this);
}

@Override
public void loadNearBy(List<LocalBean> addrs) {
// TODO Auto-generated method stub



//定位到信息
if(addrs != null && addrs.size() > 0){
addrList = addrs;
bbsAddrPos = 1;
city_view.setText(addrs.get(0).getName());
}
else {
bbsAddrPos = 0;
showToastMsg("没有获取到位置信息");
city_view.setOnClickListener(this);
city_view.setText("所在位置");
}
}

@Override
protected void onDestroy() {
super.onDestroy();

if(locationSet != null){
locationSet.onDestroy();
locationSet = null;
}

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值