百度地图用城市名称切换城市更新地图
来源:互联网 发布:党章党规党纪网络答题 编辑:程序博客网 时间:2024/06/04 18:33
实例代码:
@ContentView(R.layout.activity_main)
public class MainActivity extends Activity {@ViewInject(R.id.bt1)
Button bt1;
@ViewInject(R.id.bt2)
Button bt2;
@ViewInject(R.id.listView)
private ListView listView;
@ViewInject(R.id.mapview)
private MapView mMapView;
private BaiduMap mBaiduMap;
private LatLng cenpt;
private GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
private PoiSearch mPoiSearch;
private LocationClient mLocClient;
MyLocationListener loctLis = new MyLocationListener();
ListAdapter adapter;
private PoiInfo currentInfo;
private AddressComponent addressDetail;
private List<PoiInfo> list;
// 纬度
private Double LATITUDE = 0.0;
// 经度
private Double LONGITUDE = 0.0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initMap();
}
@OnClick(R.id.bt1)
private void onclickBt1() {
search(bt1.getText().toString().trim(), "街道");
}
@OnClick(R.id.bt2)
private void onclickBt2() {
search(bt2.getText().toString().trim(), "街道");
}
private void search(String city, String keyword) {
//第一步可以根据城市名称切换城市地图,必须.keyword()关键词,这里为”街道“
mPoiSearch.searchInCity((new PoiCitySearchOption()).city(city).keyword(keyword).pageNum(0).pageCapacity(30));
//调用完成后,会在getPoisLis 中回调,
}private void initMap() {
mBaiduMap = mMapView.getMap();
LocationClientOption option = new LocationClientOption();
// 设置定位模式
option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
// option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
option.setOpenGps(true);// 打开gps
option.setIsNeedAddress(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(loctLis);
mLocClient.setLocOption(option);
mLocClient.start();
mLocClient.requestLocation();
cenpt = new LatLng(LATITUDE, LONGITUDE);
mBaiduMap.setOnMapLoadedCallback(mapCallBack);
mBaiduMap.setOnMapStatusChangeListener(mapStatueLis);
// 初始化搜索模块,注册事件监听
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(getGeocLis);
// 定义地图状态
MapStatus mMapStatus = new MapStatus.Builder().target(cenpt).zoom(14)
.build();
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
.newMapStatus(mMapStatus);
// 改变地图状态̬
mBaiduMap.setMapStatus(mMapStatusUpdate);
// 初始化搜索模块,注册搜索事件监听
mPoiSearch = PoiSearch.newInstance();
mPoiSearch.setOnGetPoiSearchResultListener(getPoisLis);
adapter = new ListAdapter(this);
listView.setAdapter(adapter);
}
private void updateMapData(List<PoiInfo> allPoi) {
adapter.setList(allPoi);
adapter.notifyDataSetChanged();
}
// 第三步
private void cutCity() {
cenpt = new LatLng(LATITUDE, LONGITUDE);mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(cenpt));
}
OnGetPoiSearchResultListener getPoisLis = new OnGetPoiSearchResultListener() {
@Override
public void onGetPoiResult(PoiResult arg0) {
// TODO Auto-generated method stub
if (arg0 == null
|| arg0.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
Toast.makeText(MainActivity.this, "搜索不到当前地址", Toast.LENGTH_LONG)
.show();
return;
}
List<PoiInfo> allPoi = arg0.getAllPoi();
if (allPoi == null || allPoi.size() < 1) {
Toast.makeText(MainActivity.this, "搜索不到当前地址", Toast.LENGTH_LONG)
.show();
return;
}
list = allPoi;
currentInfo = allPoi.get(0);
// 第二步 获取经纬度后再经过经纬度更新地图
LATITUDE = currentInfo.location.latitude;LONGITUDE = currentInfo.location.longitude;
cutCity();
updateMapData(allPoi);
}
@Override
public void onGetPoiDetailResult(PoiDetailResult arg0) {
// TODO Auto-generated method stub
}
};
OnGetGeoCoderResultListener getGeocLis = new OnGetGeoCoderResultListener() {
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {
// TODO Auto-generated method stub
mBaiduMap.clear();
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(arg0
.getLocation()));
addressDetail = arg0.getAddressDetail();
list = arg0.getPoiList();
currentInfo = null;
if (currentInfo != null) {
if (list != null) {
for (PoiInfo poiInfo : list) {
if (poiInfo.location.latitude == currentInfo.location.latitude
&& poiInfo.location.longitude == currentInfo.location.longitude) {
list.remove(poiInfo);
break;
}
}
list.add(0, currentInfo);
}
}
if (list != null && list.size() > 0) {
currentInfo = list.get(0);
}
updateMapData(list);
}
@Override
public void onGetGeoCodeResult(GeoCodeResult arg0) {
// TODO Auto-generated method stub
}
};
OnMapStatusChangeListener mapStatueLis = new OnMapStatusChangeListener() {
@Override
public void onMapStatusChangeStart(MapStatus arg0) {
// TODO Auto-generated method stub
}
@Override
public void onMapStatusChangeFinish(MapStatus arg0) {
// TODO Auto-generated method stub
LatLng latlng = arg0.target;
LATITUDE = latlng.latitude;
LONGITUDE = latlng.longitude;
cutCity();
}
@Override
public void onMapStatusChange(MapStatus arg0) {
// TODO Auto-generated method stub
}
};
OnMapLoadedCallback mapCallBack = new OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "完成加载", Toast.LENGTH_SHORT)
.show();
}
};
/**
* 实现实位回调监听
*/
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// Receive Location
LATITUDE = location.getLatitude();
LONGITUDE = location.getLongitude();
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(cenpt));
}
public void onReceivePoi(BDLocation arg0) {
// TODO Auto-generated method stub
}
}
}
0 0
- 百度地图用城市名称切换城市更新地图
- 百度地图SDK 网络定位城市名称
- 百度地图城市代码
- 百度地图定位城市
- IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息
- Google地图获取城市名称
- 百度地图api通过城市名称获取map
- 百度地图api获取经纬度和城市名称
- 百度地图 根据经纬度获取城市或省的名称
- 利用百度地图定位城市
- 百度地图-设置默认城市
- 百度地图的城市定位
- 通过百度地图定位城市
- 百度地图定位当前城市
- 微信小程序城市定位(借助百度地图API判断城市)
- 百度地图 定位到当前城市
- 调用百度地图api实现标记城市
- 使用百度地图API进行城市检索
- 美团Android自动化之旅—生成渠道包
- POJ 1084 Square Destroyer
- OBIEE分析开发-并集不同列设置不同数据格式
- 解决8080端口被占,Tomcat无法正常启动
- 关联源码
- 百度地图用城市名称切换城市更新地图
- 【读书笔记】iOS-UIWindow-WindowLevel
- 一个苹果证书怎么多次使用---导出p12文件
- findbug笔记
- 也谈成功
- hdoj-1251-统计难题【map】
- 剑指Offer面试题6(Java版):重建二叉树
- 常用正则和解析
- 基于ZXing的二维码,你可以这样改造它