正在做的项目用到了地图标记城市的功能,用了百度地图的sdk来实现,写篇博客把实现过程记录下。
下载sdk,工程配置,申请秘钥等基础步骤,开发人员可根据百度提供的开发指南一步一步操作,见此链接:
需要注意的是申请秘钥时要用到fingerprint和包名,这个fingerprint与keystore有关,多人并行开发要注意保持keystore的一致,如果是对已发布app的更新,那么要与之前已发布
版本使用同一个keystore来申请秘钥。
根据百度提供的文档,开发人员按照左侧“简介”,“申请秘钥”,“Hello BaiduMap”,的步骤操作下来,就会看到了地图显示;
接下来在“基础地图”里面注意到“标注覆盖物”部分可以实现标注功能:
//定义Maker坐标点
LatLng point = new LatLng(39.963175, 116.400244);
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_marka);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);代码中可见标注覆盖物需要的输入信息为经纬度的值,并且需要一个本地的icon_marka资源图片。
那么下面来看如何根据城市名称的字符串来获取经纬度,也就是地址解析:
// 标记北京
final String city = "北京";
// 地理编码请求参数
GeoCodeOption geooption = new GeoCodeOption();
// 设置城市
geooption.city(city);
// 设置地址
geooption.address(city);
// 新建地理编码查询
GeoCoder coder = GeoCoder.newInstance();
// 设置查询结果监听
coder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetGeoCodeResult(GeoCodeResult result) {
// 地理编码查询结果回调函数
if (result != null && result.getLocation() != null) {
Log.i("tag",
"---onGetGeoCodeResult---"
+ result.getLocation().latitude + ", "
+ result.getLocation().longitude);
lat = result.getLocation().latitude;
lon = result.getLocation().longitude;
LatLng point = new LatLng(lat, lon);
// 构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(point)
.icon(bd).title(city);
// 在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
}
}
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
}
});
// 发起地理编码(地址信息->经纬度)请求
coder.geocode(geooption);新建一个地理编码请求参数geooption,设置城市与地址,这里都设置为“北京”,新建地理编码查询对象coder,设置查询结果监听,最后调用geocode()方法来发起地理编码请求,请求成功,在监听中返回包含经纬度信息的GeoCodeResult对象,调用上面所介绍的标注方法将此经纬度的标记点标注到地图上,至此实现了完整的功能需求。
*************
具体实现见示例代码,示例代码中标记了三个城市,并且加入了对标记点的点击事件的处理,下载地址如下:
本文详细记录了使用百度地图SDK实现地图标记城市功能的过程,包括下载SDK、工程配置、申请秘钥、地址解析及标注地图等关键步骤。通过实例代码展示了如何根据城市名称获取经纬度,并将其标记于地图上。
787

被折叠的 条评论
为什么被折叠?



