Android(安卓) 接入高德地图 显示热力图 您所在的位置:网站首页 高德地图人流热力图苹果手机 Android(安卓) 接入高德地图 显示热力图

Android(安卓) 接入高德地图 显示热力图

2024-06-26 13:40| 来源: 网络整理| 查看: 265

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576                                            

activity.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 实验室设备网 版权所有