高德地图

java集成高德地图(干货) java集成高德地图(干货) 高德地图开发地址注册开发者,申请key 高德地图工具类java package com.sf.auth.toolbox; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.springframework.stereotype.Compon... 阅读详情
高德地图
MainActivity:
public class MainActivity extends AppCompatActivity {

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

    }

    public void map(View view) {
        Intent intent = new Intent(this,MapActivity.class);
        startActivity(intent);

    }

    public void poi(View view) {
        Intent intent = new Intent(this,PoiActivity.class);
        startActivity(intent);
    }

    public void locate(View view) {
        Intent intent = new Intent(this,LocateActivity.class);
        startActivity(intent);
    }
}
MainActivity的布局;
<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.example.dell.gaodeditu_dome.MainActivity">
    <Button
        android:onClick="map"
        android:text="展示地图"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:onClick="poi"
        android:text="poi检索"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:onClick="locate"
        android:text="定位"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>


MapActivity:
public class MapActivity extends AppCompatActivity {
    private MapView mMapView;
    private AMap aMap;
    private MyLocationStyle myLocationStyle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);

        if (aMap == null) {
            aMap = mMapView.getMap();
        }
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类

        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }
    //地图模式可选类型:MAP_TYPE_NORMAL,MAP_TYPE_SATELLITE,MAP_TYPE_NIGHT
    //aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
    public void normal(View view) {
        aMap.setMapType(AMap.MAP_TYPE_NORMAL);// 普通地图模式
    }

    public void weiXing(View view) {
        aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
    }

    public void night(View view) {
        aMap.setMapType(AMap.MAP_TYPE_NIGHT);// 夜间地图模式
    }
    boolean flag = false;
    public void luKuang(View view) {
        if (flag){
            aMap.setTrafficEnabled(true);// 显示实时交通状况
            flag = false;
        }else {
            aMap.setTrafficEnabled(false);
            flag = true;
        }
    }
}
MapActivity布局:
<LinearLayout 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:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.example.dell.gaodeditu_dome.MapActivity">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:onClick="normal"
            android:text="普通"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content" />

        <Button
            android:onClick="weiXing"
            android:text="卫星"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content" />

        <Button
            android:onClick="night"
            android:text="夜间"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content" />

        <Button
            android:onClick="luKuang"
            android:text="路况"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content" />

    </LinearLayout>

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

</LinearLayout>
PoiActivity:
public class PoiActivity extends AppCompatActivity implements PoiSearch.OnPoiSearchListener, AMap.OnMyLocationChangeListener{
    private MapView mMapView;
    private MyLocationStyle myLocationStyle;
    private AMap aMap;
    private EditText mSearchText;
    private String keyWord;
    private int currentPage;//页数
    private PoiSearch.Query query;
    private PoiSearch poiSearch;

    private LatLonPoint lp;// = new LatLonPoint(39.993743, 116.472995);// 116.472995,39.993743
    private PoiResult poiResult;
    private ArrayList<PoiItem> poiItems;
    private RelativeLayout mPoiDetail;

    private Marker mlastMarker;
    private myPoiOverlay poiOverlay;// poi图层
    private Location location;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_poi);
        mSearchText = findViewById(R.id.edit_text);
        mPoiDetail = (RelativeLayout) findViewById(R.id.poi_detail);


        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);

        if (aMap == null) {
            aMap = mMapView.getMap();
        }

        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。

        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);

        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

        aMap.setOnMyLocationChangeListener(this);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }

    /**
     * 搜搜的点击事件
     * @param view
     */
    public void souSuo(View view) {

        doSearchQuery();

    }

    protected void doSearchQuery() {
        keyWord = mSearchText.getText().toString().trim();

        currentPage = 0;

        query = new PoiSearch.Query(keyWord, "", "");// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
        query.setPageSize(20);// 设置每页最多返回多少条poiitem
        query.setPageNum(currentPage);// 设置查第一页

        if (location != null){
            lp = new LatLonPoint(location.getLatitude(),location.getLongitude());//经纬度

            if (lp != null) {
                poiSearch = new PoiSearch(this, query);
                //搜索的监听
                poiSearch.setOnPoiSearchListener(this);
                //lp表示坐标对象,经纬度构建的一个对象
                poiSearch.setBound(new PoiSearch.SearchBound(lp, 5000, true));//
                // 设置搜索区域为以lp点为圆心,其周围5000米范围
                poiSearch.searchPOIAsyn();// 异步搜索
            }

        }

    }

    /**
     * 搜索到之后的操作在这个方法里面处理
     * @param
     */
    @Override
    public void onPoiSearched(PoiResult result, int rcode) {

        if (rcode == AMapException.CODE_AMAP_SUCCESS) {
            if (result != null && result.getQuery() != null) {// 搜索poi的结果
                if (result.getQuery().equals(query)) {// 是否是同一条
                    poiResult = result;
                    poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始
                    List<SuggestionCity> suggestionCities = poiResult
                            .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
                    if (poiItems != null && poiItems.size() > 0) {
                        //清除POI信息显示
                        whetherToShowDetailInfo(false);
                        //并还原点击marker样式
                        if (mlastMarker != null) {
                            resetlastmarker();
                        }
                        //清理之前搜索结果的marker
                        if (poiOverlay !=null) {
                            poiOverlay.removeFromMap();
                        }
                        aMap.clear();
                        poiOverlay = new myPoiOverlay(aMap, poiItems);
                        poiOverlay.addToMap();
                        poiOverlay.zoomToSpan();

                        aMap.addMarker(new MarkerOptions()
                                .anchor(0.5f, 0.5f)
                                .icon(BitmapDescriptorFactory
                                        .fromBitmap(BitmapFactory.decodeResource(
                                                getResources(), R.drawable.point4)))
                                .position(new LatLng(lp.getLatitude(), lp.getLongitude())));

                        aMap.addCircle(new CircleOptions()
                                .center(new LatLng(lp.getLatitude(),
                                        lp.getLongitude())).radius(5000)
                                .strokeColor(Color.BLUE)
                                .fillColor(Color.argb(50, 1, 1, 1))
                                .strokeWidth(2));

                    } else if (suggestionCities != null
                            && suggestionCities.size() > 0) {
                        showSuggestCity(suggestionCities);
                    } else {
                        //吐司
                    }
                }
            } else {
                //吐司
            }
        } else  {
            //吐司
        }

    }

    /**
     * poi没有搜索到数据,返回一些推荐城市的信息
     */
    private void showSuggestCity(List<SuggestionCity> cities) {
        String infomation = "推荐城市\n";
        for (int i = 0; i < cities.size(); i++) {
            infomation += "城市名称:" + cities.get(i).getCityName() + "城市区号:"
                    + cities.get(i).getCityCode() + "城市编码:"
                    + cities.get(i).getAdCode() + "\n";
        }
        //吐司

    }

    @Override
    public void onPoiItemSearched(PoiItem poiItem, int i) {

    }

    private void whetherToShowDetailInfo(boolean isToShow) {
        if (isToShow) {
            mPoiDetail.setVisibility(View.VISIBLE);

        } else {
            mPoiDetail.setVisibility(View.GONE);

        }
    }

    private int[] markers = {R.drawable.poi_marker_1,
            R.drawable.poi_marker_2,
            R.drawable.poi_marker_3,
            R.drawable.poi_marker_4,
            R.drawable.poi_marker_5,
            R.drawable.poi_marker_6,
            R.drawable.poi_marker_7,
            R.drawable.poi_marker_8,
            R.drawable.poi_marker_9,
            R.drawable.poi_marker_10
    };

    // 将之前被点击的marker置为原来的状态
    private void resetlastmarker() {
        int index = poiOverlay.getPoiIndex(mlastMarker);
        if (index < 10) {
            mlastMarker.setIcon(BitmapDescriptorFactory
                    .fromBitmap(BitmapFactory.decodeResource(
                            getResources(),
                            markers[index])));
        }else {
            mlastMarker.setIcon(BitmapDescriptorFactory.fromBitmap(
                    BitmapFactory.decodeResource(getResources(), R.drawable.marker_other_highlight)));
        }
        mlastMarker = null;

    }

    @Override
    public void onMyLocationChange(Location location) {
        this.location = location;
    }

    /**
     * 自定义PoiOverlay
     *
     */

    private class myPoiOverlay {
        private AMap mamap;
        private List<PoiItem> mPois;
        private ArrayList<Marker> mPoiMarks = new ArrayList<Marker>();
        public myPoiOverlay(AMap amap ,List<PoiItem> pois) {
            mamap = amap;
            mPois = pois;
        }

        /**
         * 添加Marker到地图中。
         * @since V2.1.0
         */
        public void addToMap() {
            for (int i = 0; i < mPois.size(); i++) {
                Marker marker = mamap.addMarker(getMarkerOptions(i));
                PoiItem item = mPois.get(i);
                marker.setObject(item);
                mPoiMarks.add(marker);
            }
        }

        /**
         * 去掉PoiOverlay上所有的Marker。
         *
         * @since V2.1.0
         */
        public void removeFromMap() {
            for (Marker mark : mPoiMarks) {
                mark.remove();
            }
        }

        /**
         * 移动镜头到当前的视角。
         * @since V2.1.0
         */
        public void zoomToSpan() {
            if (mPois != null && mPois.size() > 0) {
                if (mamap == null)
                    return;
                LatLngBounds bounds = getLatLngBounds();
                mamap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
            }
        }

        private LatLngBounds getLatLngBounds() {
            LatLngBounds.Builder b = LatLngBounds.builder();
            for (int i = 0; i < mPois.size(); i++) {
                b.include(new LatLng(mPois.get(i).getLatLonPoint().getLatitude(),
                        mPois.get(i).getLatLonPoint().getLongitude()));
            }
            return b.build();
        }

        private MarkerOptions getMarkerOptions(int index) {
            return new MarkerOptions()
                    .position(
                            new LatLng(mPois.get(index).getLatLonPoint()
                                    .getLatitude(), mPois.get(index)
                                    .getLatLonPoint().getLongitude()))
                    .title(getTitle(index)).snippet(getSnippet(index))
                    .icon(getBitmapDescriptor(index));
        }

        protected String getTitle(int index) {
            return mPois.get(index).getTitle();
        }

        protected String getSnippet(int index) {
            return mPois.get(index).getSnippet();
        }

        /**
         * 从marker中得到poi在list的位置。
         *
         * @param marker 一个标记的对象。
         * @return 返回该marker对应的poi在list的位置。
         * @since V2.1.0
         */
        public int getPoiIndex(Marker marker) {
            for (int i = 0; i < mPoiMarks.size(); i++) {
                if (mPoiMarks.get(i).equals(marker)) {
                    return i;
                }
            }
            return -1;
        }

        /**
         * 返回第index的poi的信息。
         * @param index 第几个poi。
         * @return poi的信息。poi对象详见搜索服务模块的基础核心包(com.amap.api.services.core)中的类 <strong><a href="../../../../../../Search/com/amap/api/services/core/PoiItem.html" title="com.amap.api.services.core中的类">PoiItem</a></strong>。
         * @since V2.1.0
         */
        public PoiItem getPoiItem(int index) {
            if (index < 0 || index >= mPois.size()) {
                return null;
            }
            return mPois.get(index);
        }

        protected BitmapDescriptor getBitmapDescriptor(int arg0) {
            if (arg0 < 10) {
                BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(
                        BitmapFactory.decodeResource(getResources(), markers[arg0]));
                return icon;
            }else {
                BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(
                        BitmapFactory.decodeResource(getResources(), R.drawable.marker_other_highlight));
                return icon;
            }
        }
    }
}

PoiActivity布局:
<RelativeLayout
    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="com.example.dell.gaodeditu_dome.PoiActivity">
    <LinearLayout
        android:id="@+id/linear"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/edit_text"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content" />

        <Button
            android:onClick="souSuo"
            android:text="搜索"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>


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



    <RelativeLayout
        android:id="@+id/poi_detail"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:background="@drawable/border_bg"
        android:visibility="gone">

        <TextView
            android:id="@+id/poi_name"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="12dp"
            android:layout_marginStart="12dp"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:textColor="#5566b8"
            android:textSize="15sp" />


        <TextView
            android:id="@+id/poi_address"
            android:layout_width="wrap_content"
            android:layout_height="25dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@id/poi_name"
            android:layout_marginLeft="12dp"
            android:layout_marginStart="12dp"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:textColor="#333333"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/poi_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@id/poi_address"
            android:layout_marginLeft="12dp"
            android:layout_marginStart="12dp"
            android:gravity="center_vertical"
            android:textColor="#333333"
            android:textSize="12sp" />
    </RelativeLayout>


</RelativeLayout>

LocateActivity:
 public class LocateActivity extends AppCompatActivity implements AMapLocationListener {
    private AMapLocationClient mLocationClient;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_locate);
        textView = findViewById(R.id.text_view);

        //1.初始化定位
        mLocationClient = new AMapLocationClient(this);
        //2.设置定位回调监听
        mLocationClient.setLocationListener(this);


        //2....2给定位客户端对象设置定位参数
        AMapLocationClientOption mLocationOption = new AMapLocationClientOption();

        //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

        //获取一次定位结果:
        mLocationOption.setOnceLocation(true);
        //获取最近3s内精度最高的一次定位结果:
        mLocationOption.setOnceLocationLatest(true);

        mLocationClient.setLocationOption(mLocationOption);
        //3.启动定位
        mLocationClient.startLocation();


    }
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        //获取定位的结果
        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append("经纬度:"+amapLocation.getLatitude()+"--"+amapLocation.getLongitude());
        stringBuilder.append("地址:"+amapLocation.getAddress()+"--");
        stringBuilder.append("地址:"+amapLocation.getCountry()+"--");
        stringBuilder.append("地址:"+amapLocation.getProvince()+"--");
        stringBuilder.append("地址:"+amapLocation.getCity()+"--");
        stringBuilder.append("地址:"+amapLocation.getDistrict()+"--");
        stringBuilder.append("地址:"+amapLocation.getStreet()+"--");
        stringBuilder.append("地址:"+amapLocation.getStreetNum()+"--");

        textView.setText(stringBuilder.toString());

    }


}
LocateActivity布局:
<android.support.constraint.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="com.example.dell.gaodeditu_dome.LocateActivity">
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>
依赖:
//3D地图so及jar
compile 'com.amap.api:3dmap:latest.integration'
//定位功能
compile 'com.amap.api:location:latest.integration'
//搜索功能
compile 'com.amap.api:search:latest.integration'

ndk {
    //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
    abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","arm64-v8a","x86_64"
}


权限:
//地图包、搜索包需要的基础权限

<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />



<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>

<!--配置高德地图的key-->
<meta-data
    android:name="com.amap.api.v2.apikey"
    android:value="b819f5564a8efb829be58b81a3e44905"/>



AMapLocationListener 高德地图定位监听 AMapLocationListener 高德地图定位监听 app内很多地方需要用到定位信息,我就自己封装了一个基于高德地图定位监听的类,以便于获取定位权限,和方便调用定位监听事件。我这边继承了LifecycleObserver,将定位事件和acticity的生命周期绑定在了一起,这样的话即便一开始定位没开或者获取定位失败了,还能在后面继续获取定位信息。 AMapLocationListener package cn.sunsapp.owner.util; import android.content. 阅读详情

相关推荐

高德地图爬虫

高德地图爬虫 工具:Pycharm,win10,Python3.6.4 1.需求分析 这篇爬虫和上一篇百度地图爬虫要求一样,百度地图爬虫我发现有一个auth参数会一直变化,一旦变化则获取的数据是不准确的,所以我上高德地图看了一下,高德地图没有这个反爬机制。但是高德地图大概爬取120个页面就会跳一次验证码,我这里是通过换IP解决这个问题的。 2.数据准备 同样我们需要全国地级市信息,用之前...

123的博客 1万+

高德使用

工具 AndroidStudio 手势交互 缩放 // 缩放级别(3-19) aMap.moveCamera(CameraUpdateFactory.zoomTo(18)); // 缩放按钮(默开) uiSettings.setZoomControlsEnabled(false); 设缩放级别且开缩放按钮,可放大直至最大级但不可基于所设级别缩小;不设缩放级别缩放正常。缩放级别

snpmyn 909

Openlayers之加载高德地图

1、高德地图瓦片URL构成 我们打开高德地图,然后按下F12键查看其网络资源,结果很不巧,高德改变了使用XYZ瓦片加载的方式,不过没关系,我们切换到卫星图,可以看到卫星图的底图仍是瓦片,不过没有任何标注信息,这个可以更改URL中的style的值,最终我们可以得到其通用瓦片URL:http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&siz

SmileCoffin的博客 2万+

使用高德地图api,默认定位当前人位置

1 /** 2 * 设置一些amap的属性 3 */ 4 private void setUpMap() { 5 6 // 如果要设置定位的默认状态,可以在此处进行设置 7 myLocationStyle = new MyLocationStyle(); 8 // aMap.setMyLocat...

SharkArmy 325

Android截取高德地图

项目中用到了截取高德地图分享,高德地图截取的时候发现第三方截图截取的地图是空白的,必须使用高德自带的截图方法,这里写了一个工具类,可以直接使用,用来截取高德地图 public class ScreenShotHelper { /** * 组装地图截图和其他View截图,并且将截图存储在本地sdcard,需要注意的是目前提供的方法限定为MapView与其他View在同一个Vie...

夏沫的博客 2471

高德地图轨迹回放功能

一、介绍 在项目过程中,需要对自己设备产品输出的定位信息进行验证。通过路跑测试获取到了一组经纬度数据。这时需要验证这组数据是否是实际路跑测试的轨迹,就用到了高德地图的轨迹回放功能。下面将详细讲述如何使用高德地图轨迹回放,在使用该功能之前需要先做坐标系转换,因为设备用的中科微GPS模组输出的经纬度格式是属于WGS-84坐标系的,使用高德地图需要转换为GCJ02坐标系。 二、坐标系 WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84...

RealHero的博客 7625

android高德地图 基于Map3D,Location自动定位拖拽选址,拖动改变位置

有时候获取定位选点,遇到角落位置的时候,总是有点偏差,于是自己选择地址定位,这样获取的经纬度就比较精确了。 此自动定位拖拽选址是基于高地地图的 AMap_Location_V4.5.1_20190402.jar,Android_Map3D_SDK_V6.8.0_20190401.jar 首先自己配置地图环境,Android Studio 配置工程:https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-creat

Jafer的博客 2672

Leaflet 加载高德地图

高德地图是一款由高德软件提供的数字地图服务,在国内使用较为广泛。高德地图提供了丰富的地图数据和 API 接口,支持 Web、移动端等多种平台。本文中,我们将高德地图的wms服务加入leaflet地图对象,并构建点击事件输出高德坐标和WGS-84坐标; 在这个例子中,我们使用了高德地图的 WMS 服务,通过 方法创建了一个瓦片图层,并将其添加到地图容器中。

极限突破者的博客 1万+

Android项目导入高德地图

文章目录前言一、Android地图SDK简介二、调用API步骤1.获取SHA1安全码1.1 获取调试版SHA1安全码1.2 获取发布版SHA1安全码2.获取包名3.获得Key总结 前言   虽然高德地图用起来没有百度地图那么丝滑,但是兼容还是挺好的,我的手机调试百度地图的api时总是报错,后来改成了高德地图,虽然高德地图初始的布局没有百度的好看,下载时官方文档也没有百度地图的详细,但是还是挺好用的。   我的项目使用只需要使用到高德地图的

weixin_43977664的博客 4022

深入探究高德地图官方Demo

高德地图,作为中国领先的电子地图、导航和LBS服务提供商,为开发者提供了功能丰富的地图服务。通过其官方Demo,我们可以探索高德地图提供的各种API接口,从而理解和应用这些功能。官方Demo是学习和实践的最佳入口,它不仅展现了高德地图的各项能力,还为用户提供了直接操作这些功能的机会。

weixin_36289742的博客 836

GEO数据库数据下载方法总结

#GEO数据下载 GEO是生信分析经常用到的数据库。经常需要从中获取表达矩阵,平台信息,meta信息等,本博文总结了几种下载GEO数据的方法,各有优劣,实际应用过程中自行选择适合自己的。 ##方法一:直接从浏览器中下载 以数据集GSE1001为例, 可以直接点击“Series Matrix Files”获取该样本txt格式的表达谱数据,一般我们认为这种处理过的表达谱数据是没有问题的,当然,具体情况具体分析。 打开下载的文件可以看到许多“#”开头的行,这些是注释信息,一般关注这些注释信息中的“data pr

sakoko_的博客 4万+

uniapp使用高德地图

uniapp高德地图使用,单点和路线规划。

qwe_aaaaa的博客 1万+

中国城市统计年鉴1991-2024面板数据真正无缺失值填补指标说明

大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。

yushibing717的博客 928

如何实现通过context的startAbility方法打开高德地图进行导航,以及获取高德地图的key

获取高德地图的key值,鸿蒙原生地图获取路径传递给高德地图

Qsny999的博客 1407

hive sql每个用户的累积访问次数

我们有如下的用户访问数据 userId visitDate visitCount u01 2017/1/21 5 u02 2017/1/23 6 u03 2017/1/22 8 u04 2017/1/20 3 u01 2017/1/23 6 u01 2017/2/21 8 U02 2017/1/23 6 U01 2017/2/22 4 要求使用SQL...

weixin_39150719的博客 3481

深入解析线性反馈移位寄存器(LFSR)的工作原理与实现

本文深入解析了线性反馈移位寄存器(LFSR)的核心原理与实现方法。通过生动的比喻和详细的步骤拆解,阐述了LFSR如何通过反馈多项式和移位操作生成伪随机序列,并对比了斐波那契型与伽罗瓦型两种硬件结构。文章还涵盖了LFSR在数字电路测试、通信扰码及快速伪随机数生成等关键应用场景,同时指出了其在密码学中的局限性,并提供了Python和C语言的高效实现代码示例。

weixin_29007243的博客 544

ThingsBoard添加高德地图

文章目录资料说明接入高德地图定义高德地图ts地图提供集合中加入高德地图添加高德地图个性化设置绑定高德地图到地图部件包效果演示 文章以高德地图作为例子,但不限于高德地图,同样的方式百度地图,智图地图等都可以接入 资料 leafletjs文档 说明 ThingsBoard使用leaflet加载地图,而且大部分地图相关的方法都封装在 ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts 如:添加标记 设置经纬度 删除标记

物联网三分钟 4万+

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

独创改进🚀! | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

Coding... 2211

对接高德地图的总结

对接高德地图API的总结近期项目中需要对接高德地图做图形(画一个区域范围),所以把用的对接知识总结一下,先看个简单的效果图: 当然多看点别人的也不错,别人家的demo, 酸奶小妹目录用 [TOC]来生成目录: [TOC] 引用JS(高德地图WEB端JSApi) 开始渲染地图 几个常见的工具 事件监听 有用的参数 离线写博客 更多 引用JS(高德地图WEB端JSApi)引入高德地图的js高德地图J

SchopenhauerZhang的博客 1万+

【短距离通信】【WiFi】精讲WiFi 6E协议!图解超赞超详细!!!

802.11ax(HE,HighEfficiency) (Wi-Fi 6E):6G频段共有1200MHz的频谱给到WiFi 6E使用,可用于从5.925GHz到7.125GHz。WiFi将可以访问59个20MHz信道,29个40MHz信道14个80MHz信道和7个160MHz信道。这不仅代表可以有很多频道,还可以代表可以解锁更高的数据速率。因为 802.11ax 标准(Wi-Fi 6)也在 2.4GHz 和 5GHz 频段运行,所以 6GHz 频段的 Wi-Fi 将被命名为 Wi-Fi 6E。

风云说通信 2343

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

全网最详细的YOLOv5源码解读之配置文件yaml。逐行注释,逐句讲解,一文带你了解yaml。小白必看!

路人贾的博客 1万+

html高德地图的使用方法,高德地图的使用方法

一、先学会看地图1、高德地图4个常用模块第一次打开高德地图,提示要我们打开【GPS】(全球定位系统),可以选择【跳过】,GPS打开比较费电,事实上我们在WIFI或者数据流量下也可以定位,只是没有GPS精确而已。在使用地图中如果需要打开GPS(比如开车导航时),再去打开也来得及。我们进入地图,会用到图示中【搜索】、【路线】、【附近】和【我的】四个功能模块。【搜索】里面输入想查的地点,就能迅速在地图上...

weixin_39580950的博客 2990

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

高德地图瓦片分析参考

http://wprd02.is.autonavi.com/appmaptile?x=53597&y=26167&z=16&lang=zh_cn&size=1&scl=1&style=7 ​ 高德地图瓦片分析参考:https://www.jianshu.com/p/e34ffc51ee66?tdsourcetag=s_pcqq_aiomsg 目前通过高德地图官方网站的影像切换,可以看到高德的瓦片地址有如下两种: http://wprd0{..

cwfgqh的专栏 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

高德地图url简介

图源是做了偏移的,如果需要叠加WGS84坐标系的国外图源(如google影像等)会出现偏移。如果叠加的是国内的加偏的底图或者调用高德相关API则可以正常使用。这些规律并不是绝对的,有可能有的组合某些参数不起作用,典型的组合应用场景在后面列出。

qq_43630714的博客 3952

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: ImagineLorder
heheyihehe
博客等级 码龄9年 5粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值