百度地图
<com.baidu.mapapi.map.MapView
android:id="@+id/XXX"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
></com.baidu.mapapi.map.MapView>
* 基本地图
public class MapActivity_basic extends Activity {
private MapView mapview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_mapbase);
mapview = (MapView) findViewById(R.id.mapview);
}
//将mapview的生命周期跟acitivity的生命周期相绑定。
@Override
protected void onResume() {
super.onResume();
mapview.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapview.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapview.onDestroy();
}
}
*3D地图
public class MapActivity_base_3D extends Activity {
private MapView mapview_3d;
private BaiduMap mBaiduMap;
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_mapbase_3d);
mapview_3d = (MapView) findViewById(R.id.mapview_base_3d);
mBaiduMap = mapview_3d.getMap();
radioGroup = (RadioGroup) findViewById(R.id.rg_map);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId==R.id.rb_base){
//设置普通地图。
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
}else if(checkedId==R.id.rb_satellife){
//卫星地图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
}else{
//开启实时交通
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
mBaiduMap.setTrafficEnabled(true);
}
}
});
}
@Override
protected void onResume() {
super.onResume();
mapview_3d.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapview_3d.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapview_3d.onDestroy();
}
}
*覆盖物
public class MapActivity_overlay extends Activity {
//113.347003,23.182418
private MapView mapview_overlay;
private BaiduMap baiduMap_overlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_overlay);
mapview_overlay = (MapView) findViewById(R.id.mapview_overlay);
baiduMap_overlay = mapview_overlay.getMap();
//坐标
LatLng latLing = new LatLng(23.182418,113.347003);
//图片。
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka);
OverlayOptions overlayOptions = new MarkerOptions().position(latLing).icon(bitmap);
//添加覆盖层。--需要坐标位置和图片。
baiduMap_overlay.addOverlay(overlayOptions);
// LatLng statusLatting = new LatLng();
//设置地图的中心位置。
//坐标,缩放,缩放的值范围为3-20的浮点数。
MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLing,17);
baiduMap_overlay.setMapStatus(mapstatusUpdate);
}
@Override
protected void onResume() {
super.onResume();
mapview_overlay.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapview_overlay.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapview_overlay.onDestroy();
}
}
*定位
public class Activity_location extends Activity implements BDLocationListener{
private MapView mapview_location;
private BaiduMap baiduMap;
private LocationClient locationClient;
private boolean isFirst = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_location);
mapview_location = (MapView) findViewById(R.id.mapview_location);
baiduMap = mapview_location.getMap();
baiduMap.setMyLocationEnabled(true);//开启定位图层
//创建定位客户端。
locationClient = new LocationClient(this);
initLocation();
locationClient.registerLocationListener(this);
locationClient.start();//开始定位。
}
//配置定位的参数
private void initLocation() {
//设置定位功能可用
baiduMap.setMyLocationEnabled(true);
// 1、设置定位参数
LocationClientOption option = new LocationClientOption();
//3、option一系列设置
//3.1设置坐标系
option.setCoorType("bd09ll");
// 3.2设置定位模式
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
// 3.3设置开启Gps
option.setOpenGps(true);
// 3.4设置扫描频率
option.setScanSpan(3 * 1000);
// 3.5设置是否接受地址信息
option.setIsNeedAddress(true);
// 3.6设置是否需要设备方向
option.setNeedDeviceDirect(true);//返回定位结果包含手机机头方向
//2、使用定位参数
locationClient.setLocOption(option);
}
@Override
protected void onResume() {
super.onResume();
mapview_location.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapview_location.onPause();
}
@Override
protected void onDestroy() {
baiduMap.setMyLocationEnabled(false);
mapview_location.onDestroy();
mapview_location = null;
locationClient.stop();
super.onDestroy();
}
@Override
public void onReceiveLocation(BDLocation bdLocation) {
System.out.println( "收到定位数据"+bdLocation.getAddrStr()+" long = "+bdLocation.getLongitude());
// 1、构造定位数据
MyLocationData data = new MyLocationData.Builder()
.direction(bdLocation.getDirection())//获取方向
.latitude(bdLocation.getLatitude())//纬度
.longitude(bdLocation.getLongitude())//经度
.accuracy(bdLocation.getRadius())//定位精度
.build();
// 2、设置定位数据
baiduMap.setMyLocationData(data);
// 3、更新地图中心点
// 定位的坐标点
LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
// 地图状态更新类
MapStatusUpdate mapSatusUpadate = MapStatusUpdateFactory.newLatLng(ll);
// 更新地图状态
baiduMap.animateMapStatus(mapSatusUpadate);
}
}
*搜索
public class Activity_POI extends Activity implements OnGetPoiSearchResultListener {
private MapView mapview_poi;
private BaiduMap baiduMap_poi;
private PoiSearch poiSearch;
private EditText edt_city, edt_key;
private List<PoiInfo> list_city;
private int totalNum_city;
private int pageNum = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_poi);
initView();
mapview_poi = (MapView) findViewById(R.id.mapview_poi);
baiduMap_poi = mapview_poi.getMap();
//创建对象
poiSearch = PoiSearch.newInstance();
//设置监听器
poiSearch.setOnGetPoiSearchResultListener(this);
/*
LatLng latLing = new LatLng(23.182418, 113.347003);
MapStatusUpdate mapstatus = MapStatusUpdateFactory.newLatLngZoom(latLing, 15);
baiduMap_poi.setMapStatus(mapstatus);*/
}
private void initView() {
edt_city = (EditText) findViewById(R.id.edt_city);
edt_key = (EditText) findViewById(R.id.edt_key);
}
@Override
protected void onResume() {
super.onResume();
mapview_poi.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapview_poi.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapview_poi.onDestroy();
poiSearch.destroy();
}
//得到检索的结果
@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {
//清除地图的覆盖物
baiduMap_poi.clear();
//创建。
// PoiInfo poiInfo = poiResult.getAllPoi().get(0);
list_city = poiResult.getAllPoi();
totalNum_city = poiResult.getTotalPageNum();
MyPoiOverLay poiOverLay = new MyPoiOverLay(baiduMap_poi);
baiduMap_poi.setOnMarkerClickListener(poiOverLay);
poiOverLay.setData(poiResult);
poiOverLay.addToMap();//添加到map上。
poiOverLay.zoomToSpan();//缩放
/*
for (PoiInfo poi : list_city) {
LatLng latlng = poi.location;
System.out.println(poi.address + ":" + poi.name);
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka);
OverlayOptions options = new MarkerOptions().icon(bitmap).position(latlng);
baiduMap_poi.addOverlay(options);
}*/
}
if (poiResult == null
|| poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
System.out.println(poiResult.error.toString());
Toast.makeText(Activity_POI.this, "未找到结果", Toast.LENGTH_LONG)
.show();
return;
}
}
//检索结果的详情页
@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
if (poiDetailResult != null) {
Toast.makeText(this, poiDetailResult.getAddress() + ":" + poiDetailResult.getName(), Toast.LENGTH_SHORT).show();
}
}
//按钮的点击事件。
public void click(View view) {
String city = edt_city.getText().toString();//获得城市
String key = edt_key.getText().toString();//获得关键字。
switch (view.getId()) {
case R.id.btn_search_city:
searchInCitys(city, key, 0);
break;
case R.id.btn_bound:
break;
case R.id.btn_nearby:
break;
case R.id.btn_next:
pageNum++;
if (pageNum > totalNum_city) {
pageNum = 0;
}
//搜索
searchInCitys(city, key, pageNum);
break;
}
}
//城市内搜索的方法。以方便调用。
public void searchInCitys(String city, String key, int pageNum) {
//先创建
PoiCitySearchOption options = new PoiCitySearchOption();
//设置属性。
options.city(city);
options.keyword(key);
options.pageNum(pageNum);
poiSearch.searchInCity(options);
}
//周边搜索
public void searchInNearBy(String key) {
PoiNearbySearchOption options = new PoiNearbySearchOption();
options.keyword(key);//设置关键字
// options.location();//设置中心坐标
// options.radius();//设置半径
poiSearch.searchNearby(options);
}
public void searchInBound(String key){
PoiBoundSearchOption options = null;
options = new PoiBoundSearchOption();
options.keyword(key);
LatLngBounds.Builder builder = null;
builder = new LatLngBounds.Builder();
// builder.include(new LatLng());
// builder.include(new LatLng());
LatLngBounds bounds = builder.build();
options.bound(bounds);
poiSearch.searchInBound(options);
}
class MyPoiOverLay extends PoiOverlay {
/**
* 构造函数
*
* @param baiduMap 该 PoiOverlay 引用的 BaiduMap 对象
*/
public MyPoiOverLay(BaiduMap baiduMap) {
super(baiduMap);
}
//点击某个热点的时候毁掉
@Override
public boolean onPoiClick(int i) {
PoiInfo poiInfo = list_city.get(i);
poiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(poiInfo.uid));
return true;
}
}
}
*MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view){
switch (view.getId()){
case R.id.btn_basicMap:
Intent intent_basic = new Intent(this,MapActivity_basic.class);
startActivity(intent_basic);
break;
case R.id.btn_basic_3d:
Intent intent_basic_3d = new Intent(this,MapActivity_base_3D.class);
startActivity(intent_basic_3d);
break;
case R.id.btn_basic_overlay:
Intent intent_overlay = new Intent(this,MapActivity_overlay.class);
startActivity(intent_overlay);
break;
case R.id.btn_basic_location:
Intent intent_location = new Intent(this,Activity_location.class);
startActivity(intent_location);
break;
case R.id.btn_basic_poi:
Intent intent_poi = new Intent(this,Activity_POI.class);
startActivity(intent_poi);
break;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现