一、定位
1.下载百度百度地图APIdemo官网上下
2.下好的DEMO里找到Libs这个目录将里面的内容拷贝到自己的工程目录下,有LIB包也有文件夹,记住这是全部拷贝
3.我们调用百度地图时需要一个KEY值:这个是放在manifest.xml这个文件的application里的
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="0GoSVfnbAooHKmfHmKUrk6ip" />
即这里的value值,这个值到官网上去申请一个就行,官网上有具体步骤;
4.同时在manifest.xml里添加权限:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
5.添加定位服务:这一点很容易忘记!在application里
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
6.定位代码:
baiduMap.setMyLocationEnabled(true);
locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if (location == null || mapView == null)
return;
MyLocationData locationData =new MyLocationData.Builder().accuracy(location.getRadius())
.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();
baiduMap.setMyLocationData(locationData);
if(isfirst) {
isfirst = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animateMapStatus(u);
searchfujing(location.getLatitude(),location.getLongitude());
}
}
});
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setScanSpan(1000);
option.setCoorType("bd09ll"); //
locationClient.setLocOption(option);
locationClient.start();
二、附近搜索:
1.声明: PoiSearch poiSearch;
2.实例化+注册事件:
poiSearch = PoiSearch.newInstance();
poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult result) {
if(result==null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
Toast.makeText(LocationDingwei.this, "未找到结果", Toast.LENGTH_LONG)
.show();
return;
} else if(result.error == SearchResult.ERRORNO.NO_ERROR) {
baiduMap.clear();
PoiOverlay overlay = new MyPoiOverlay(baiduMap);
baiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
overlay.addToMap();
overlay.zoomToSpan();
return;
}
}
@Override
public void onGetPoiDetailResult(PoiDetailResult result) {
if (result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(LocationDingwei.this, "抱歉,未找到结果", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(LocationDingwei.this, result.getName() + ": " + result.getAddress(), Toast.LENGTH_SHORT)
.show();
}
}
});
3实现调用:
public void searchfujing(double latitude,double longtitude) {
//附近搜索
PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption();
nearbySearchOption.location(new LatLng(latitude, longtitude));
nearbySearchOption.keyword("电影院");
nearbySearchOption.radius(5000);// 检索半径,单位是米
nearbySearchOption.pageNum(0);
poiSearch.searchNearby(nearbySearchOption);// 发起附近检索请求
}