Android(安卓) 接入高德地图 显示热力图 | 您所在的位置:网站首页 › 高德地图人流热力图苹果手机 › Android(安卓) 接入高德地图 显示热力图 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tet3jiq5-1592907973244)(https://img.hacpai.com/bing/20180509.jpg?imageView2/1/w/960/h/540/interlace/1/q/100)] 安卓接入高德地图API展示热力图概述:因为要用到这个,所以记一下怎么弄的,以后可能会用到。废话不多说; 首先,去高德地图 API 官网搞一个 key。 KEY 名称自定义,中英文都可以,只是让你分辨你的key, 安全码 SHA1 的获取见: https://www.lonuslan.com/articles/2020/06/23/1592905144300.html 建立好后会在我的应用里生成一个 KEY ,记住这个,复制下这个后面会用到。 之后在 AndroidManifest.xml 中 标签内添加: 123456在 标签内添加获取网络权限等: 123456789101112在 build.gradle 下 dependencies 中添加获取高德地图 sdk 依赖: 12345678910111213 //高德地图配置开始 //3D地图so及jar implementation 'com.amap.api:3dmap:latest.integration' // implementation 'com.amap.api:3dmap:latest.integration' //定位功能 // implementation 'com.amap.api:map2d:latest.integration' //定位功能 implementation 'com.amap.api:location:latest.integration' //搜索功能 implementation 'com.amap.api:search:latest.integration' //高德地图配置结束针对不同架构,添加 3d 支持: 123456789101112131415161718192021222324252627282930313233343536373839android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.example.testapplication" minSdkVersion 15 targetSdkVersion 29 // multiDexEnabled true multiDexEnabled false versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" //高德地图配置开始 ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) abiFilters "armeabi", "armeabi-v7a" } // , "arm64-v8a" , "x86","x86_64" , "arm64-v8a" //高德地图配置结束 javaCompileOptions { annotationProcessorOptions { includeCompileClasspath true } } } //高德地图配置开始 packagingOptions { doNotStrip "*/armeabi/*.so" doNotStrip "*/armeabi-v7a/*.so" // doNotStrip "*/arm64-v8a/*.so" // doNotStrip "*/x86/*.so" // doNotStrip "*/x86_64/*.so" // doNotStrip "*/mips/*.so" // doNotStrip "*/mips64/*.so" // 高德地图配置结束 } //其他配置... }这里可能会出现 地图闪退 或者 APP 崩溃 的现象。建议尝试一下使用 gradle 工具 clean 之后再 build. 之后就可以按照官方文档愉快的进行开发了,给个示例参考,其实官方代码也有: layout.xml 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576activity.class 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177package com.example.testapplication.activity; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.TextView; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.Gradient; import com.amap.api.maps.model.HeatmapTileProvider; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.MyLocationStyle; import com.amap.api.maps.model.TileOverlayOptions; import com.amap.api.maps.model.WeightedLatLng; import com.example.testapplication.R; import com.example.testapplication.util.HotAreaUtil; import java.io.IOException; import java.util.Arrays; public class BaseUseActivity extends AppCompatActivity implements View.OnClickListener { private MapView mapView; private AMap aMap; private TextView tvOpenHotArea; private TextView tvCloseHotArea; private UiSettings uiSettings; private MyLocationStyle myLocationStyle; private static final int[] ALT_HEATMAP_GRADIENT_COLORS = { Color.rgb( 0, 0, 255), Color.rgb( 0, 211, 248), Color.rgb(0, 255, 0), Color.rgb(185, 71, 0), Color.rgb(255, 0, 0) }; public static final float[] ALT_HEATMAP_GRADIENT_START_POINTS = { 0.1f, 0.2f, 0.25f, 0.4f, 1f }; public static final Gradient ALT_HEATMAP_GRADIENT = new Gradient( ALT_HEATMAP_GRADIENT_COLORS, ALT_HEATMAP_GRADIENT_START_POINTS); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base_use); mapView = findViewById(R.id.gaode_map); mapView.onCreate(savedInstanceState); if (aMap == null){ aMap = mapView.getMap(); } uiSettings = aMap.getUiSettings(); initView(); moveToTargetLocation(); } private void initLocation() { myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类 // myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。 myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style uiSettings.setMyLocationButtonEnabled(true); aMap.setMyLocationEnabled(true);// 可触发定位并显示当前位置 uiSettings.setScaleControlsEnabled(true);//控制比例尺控件是否显示 aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 aMap.moveCamera(CameraUpdateFactory.zoomTo(15));//设置中心点和缩放比例 } private void moveToTargetLocation(){ aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(**, **), 15, 0, 0))); } private void initView() { tvOpenHotArea = findViewById(R.id.tv_open_hot_area); tvOpenHotArea.setOnClickListener(this); tvCloseHotArea = findViewById(R.id.tv_close_hot_area); tvCloseHotArea.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv_close_hot_area: //TODO 关闭当前定位优化; aMap.clear(); aMap.removecache(); moveToTargetLocation(); break; case R.id.tv_open_hot_area: //随机生成热力点坐标列表 // LatLng[] latlngs = new LatLng[500]; // double x = 30.457958; // double y = 106.631689; // // for (int i = 0; i < 500; i++) { // double x_ = 0; // double y_ = 0; // x_ = Math.random() * 0.5 - 0.25; // y_ = Math.random() * 0.5 - 0.25; // latlngs[i] = new LatLng(x + x_, y + y_); // } // 构建热力图 HeatmapTileProvider HeatmapTileProvider.Builder builder = new HeatmapTileProvider.Builder(); try { WeightedLatLng[] weightedLatLng = HotAreaUtil.getHotAreaData("data.txt"); // 设置热力图绘制的数据 builder.weightedData(Arrays.asList(weightedLatLng)) .radius(25) .gradient(ALT_HEATMAP_GRADIENT); // 设置热力图渐变,有默认值 DEFAULT_GRADIENT,可不设置该接口 // Gradient 的设置可见参考手册 //这里也可以试试官方的随机数据看看效果 //builder.data(Arraysd.asList(latlngs) } catch (IOException e) { e.printStackTrace(); } // 构造热力图对象 HeatmapTileProvider heatmapTileProvider = builder.build(); // 初始化 TileOverlayOptions TileOverlayOptions tileOverlayOptions = new TileOverlayOptions(); tileOverlayOptions.tileProvider(heatmapTileProvider); // 设置瓦片图层的提供者 // 向地图上添加 TileOverlayOptions 类对象 aMap.addTileOverlay(tileOverlayOptions); break; } } /** * 方法必须重写 */ @Override public void onResume() { super.onResume(); mapView.onResume(); } /** * 方法必须重写 */ @Override public void onPause() { super.onPause(); mapView.onPause(); } /** * 方法必须重写 */ @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } }详细的接口文档,可参照官方: https://a.amap.com/lbs/static/unzip/Android_Map_Doc/index.html |
CopyRight 2018-2019 实验室设备网 版权所有 |