北京做电商网站设计,网站数据怎么备份,网站谷歌seo做哪些,做设计用哪个素材网站好引言
项目需求需要在谷歌地图#xff1a;
地图展示#xff0c;设备点聚合#xff0c;设备站点#xff0c;绘制点和区域等功能。 我只针对我涉及到的技术做一下总结#xff0c;希望能帮到开始接触谷歌地图的伙伴们。 集成步骤 1、在项目的modle的build.gradle中添加依赖如…引言
项目需求需要在谷歌地图
地图展示设备点聚合设备站点绘制点和区域等功能。 我只针对我涉及到的技术做一下总结希望能帮到开始接触谷歌地图的伙伴们。 集成步骤 1、在项目的modle的build.gradle中添加依赖如下 implementation com.google.android.gms:play-services-maps:12.0.1// 地图操作工具类添加标记等implementation com.google.maps.android:android-maps-utils:0.5
2、集成完了后需要展示地图这里由于谷歌地图是已经被屏蔽需要翻墙操作才能展示。
①首先我们要注册一个谷歌账号
②使用谷歌账号登录谷歌地图开发者平台登录网站https://cloud.google.com/maps-platform/?hlzh-CN点击控制台如图 点击控制进入控制台进行如下操作生成谷歌地图的appkey 点击API秘钥生成秘钥在生成的秘钥界面上我们点击秘钥限制设置成android 点击确定就生成了我们所需的appkey。
将生成的API密钥复制并粘贴到您的Android应用程序的相应位置通常在AndroidManifest.xml中的application标签内如下所示
application!-- 其他配置 --meta-dataandroid:namecom.google.android.geo.API_KEYandroid:valueYOUR_GOOGLE_MAPS_API_KEY/!-- 其他配置 --
/application
替换YOUR_GOOGLE_MAPS_API_KEY为您从Google Developers Console获得的API密钥。
请注意您需要为调试和发布版本获取不同的密钥并为每种版本使用正确的SHA-1证书指纹。 项目开发 地图展示 向应用中添加Google Map组件有两种基本的方式:
1、一种是利用MapFragmentFragment的子类内部集成GoogleMap
2、另一种是用MapViewView的子类内部集成GoogleMap。 一、MapFragment
1.地图展示分为两加载地图
一种是在activity中动态或者是静态加载我们的谷歌地图的fragment进行显示。 静态加载
首先说一下在activity中静态加载地图的fragment。核心代码如下
activity_main.xml
?xml version1.0 encodingutf-8?
fragment xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:idid/mapandroid:namecom.google.android.gms.maps.SupportMapFragmentandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:contextcom.example.googlemapdemo.MapsMarkerActivity /
class MapsMarkerActivity : AppCompatActivity() , OnMapReadyCallback {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val mapFragment supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?mapFragment!!.getMapAsync(this)}override fun onMapReady(map : GoogleMap?) {}
}
这样一张谷歌地图就展示出来显示的原因是通过mapFragment.getMapAsync()方法映射注册回调地图监听因为谷歌地图被屏蔽了所以需要翻墙才能看到地图如果没有翻墙是空白一片并且android手机里面必须安装谷歌三件套否则也不能显示。 动态加载
布局
?xml version1.0 encodingutf-8?
fragment xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:idid/my_containerandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:contextcom.example.googlemapdemo.MapsMarkerActivity /
activity 代码
创建一个MapFragment对象并利用FragmentTransaction动态添加到指定的容器中
class MapsMarkerActivity : AppCompatActivity() , OnMapReadyCallback {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// val mapFragment supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
// mapFragment!!.getMapAsync(this)val fragmentManager supportFragmentManagerval mapFragment SupportMapFragment.newInstance()fragmentManager.beginTransaction().replace(R.id.map_container, mapFragment as Fragment ).commit()mapFragment.getMapAsync(this)}override fun onMapReady(map : GoogleMap?) {}
} 二、MapView
MapView是View的子类只需要在布局文件中引用com.google.android.gms.maps.MapView定义一个MapView然后在Activity初始化MapView与普通的TextView等组件用法类似。
xml: //layout文件中的定义com.google.android.gms.maps.MapViewandroid:idid/mymapandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent/
activity : //Activity中的初始化myMap (MapView)findViewById(R.id.mymap);myMap.getMapAsync(this);//getMapAsync这个与MapFragment相同
需要特别注意的是MapView中生命周期的方法必须与Activity生命周期的方法同步即必须在Activity中的生命周期中调用MapView的生命周期函数。
Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//其他的一些初始化myMap.onCreate(savedInstanceState);}Overrideprotected void onResume() {super.onResume();myMap.onResume();}Overrideprotected void onPause() {super.onPause();myMap.onPause();}Overrideprotected void onDestroy() {super.onDestroy();myMap.onDestroy();}Overridepublic void onLowMemory() {super.onLowMemory();myMap.onLowMemory();}Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);myMap.onSaveInstanceState(outState);}
onMapReady
onMapReady()是一个回调方法用于在地图准备就绪后获取初始坐标。
当地图准备就绪时系统会调用该方法并传入一个GoogleMap对象作为参数开发者可以通过该对象进行地图相关的操作。 Overridepublic void onMapReady(GoogleMap googleMap) {mMap googleMap;// 获取当前位置的经纬度if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ! PackageManager.PERMISSION_GRANTED) {// 请求权限ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);} else {// 获取到位置权限后获取当前位置经纬度mMap.setMyLocationEnabled(true);LatLng latLng new LatLng(mMap.getMyLocation().getLatitude(), mMap.getMyLocation().getLongitude());mMap.addMarker(new MarkerOptions().position(latLng).title(当前位置));mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));}}
在onMapReady回调中我们首先检查定位权限如果已经授予我们就启用地图上的位置指示通过调用setMyLocationEnabled(true)然后可以获取当前的位置通过调用getMyLocation()并在地图上设置一个标记通过调用addMarker()以及移动相机到当前位置通过调用moveCamera()。如果没有定位权限我们请求权限并在权限被授予后执行上述操作。 三、组件的初始化 当需要初始化Map的一些状态时可以在xml属性中设置也可以在java代码中设置。
1.xml属性初始化 在fragment或者MapView的xml布局中都可以添加一些属性来初始化Map的状态。
fragment xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:maphttp://schemas.android.com/apk/res-autoandroid:namecom.google.android.gms.maps.SupportMapFragmentandroid:idid/mapandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentmap:cameraBearing112.5map:cameraTargetLat-33.796923map:cameraTargetLng150.922433map:cameraTilt30map:cameraZoom13map:mapTypenormalmap:uiCompassfalsemap:uiRotateGesturestruemap:uiScrollGesturesfalsemap:uiTiltGesturestruemap:uiZoomControlsfalsemap:uiZoomGesturestrue/
GoogleMapOptions options new GoogleMapOptions();
options.mapType(GoogleMap.MAP_TYPE_SATELLITE).compassEnabled(false).rotateGesturesEnabled(false).tiltGesturesEnabled(false);
//在实例化一个MapFragment对象时
MapFragment.newInstance(GoogleMapOptions options);
//或者MapView的构造函数中
MapView(Context, GoogleMapOptions)