Android中集成高德API

1.创建一个项目

2.注册高德开发用户,并来到控制台,点击应用管理->我的应用,然后创建新应用

地址:https://lbs.amap.com/

3. 点击添加

 获取SHA1代码(我这里使用的是AndroidStudio):

首先生成jks文件

在java的jdk目录下bin目录下输入命令:keytool -v -keystore 文件路径

 

 然后就会得到以下参数,即发布版安全码SHA1

然后我们进入到C:\Users\Administrator\.android下找到debug.keystore,然后执行如下命令得到调试版安全码SHA1

我们将俩种安全码分别填入,包名为AndroidMainifest.xml中package的值,然后提交

然后就会得到key

 

 4.下载地图开发包

https://lbs.amap.com/api/android-sdk/download/,我选择的是这个定制下载包

 将下好的包导入,如图所示

修改build.gradle(app的)添加配置如下,然后点击页面右上角的Sync Now

 

 5.配置

配置AndroidManifest.xml

在application标签下新增

        <meta-data
            android:name="com.amap.api.v2.apikey" 
            android:value="你申请的key值"/> <!--注意这里的android:name是固定值-->

 在manifest标签下新增

<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />  
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />     
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

配置布局文件,修改activity_main为

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.amap.api.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.amap.api.maps.MapView>

</androidx.constraintlayout.widget.ConstraintLayout>

编辑MainActivity.java为

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//设置对应的XML布局文件

        MapView mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 此方法必须重写
        AMap aMap = mapView.getMap();
    }
}

测试运行:

 

 

二、在地图上添加图层

 

package com.example.maptest;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.Circle;
import com.amap.api.maps.model.CircleOptions;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MyLocationStyle;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private MarkerOptions markerOption;
    private AMap aMap;
    private MapView mapView;
    private LatLng latLng=new LatLng(39.761,116.434);
    Marker marker;
    Circle circle;
    private static final int STROKE_COLOR = Color.argb(180, 3, 145, 255);
    private static final int FILL_COLOR = Color.argb(10, 0, 0, 180);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 此方法必须重写
        init();
    }

    public void init(){
        Button clearMap = (Button) findViewById(R.id.clearMap);
        clearMap.setOnClickListener(this);
        Button resetMap = (Button) findViewById(R.id.resetMap);
        resetMap.setOnClickListener(this);
        if(aMap==null){
            aMap=mapView.getMap();
            addMrkersToMap();//往地图上添加Marker
            addCircle();
        }

    }

    private void addMrkersToMap(){
        markerOption=new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.storm_06))
                .position(latLng)
                .draggable(true);
        marker=aMap.addMarker(markerOption);
    }

    public void addCircle(){
        CircleOptions circleOptions=new CircleOptions();
        circleOptions.center(new LatLng(40,116.434));
        circleOptions.radius(500);
        circleOptions.strokeWidth(8);
        circleOptions.strokeColor(Color.BLUE);
        circleOptions.fillColor(Color.BLUE);
        circle=aMap.addCircle(circleOptions);
    }

   
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.clearMap:
                if(aMap!=null){
                    marker.destroy();
                    circle.destorty();
                }
                break;
            case R.id.resetMap:
                if(aMap!=null){
                    addMrkersToMap();
                    addCircle();
                }
                break;
            default:
                break;
        }

    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </com.amap.api.maps.MapView>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top|right"
            android:background="#D000"
            android:orientation="vertical"
            android:padding="5dp" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <Button
                    android:id="@+id/clearMap"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="0.5"
                    android:text="clear" />

                <Button
                    android:id="@+id/resetMap"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="0.5"
                    android:text="reset" />
            </LinearLayout>
        </LinearLayout>
    </FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

效果图: 

 

 

三、使用自定义样式的地图

首先登录到高德地图开放平台选择自定义地图

然后选择一种基础模板

然后修改地图样式,如我这里把水系色设为了蓝色

然后右上角保存,然后返回上一页就可以看到自己新建的自定义地图了

然后我们发布,然后我们点击如图

然后我们配置SDK版本信息并下载(这里的SDK版本要和你使用的高德SDK保持一致,比如我使用的是7.6.0的就选择7.0.0到7.7.0版本)

然后我们解压文件得到如图

然后我们在AndroidStudio项目目录下新建assest目录,并把上述俩个文件导入

然后我们在MainActivity中OnCreate函数下加入如下代码

        byte[]  buffer1 = null;
        byte[]  buffer2 = null;
        InputStream is1 = null;
        InputStream is2 = null;
        try {
            is1 = getAssets().open("style.data");
            int lenght1 = is1.available();
            buffer1 = new byte[lenght1];
            is1.read(buffer1);
            is2 = getAssets().open("style_extra.data");
            int lenght2 = is2.available();
            buffer2 = new byte[lenght2];
            is2.read(buffer2);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if (is1!=null)
                    is1.close();
                if (is2!=null)
                    is2.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        CustomMapStyleOptions customMapStyleOptions=new CustomMapStyleOptions();
        customMapStyleOptions.setStyleData(buffer1);
        customMapStyleOptions.setStyleExtraData(buffer2);
        aMap.setCustomMapStyle(customMapStyleOptions);

测试

 

四、画多边形、线、圆

//画实心小蓝点    
LatLng latLng=new LatLng(35.909736,80.947266);        
Circle circle=aMap.addCircle(new CircleOptions().center(latLng).radius(30000).usePolylineStroke(true).strokeColor(getResources().getColor(R.color.red,null)).fillColor(getResources().getColor(R.color.red,null)));
//删除
//circle.remove();


//画线段
LatLng A1=new LatLng(35.909736,80.947266);
LatLng B1=new LatLng(35.909736,89.947266);
Polyline polyline=aMap.addPolyline(new PolylineOptions().add(A1,B1).width(5).color(getResources().getColor(R.color.red,null)));
//删除
//polyline.remove();


//画矩形区域
LatLng A=new LatLng(40,100);
LatLng B=new LatLng(42,100);
LatLng C=new LatLng(40,102);
LatLng D=new LatLng(42,102);
PolygonOptions polygonOptions=new PolygonOptions();
polygonOptions.add(A,B,D,C);
polygonOptions.strokeWidth(4).strokeColor(getResources().getColor(R.color.red,null)).fillColor(getResources().getColor(R.color.red,null));
Polygon polygon=aMap.addPolygon(polygonOptions);
//删除
//polygon.remove();


 

五、调整照相机视角

LatLng latlng = new LatLng(39.4,117);//屏幕中心点,39.4,117是北京的坐标
mapView.getMap().moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(latlng, 5, 0, 0)));//v:缩放比例,v1俯视视角角度,v2:旋转角度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值