我是靠谱客的博主 贤惠花卷,最近开发中收集的这篇文章主要介绍[AS2.3.3]高德地图使用学习记录地图相关Marker相关绘画相关POI相关,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一篇来自自己学习官方文档的文章。

使用的sdk

  1. AMap3DMap_5.7.0
  2. AMapNavi_5.6.0
  3. AMapSearch_5.7.0
  4. AMapLocation_3.7.0

主要内容如下

  • 地图相关
    创建显示地图
    地图属性设置
  • Marker相关
    创建Marker显示在地图上
    Marker操作
  • 绘画相关
    绘制了线和圆
  • poi相关
    关键字搜索
    周边检索
    ID检索
    自动提示
    公交检索

地图相关

创建显示地图

public class MainActivity extends AppCompatActivity {
private MapView mapView;
private AMap aMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.map);
//创建地图
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
mapView.onDestroy();
super.onDestroy();
}
}

地图属性设置

  • 设置地图层级

//设置地图层级 3-19
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
  • 移动地图中心点到经纬度

//设置中心点到26.099794 119.296154
LatLng latLng = new LatLng(26.099794,119.296154);
aMap.moveCamera(CameraUpdateFactory
//CameraPosition参数说明 LatLng var1, float var2, float var3, float var4
//目标位置的屏幕中心点经纬度坐标
//目标可视区域的缩放级别
//目标可视区域的倾斜度,以角度为单位
//可视区域指向的方向,以角度为单位,从正北向逆时针方向计算,从0度到360度
.newCameraPosition(new CameraPosition(latLng,16,45,0)));
  • 地图UI

//地图ui相关
UiSettings uiSettings = aMap.getUiSettings();
//缩放+ -
uiSettings.setZoomControlsEnabled(true);
//定位按钮
uiSettings.setMyLocationButtonEnabled(true);
//指南针
uiSettings.setCompassEnabled(true);
//比例尺
uiSettings.setScaleControlsEnabled(true);
//地图Logo位置
uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);
//手势相关
//双击手势
uiSettings.setZoomGesturesEnabled(true);
//滑动手势
uiSettings.setScaleControlsEnabled(true);
//旋转手势
uiSettings.setRotateGesturesEnabled(false);
//倾斜手势
uiSettings.setTiltGesturesEnabled(false);
  • 地图点击事件

//地图点击
aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
Log.d(TAG, "click: "+latLng.latitude+","+latLng.longitude);
}
});
//地图poi点击
aMap.setOnPOIClickListener(new AMap.OnPOIClickListener() {
@Override
public void onPOIClick(Poi poi) {
//poiId
poi.getPoiId();
//poi名称
poi.getName();
//poi经纬度
poi.getCoordinate();
}
});
  • 地图定位

//定位相关
MyLocationStyle myLocationStyle = new MyLocationStyle();
//连续定位的触发间隔
myLocationStyle.interval(5000)
//定位类型 循环定位
.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
//设置定位蓝点属性
aMap.setMyLocationStyle(myLocationStyle);
//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false
aMap.setMyLocationEnabled(true);

定位蓝点扩展


//定位模式设置
//只定位一次。MyLocationStyle.LOCATION_TYPE_SHOW
//定位一次,且将视角移动到地图中心点。
MyLocationStyle.LOCATION_TYPE_LOCATE
//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
MyLocationStyle.LOCATION_TYPE_FOLLOW
//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
MyLocationStyle.LOCATION_TYPE_MAP_ROTATE
//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE
//以下三种模式从5.1.0版本开始提供
//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER
//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER
//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER
//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
showMyLocation(boolean visible);
//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数。
myLocationIcon(BitmapDescriptor myLocationIcon);
//设置定位蓝点图标的锚点方法。
anchor(float u, float v);
//设置定位蓝点精度圆圈的边框颜色的方法。
strokeColor(int color);
//设置定位蓝点精度圆圈的填充颜色的方法。
radiusFillColor(int color);
//设置定位蓝点精度圈的边框宽度的方法。
strokeWidth(float width);
//从location对象中获取经纬度信息,地址描述信息,建议拿到位置之后调用逆地理编码接口获取
public void onMyLocationChange(android.location.Location location){}

Marker相关

创建Marker显示在地图上


MarkerOptions markerOptions = new MarkerOptions();
LatLng latLng = new LatLng(26.061328,119.291608);
markerOptions.position(latLng)
//经纬度
.title("Title") //标题
.snippet("Snippet") //内容
.visible(true)
//是否显示
.draggable(false)
//是否拖拽
.anchor(0.5f,1.0f)
//锚点 默认0.5f,1.0f
.alpha(1.0f)
//透明度
//自定义图标
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
aMap.addMarker(markerOptions);

Marker操作

  • Marker删除方法

    marker.remove();


//删除特定marker
//可以设置marker的object方法
marker.setObject(xxx.class);
//碰到删除的地方可以进行判断
if (marker.getObject() == xxx.class) {
marker.remove();
}
//或者加入数组中保存
markers.add(marker);
//碰到删除的地方
for(Marker marker : markers){
marker.remove();
}
  • Marker动画

Marker marker = aMap.addMarker(markerOptions);
//设置Marker缩放动画
Animation animation = new ScaleAnimation(0,1,0,1);
//动画时间
animation.setDuration(1000);
animation.setInterpolator(new LinearInterpolator());
marker.setAnimation(animation);
marker.startAnimation();
  • Marker点击事件

aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
//是否显示info
if (marker.isInfoWindowShown()) {
marker.hideInfoWindow();
}else{
marker.showInfoWindow();
}
//marker经纬度
marker.getPosition();
return true;
}
});
  • Marker拖拽事件

aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
}
@Override
public void onMarkerDrag(Marker marker) {
}
@Override
public void onMarkerDragEnd(Marker marker) {
}
});
  • Marker的InfoWindow设置相关

//InfoWindow 点击事件
aMap.setOnInfoWindowClickListener(new AMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
}
});
//自定义InfoWindow布局
aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
return null;
}
});
//
View getInfoWindow(Marker marker)
//
当实现此方法并返回有效值时(返回值不为空,则视为有效),SDK 将不会使用默认的样式,而采用此方法返回的样式(即 View)。
//
默认会将Marker 的 title 和 snippet 显示到 InfoWindow 中。
//
如果此时修改了 Marker 的 title 或者 snippet 内容,再次调用类 Marker 的 showInfoWindow() 方法,InfoWindow 内容不会更新。
//
自定义 InfoWindow 之后所有的内容更新都需要用户自己完成。
//
当调用 Marker 类的 showInfoWindow() 方法时,SDK 会调用 getInfoWindow(Marker marker) 方法和 getInfoContents(Marker marker) 方法(之后会提到),在这些方法中更新 InfoWindow 的内容即可。
//
注意:如果此方法返回的 View 没有设置 InfoWindow 背景图,SDK 会默认添加一个背景图。
//
View getInfoContents(Marker marker)
//
此方法和 getInfoWindow(Marker marker) 方法的实质是一样的,唯一的区别是:此方法不能修改整个 InfoWindow 的背景和边框,无论自定义的样式是什么样,SDK 都会在最外层添加一个默认的边框。

绘画相关

这边就提及绘制线和绘制圆,其他可以查看官方文档

  • 绘制线

//点数组
List<LatLng> latLngs = new ArrayList<>();
LatLng latLng1 = new LatLng(26.099794,119.296154);
LatLng latLng2 = new LatLng(26.061328,119.291608);
latLngs.add(latLng1);
latLngs.add(latLng2);
//设置点属性
PolylineOptions opt = new PolylineOptions();
opt.addAll(latLngs)//添加点
//设置颜色
.color(Color.BLUE)
//设置线大小
.width(10);
Polyline polyline = aMap.addPolyline(opt);

删除线方法polyline.remove();

  • 绘制圆

//设置圆属性
CircleOptions copt = new CircleOptions();
copt.center(latLng1)//经纬度
.radius(100)//圆半径
//填充颜色
.fillColor(Color.argb(50,1,1,1))
.strokeColor(Color.argb(100,1,1,1))
//线大小
.strokeWidth(15);
Circle circle = aMap.addCircle(copt);

删除线方法circle.remove();


POI相关

关键字搜索


//查询条件
//第一个参数表示搜索字符串,
//第二个参数表示POI搜索类型,第一个参数和第二个参数二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考官方文档
//第三个参数表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
PoiSearch.Query query = new PoiSearch.Query("肯德基","","福州");
//每页的数量
query.setPageSize(10);
//第几页
query.setPageNum(1);
//检索设置
PoiSearch poiSearch = new PoiSearch(this,query);
//异步检索
poiSearch.searchPOIAsyn();
//结果监听
PoiSearch.OnPoiSearchListener listener = new PoiSearch.OnPoiSearchListener() {
@Override
public void onPoiSearched(PoiResult poiResult, int code) {
if (code == 1000) {
//成功
for (PoiItem poiItem : poiResult.getPois()) {
//poi标题
poiItem.getTitle();
//poi内容
poiItem.getSnippet();
//poi经纬度
poiItem.getLatLonPoint();
//poiID
id = poiItem.getPoiId();
LatLng l = new LatLng(poiItem.getLatLonPoint().getLatitude(),
poiItem.getLatLonPoint().getLongitude());
String t = poiItem.getTitle();
String s = poiItem.getSnippet();
MarkerOptions options = new MarkerOptions();
options.position(l)
.title(t)
.snippet(s)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
aMap.addMarker(options);
}
}else{
//失败
}
}
@Override
public void onPoiItemSearched(PoiItem poiItem, int code) {
if (code == 1000) {
//成功
//poi标题
poiItem.getTitle();
//poi内容
poiItem.getSnippet();
//poi经纬度
poiItem.getLatLonPoint();
}else{
//失败
}
}
};
poiSearch.setOnPoiSearchListener(listener);

周边检索

搜索的条件、初始化、监听和上面一样


//圆形区域周边检索
LatLonPoint latLonPoint = new LatLonPoint(26.099794,119.296154);
int r = 2000;
poiSearch.setBound(new PoiSearch.SearchBound(latLonPoint,r));
//执行检索
poiSearch.searchPOIAsyn();
//多边形区别检索
List<LatLonPoint> points = new ArrayList<LatLonPoint>();
points.add(new LatLonPoint(39.941711, 116.382248));
points.add(new LatLonPoint(39.884882, 116.359566));
points.add(new LatLonPoint(39.878120, 116.437630));
points.add(new LatLonPoint(39.941711, 116.382248));
poiSearch.setBound(new SearchBound(points));//设置多边形区域
//执行检索
poiSearch.searchPOIAsyn();

ID检索


//ID检索 初始化的时候去掉query条件
//初始化
PoiSearch poiSearch1 = new PoiSearch(this,null);
//ID异步检索
poiSearch1.searchPOIIdAsyn(id);
//监听还是一样不过 实现的方法是onPoiItemSearched
poiSearch1.setOnPoiSearchListener(listener);

自动提示


//条件
InputtipsQuery inputquery = new InputtipsQuery("医院", "福州");
//限制在当前城市
inputquery.setCityLimit(true);
//初始化
Inputtips inputTips = new Inputtips(this, inputquery);
//异步检索
inputTips.requestInputtipsAsyn();
//监听
inputTips.setInputtipsListener(new Inputtips.InputtipsListener() {
@Override
public void onGetInputtips(List<Tip> list, int code) {
if (code == 1000) {
//成功
for (Tip tip : list) {
//完整名词
tip.getName();
//地址
tip.getAddress();
//poiID
tip.getPoiID();
//经纬度
tip.getPoint();
Log.e("TAG", "==>"+tip.getName());
}
}else{
//失败
}
}
});

结果如下

E/TAG: ==>福建医科大学附属协和医院
E/TAG: ==>福州鼓楼医院
E/TAG: ==>福建省第二人民医院东二环院区
E/TAG: ==>福州市人民医院
E/TAG: ==>福建中医药大学附属康复医院
E/TAG: ==>福建中医药大学附属第二人民医院
E/TAG: ==>福州总医院
E/TAG: ==>福建省立医院
E/TAG: ==>福州中医药大学附属福州中医院
E/TAG: ==>福州市第一医院

公交检索


//站点检索
//条件 第一个填公交站点
BusStationQuery busStationQuery = new BusStationQuery("站点", "福州");
//检索初始化
BusStationSearch busStationSearch = new BusStationSearch(this, busStationQuery);
//异步检索
busStationSearch.searchBusStationAsyn();
//监听
busStationSearch.setOnBusStationSearchListener(new BusStationSearch.OnBusStationSearchListener() {
@Override
public void onBusStationSearched(BusStationResult busStationResult, int code) {
if (code == 1000) {
//成功
for (BusStationItem item : busStationResult.getBusStations()) {
//公交车站点名称
item.getBusStationName();
//公交车站点经纬度
item.getLatLonPoint();
//公交车站点ID
item.getBusStationId();
//公交车站点路过的全部线路
item.getBusLineItems();
Log.e("TAG", "==>"+item.getBusStationName());
for (BusLineItem busLineItem : item.getBusLineItems()) {
//公交线路名称
busLineItem.getBusLineName();
Log.e("TAG", "line==>"+busLineItem.getBusLineName());
}
}
}else{
//失败
}
}
});
//线路查询,第二个参数 BY_LINE_NAME 和 BY_LINE_ID两个参数,名称查询可以模糊查询 id查询就是精确查询
BusLineQuery query = new BusLineQuery("K1", BusLineQuery.SearchType.BY_LINE_NAME,"福州");
//初始化检索
BusLineSearch search = new BusLineSearch(this,query);
//异步检索
search.searchBusLineAsyn();
//监听
search.setOnBusLineSearchListener(new BusLineSearch.OnBusLineSearchListener() {
@Override
public void onBusLineSearched(BusLineResult busLineResult, int code) {
if (code == 1000) {
//成功
for (BusLineItem busLineItem : busLineResult.getBusLines()) {
//线路名称
busLineItem.getBusLineName();
//线路id
busLineItem.getBusLineId();
//线路站点
busLineItem.getBusStations();
Log.e("TAG",busLineItem.getBusLineName());
Log.e("TAG", "=>"+busLineItem.getBusStations().size());
}
}else{
//失败
}
}
});

模糊查找K1结果如下

E/TAG: K1路(火车站北广场--福州东南眼科医院金山新院)
E/TAG: =>28
E/TAG: K1路(福州东南眼科医院金山新院--火车站北广场)
E/TAG: =>28
E/TAG: 平潭K1路(区管委会--海关)
E/TAG: =>7
E/TAG: 平潭K1路(海关--区管委会)
E/TAG: =>7

最后

以上就是贤惠花卷为你收集整理的[AS2.3.3]高德地图使用学习记录地图相关Marker相关绘画相关POI相关的全部内容,希望文章能够帮你解决[AS2.3.3]高德地图使用学习记录地图相关Marker相关绘画相关POI相关所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部