1、Android集成谷歌地图

项目需求,地图展示,设备点聚合,设备站点,设备过滤等功能。我只针对我涉及到的技术做一下总结,希望能帮到开始接触谷歌地图的伙伴们。

1、集成步骤:

①在项目的modle的build.gradle中添加依赖如下:

implementation 'com.google.android.gms:play-services-maps:12.0.1'//    地图操作工具类,添加标记等
compile 'com.google.maps.android:android-maps-utils:0.5+'

2、集成完了后,需要展示地图,这里由于谷歌地图是已经被屏蔽,需要翻墙操作才能展示,项目操作步骤如下:

①首先我们要注册一个谷歌账号

②使用谷歌账号登录谷歌地图开发者平台(登录网站:https://cloud.google.com/maps-platform/?hl=zh-CN),点击控制台,如图

点击控制进入控制台进行如下操作,生成谷歌地图的appkey:

点击API秘钥,生成秘钥,在生成的秘钥界面上我们点击秘钥限制,设置成android ,点击确定就生成了我们所需的appkey。

3、项目需求

1、地图展示

1.地图展示:分为两加载地图,一种是在activity中动态或者是静态加载我们的谷歌地图的fragment,进行显示。首先说一下在activity中静态加载地图的fragment。核心代码如下:

①布局:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/map"android:name="com.google.android.gms.maps.SupportMapFragment"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.mapwithmarker.MapsMarkerActivity" />

②代码中:

  SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);mapFragment.getMapAsync(this);

这样一张谷歌地图就展示出来,显示的原因是通过mapFragment.getMapAsync()方法映射注册回调地图监听(因为谷歌地图被屏蔽了,所以需要翻墙才能看到地图,如果没有翻墙,是空白一片,并且android手机里面必须安装谷歌三件套,否则也不能显示)。

③显示谷歌地图的activity要实现onMapReadyCallBack接口,重写onMapReady(GoogleMap googleMap)方法,在这个方法中我们进行逻辑操作,比如是添加mark点,mark点聚合等。

2、在fragment显示谷歌地图(与activity比较有一些不同点)

①布局中的代码:

 <com.google.android.gms.maps.MapViewandroid:layout_marginTop="1dp"android:id="@+id/mapview"android:layout_width="match_parent"android:layout_height="match_parent" />

②在代码中code如下:

   mMap = (MapView) mView.findViewById(R.id.mapview);mMap.onCreate(savedInstanceState);mMap.onResume();try {MapsInitializer.initialize(getActivity());} catch (Exception e) {e.printStackTrace();}int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getActivity());if (ConnectionResult.SUCCESS != errorCode) {GooglePlayServicesUtil.getErrorDialog(errorCode,this.getActivity(), 0).show();} else {mMap.getMapAsync(this);}

③其他的步骤和activity相同。需要fragment 实现onMapReadyCallBack接口,重写onMapReady(GoogleMap googleMap)方法,在此方法中进行逻辑操作。

2、在地图上添加mark点

在onMapReady(GoogleMap googleMap)方法中,调用返回的googleMap实例添加mark点。核心代码是

 googleMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker").icon(descriptor));

注释:position:就是mark点的经纬度,title:mark的标题,icon :是mark的背景图片。

下面代码是实现自定义 mark背景图片及颜色设置,文字设置的相应方法,抽离于源码,想详细了解可以查看源码:

  /*** 设置站点包含设备数量** @param context* @return*/private SquareTextView makeSquareTextView(Context context) {SquareTextView squareTextView = new SquareTextView(context);ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(-2, -2);squareTextView.setLayoutParams(layoutParams);squareTextView.setId(amu_text);int twelveDpi = (int) (12.0F * this.mDensity);squareTextView.setPadding(twelveDpi, twelveDpi, twelveDpi, twelveDpi);return squareTextView;}/*** 设置站点图片背景色** @return*/private LayerDrawable makeClusterBackground() {this.mShapeDrawable = new ShapeDrawable(new RectShape());ShapeDrawable outline = new ShapeDrawable(new RectShape());outline.getPaint().setColor(-2130706433);LayerDrawable background = new LayerDrawable(new Drawable[]{outline, this.mShapeDrawable});int strokeWidth = (int) (this.mDensity * 3.0F);background.setLayerInset(1, strokeWidth, strokeWidth, strokeWidth, strokeWidth);return background;}/*** 获得站点图标需要显示的数字的格式 小于10的后面没有添加+,反之则添加** @param bucket* @return*/protected String getClusterText(int bucket) {return bucket < 9 ? String.valueOf(bucket) : bucket + "+";}/*** 给画笔设置颜色,目的是画mark点圆图片的颜色。** @param clusterSize* @return*/public int getColors(int clusterSize) {float hueRange = 220.0F;float sizeRange = 300.0F;float size = Math.min((float) clusterSize, 300.0F);float hue = (300.0F - size) * (300.0F - size) / 90000.0F * 220.0F;return Color.HSVToColor(new float[]{hue, 1.0F, 0.6F});}

上述就完成了地图添加mark点,并且可以自定义mark点样式。

3、mark点点聚合

实现点聚合需要借助两个核心类,ClusterItem(聚合条目),ClusterMananger(聚合管理类)

实现步骤是:自己定义一个java类继承ClusterItem,每个人的项目中的mark点信息有可能不同,自己在此java类中定义属性。

使用此java类封装每个mark定数据,并调用ClusterMananger中的addItem(mark)方法,把数据交给ClusterMananager处理,这是使用google地图默认的聚合渲染模式,如果需要定制,需要创建一个java类继承CluseterMananger,进行相应的定制。

代码如下:

 if (mClusterManager == null) {mClusterManager = new ClusterManager<MarkItem>(getApplication(), googleMap);}googleMap.setOnCameraIdleListener(mClusterManager);googleMap.setOnMarkerClickListener(mClusterManager);mClusterManager.setOnClusterItemClickListener(this);mClusterManager.setOnClusterClickListener(this);addItems();
......................................................................................../*** 整合mark点数据*/private void addItems() {double lat = 51.5145160;double lng = -0.1270060;String title = "This is a mark";String snippet = "every mark distriub";for (int i = 0; i < 10; i++) {double offset = i / 360d;lat = lat + offset;lng = lng + offset;MarkItem offsetItem = new MarkItem(lat, lng, title, snippet);mClusterManager.addItem(offsetItem);}}
这样就完成了基本的点聚合。

谢谢浏览

Android 集成谷歌地图相关推荐

  1. android百度导航实现,Android 集成百度地图实现设备定位

    Android 集成百度地图实现设备定位 步骤1: 申请android 端SDK : http://lbsyun.baidu.com/ 步骤2: 下载基础版SDK 步骤3: 下载示例程序 步骤4: 开 ...

  2. Android 集成百度地图之申请TTS授权最新版

    Android 集成百度地图之申请TTS授权最新版. 前提:登录百度地图开放平台,且已创建好应用. 开发文档-Android 导航SDK-TTS授权申请. 这里有个坑,简单说下,进入http://yu ...

  3. 基于Android的谷歌地图地理围栏功能开发

    第一步.Android使用谷歌地图权限 Android上使用谷歌地图 必备条件:翻墙.Android设备上安装Google Play Service 由于谷歌在国内已经被墙了,所以我们只能使用翻墙软件 ...

  4. Android GoogleMap 谷歌地图从零开始

    说明 由于国内使用v2最新的谷歌地图有很多限制,所有如果要在真机上测试运行要做一些准备  准备1:  vpn必不可少啦 推荐cloud vpn或者betternet都是不错的免费vpn  准备2:  ...

  5. android auto谷歌地图,如何在 Android Auto 中使用 Waze 而不是谷歌地图

    玩懂手机网教程,随着有车一族的用户越来越庞大,Android 独家应用程序比 iOS 少的多,大部分用户依旧使用智能手机进行导航,对比起来 Android Auto 正在面临一个逐步两难的境界. An ...

  6. Android 集成百度地图AR识别SDK(二)

    废话 今天我们开始集成百度地图AR识别SDK(后面简称AR SDK)的第二章,这一章我们主要讲Android Studio如何配置AR SDK 我们如果单单只看文档的话,很难看懂如何集成,我们需要结合 ...

  7. Android 集成高德地图

    需要完成效果:集成高德地图,实现定位功能,并且实时刷新位置,每25秒自动刷新位置. 布局: <?xml version="1.0" encoding="utf-8& ...

  8. Android集成谷歌定位sdk,概述-Android 定位SDK | 高德地图API

    什么是定位SDK Android 定位 SDK 是一套简单的LBS服务定位接口,您可以使用这套定位API获取定位结果.逆地理编码(地址文字描述).以及地理围栏功能. 面向的读者 Android 定位 ...

  9. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

    /*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...

  10. android 集成高德地图打包后报 key-location Error, ErrCode:7 的问题

    问题描述(android高德地图key鉴权失败). 工具下载地址:http://download.csdn.net/download/zhuyu19911016520/9965114 按高德官网开发文 ...

最新文章

  1. php比较运算符案列,PHP实例:PHP比较运算符的详细介绍
  2. python爬取抖音评论_怎样用Python3爬取抖音神曲
  3. Qt控制中控考勤SDK
  4. OpenCASCADE:网格
  5. usb接口linux系统设计,AUFS 联合文件系统 - 基于USB接口的微型桌面Linux系统设计
  6. 我的INI 配置文件读写动态库
  7. node.js学习笔记5——核心模块1
  8. FastD 最佳实践二: 构建配置中心
  9. CAD打开文件总是弹出要求选择字体怎么办
  10. office365彻底卸载教程
  11. 草莓熊python turtle绘图(风车版)附源代码
  12. Public Key Retrieval is not allowed
  13. 获奖!CACTER邮件安全网关荣获电子邮件安全优秀产品奖项
  14. 基于vue+spring的博客系统
  15. Bootstrap排版之标题
  16. python把字符串转化为字典_python 将字符串转换为字典
  17. (2)二叉树由后序(LRD)和中序(LDR)得到前序(DLR)
  18. 多传感器融合标定方法汇总
  19. 如何在网站上增加Google analytics,手把手操作
  20. 云计算-云平台-国产-华为-FusionSphere

热门文章

  1. sql查询每科成绩最高的人和分数
  2. 如何用腾讯云服务器搭建网站
  3. Qt下使用GDB远程调试ARM板
  4. 微信朋友圈抓取 附近人自动加 附近人朋友圈抓取 最近一直在研究(有兴趣的看网址)...
  5. 中控,中控系统,中控会议室
  6. vulhub漏洞复现30_Jetty
  7. 【产品经理】003-梁宁·产品思维30讲-机会判断(未完待续)
  8. 整活小能手!Windows系统滑动关机!一行脚本实现炫酷效果
  9. 【windows10】宽带拨号连接报错720的解决办法
  10. 独孤求败-小滴云架构大课十八式