我是靠谱客的博主 贤惠花卷,这篇文章主要介绍[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检索
    自动提示
    公交检索

地图相关

创建显示地图

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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(); } }

地图属性设置

  • 设置地图层级
复制代码
1
2
3
//设置地图层级 3-19 aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
  • 移动地图中心点到经纬度
复制代码
1
2
3
4
5
6
7
8
9
10
//设置中心点到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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//地图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);
  • 地图点击事件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//地图点击 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(); } });
  • 地图定位
复制代码
1
2
3
4
5
6
7
8
9
10
11
//定位相关 MyLocationStyle myLocationStyle = new MyLocationStyle(); //连续定位的触发间隔 myLocationStyle.interval(5000) //定位类型 循环定位 .myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE); //设置定位蓝点属性 aMap.setMyLocationStyle(myLocationStyle); //设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false aMap.setMyLocationEnabled(true);

定位蓝点扩展

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//定位模式设置 //只定位一次。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显示在地图上

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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();

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//删除特定marker //可以设置marker的object方法 marker.setObject(xxx.class); //碰到删除的地方可以进行判断 if (marker.getObject() == xxx.class) { marker.remove(); } //或者加入数组中保存 markers.add(marker); //碰到删除的地方 for(Marker marker : markers){ marker.remove(); }
  • Marker动画
复制代码
1
2
3
4
5
6
7
8
9
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点击事件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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拖拽事件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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设置相关
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//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 都会在最外层添加一个默认的边框。

绘画相关

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

  • 绘制线
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//点数组 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();

  • 绘制圆
复制代码
1
2
3
4
5
6
7
8
9
10
11
//设置圆属性 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相关

关键字搜索

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//查询条件 //第一个参数表示搜索字符串, //第二个参数表示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);

周边检索

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//圆形区域周边检索 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检索

复制代码
1
2
3
4
5
6
7
8
//ID检索 初始化的时候去掉query条件 //初始化 PoiSearch poiSearch1 = new PoiSearch(this,null); //ID异步检索 poiSearch1.searchPOIIdAsyn(id); //监听还是一样不过 实现的方法是onPoiItemSearched poiSearch1.setOnPoiSearchListener(listener);

自动提示

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//条件 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{ //失败 } } });

结果如下

复制代码
1
2
3
4
5
6
7
8
9
10
E/TAG: ==>福建医科大学附属协和医院 E/TAG: ==>福州鼓楼医院 E/TAG: ==>福建省第二人民医院东二环院区 E/TAG: ==>福州市人民医院 E/TAG: ==>福建中医药大学附属康复医院 E/TAG: ==>福建中医药大学附属第二人民医院 E/TAG: ==>福州总医院 E/TAG: ==>福建省立医院 E/TAG: ==>福州中医药大学附属福州中医院 E/TAG: ==>福州市第一医院

公交检索

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//站点检索 //条件 第一个填公交站点 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结果如下

复制代码
1
2
3
4
5
6
7
8
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部