[AS2.3.3]高德地图使用学习记录
2018-02-01 15:58
204 查看
一篇来自自己学习官方文档的文章。
使用的sdk
AMap3DMap_5.7.0
AMapNavi_5.6.0
AMapSearch_5.7.0
AMapLocation_3.7.0
主要内容如下
地图相关
创建显示地图
地图属性设置
Marker相关
创建Marker显示在地图上
Marker操作
绘画相关
绘制了线和圆
poi相关
关键字搜索
周边检索
ID检索
自动提示
公交检索
移动地图中心点到经纬度
地图UI
地图点击事件
地图定位
定位蓝点扩展
Marker动画
Marker点击事件
Marker拖拽事件
Marker的InfoWindow设置相关
绘制线
删除线方法
绘制圆
删除线方法
结果如下
模糊查找K1结果如下
使用的sdk
AMap3DMap_5.7.0
AMapNavi_5.6.0
AMapSearch_5.7.0
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
相关文章推荐
- petshop4.0学习记录一:Memebership的使用
- GDI+ 学习记录(6): 使用画刷建立画笔
- ASP.net中的AJAX学习记录之三 体会UpdateMode属性及使用UpdateTriggers
- ASP.net中的AJAX学习记录之三 体会UpdateMode属性及使用UpdateTriggers
- 实例学习SSIS(四)--使用日志记录和错误流重定向
- [Silverlight学习记录]Resources-2 (使用代码访问Silverlight资源)
- 开始学习使用写日志的方式来记录写程序做过的修改
- 使用JQuery进行WCF通信的学习记录
- VC6 下学习使用Teechart8记录 二 绘制实时曲线
- 如下主要记录在学习使用EXTJS结合WCF的时候的一些心得
- VC6 下学习使用Teechart8记录 三 数据库读取与鼠标选取数据
- [EntLib]微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
- 10-11-22工作学习记录(关于无线网络和有线网络同时使用的办法)
- 实例学习SSIS(四)--使用日志记录和错误流重定向
- java下使用TeeChart生成图表的学习记录
- 2004.7.15 [C#学习记录]使用C#编写一个自定义控件
- 从今天开始使用csdn的blog开始记录学习历程
- 使用commons-logging和Log4j记录日志学习总结
- 学习使用VS2005+ORACLE,感觉乱糟糟的,在此记录一下
- 2004.7.15 [C#学习记录]使用C#编写一个自定义控件(高