地图

本文介绍了一个使用高德地图API实现路径规划的应用案例。该应用通过获取用户输入的起始点和目的地信息,利用高德地图的地理编码服务获取经纬度坐标,进而调用路线规划服务来获取驾车路线并展示在地图上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.mygaodeditu;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.geocoder.GeocodeAddress;
import com.amap.api.services.geocoder.GeocodeQuery;
import com.amap.api.services.geocoder.GeocodeResult;
import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.RegeocodeResult;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText Edit_start;
    private EditText Edit_End;
    private Button start_But;
    private String mStartPlace;
    private String mEndPlace;
    private GeocodeSearch mStart;
    private GeocodeSearch mEnd;
    //坐标点
    private LatLonPoint mStratLat;
    private LatLonPoint mEndLat;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        mStart = new GeocodeSearch(MainActivity.this);
        mEnd = new GeocodeSearch(MainActivity.this);
    }

    private void initView() {
        Edit_start = (EditText) findViewById(R.id.Edit_start);
        Edit_End = (EditText) findViewById(R.id.Edit_End);
        start_But = (Button) findViewById(R.id.start_But);

        start_But.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.start_But:
                mStartPlace = Edit_start.getText().toString().trim();
                mEndPlace = Edit_End.getText().toString().trim();
                if (mStartPlace.isEmpty() || mEndPlace.isEmpty()) {
                    Toast.makeText(this, "参数不能为空", Toast.LENGTH_SHORT).show();
                } else {
                    initStart();
                }
                break;
        }
    }

    private void initStart() {
        GeocodeQuery query = new GeocodeQuery(mStartPlace, null);
        mStart.getFromLocationNameAsyn(query);
        mStart.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
            @Override
            public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

            }

            @Override
            public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
                GeocodeAddress address = geocodeResult.getGeocodeAddressList().get(0);
                mStratLat = address.getLatLonPoint();
                Log.e("看看开始经纬度", "经度是:" + mStratLat.getLongitude() + ",纬度是:" + mStratLat.getLatitude());
                initEnd();
            }
        });
    }

    private void initEnd() {
        GeocodeQuery query = new GeocodeQuery(mEndPlace, null);
        mEnd.getFromLocationNameAsyn(query);
        mEnd.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
            @Override
            public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

            }

            @Override
            public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
                GeocodeAddress address = geocodeResult.getGeocodeAddressList().get(0);
                mEndLat = address.getLatLonPoint();
                Log.e("看看结尾经纬度", "经度是:" + mEndLat.getLongitude() + ",纬度是:" + mEndLat.getLatitude());
                Intent intent = new Intent(MainActivity.this, AtlasActivity.class);
                intent.putExtra("start", mStratLat);
                intent.putExtra("end", mEndLat);
                startActivity(intent);
            }
        });
    }
}


package com.example.mygaodeditu;

import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusRouteResult;
import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.RideRouteResult;
import com.amap.api.services.route.RouteSearch;
import com.amap.api.services.route.WalkRouteResult;
import com.example.mygaodeditu.overlay.DrivingRouteOverlay;

public class AtlasActivity extends AppCompatActivity implements RouteSearch.OnRouteSearchListener {

    private MapView map;
    private AMap mapMap;
    private LatLonPoint mStart;
    private LatLonPoint mEnd;

    private RouteSearch routeSearch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_atlas);
        map = (MapView) findViewById(R.id.map);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        map.onCreate(savedInstanceState);
        if (mapMap == null) {
            mapMap = map.getMap();
        }

        mStart = getIntent().getParcelableExtra("start");
        mEnd = getIntent().getParcelableExtra("end");

        routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        //这个是死值 开始是马池口
        //RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.16502000000), new LatLonPoint(39.9111400000, 116.4113500000));
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStart,mEnd);
        // fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
        // 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
        RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault, null, null, "");
        routeSearch.calculateDriveRouteAsyn(query);// 异步路径规划驾车模式查询
//        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(),销毁地图
        map.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        map.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        map.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        map.onSaveInstanceState(outState);
    }


    @Override
    public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {

    }

    @Override
    public void onDriveRouteSearched(DriveRouteResult result, int i) {
        //自驾查询结果
        mapMap.clear();// 清理地图上的所有覆盖物

        final DrivePath drivePath = result.getPaths()
                .get(0);
        DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
                AtlasActivity.this, mapMap, drivePath,
                result.getStartPos(),
                result.getTargetPos(), null);
        drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
        drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
        drivingRouteOverlay.removeFromMap();
        drivingRouteOverlay.addToMap();
        drivingRouteOverlay.zoomToSpan();

    }

    @Override
    public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {

    }

    @Override
    public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值