Android高德地图之路径规划

首先在

                       

                  注册一个appke 

    

    在AndroidManifest里面加上权限:

        

<!--允许程序打开网络套接字-->
<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" />


在<application

</application>
里面加上
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="key">
//开发者申请的key
</meta-data>

例如:<application
    android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="key">
//开发者申请的key
</meta-data>
</application>


在app的 build.gradle 里面添加依赖:
        
compile 'com.amap.api:3dmap:latest.integration'//高德地图——3D地图so及包
compile 'com.amap.api:location:latest.integration' // 高德地图 定位功能
compile 'com.amap.api:search:latest.integration' //高德地图 搜索功能
 
 
在java源代码里面添加两个包
 
 

  

在drawable中mipmap-xxhdpi和添加路径规划所需要的图片

 

 

在搜索页面:

 

package com.example.im.android_map2;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
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;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

@InjectView(R.id.start)
EditText mStart;
@InjectView(R.id.end)
EditText mEnd;
@InjectView(R.id.enter)
Button enter;


//开始位置和结束位置的字符串
private String start, end;
//查询你自己输入的路径的
private GeocodeSearch searchStart;
private GeocodeSearch searchEnd;
//这两个类是用来得到经纬度
private LatLonPoint latLonPointStart;
private LatLonPoint latLonPointEnd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
searchStart = new GeocodeSearch(this);
searchEnd = new GeocodeSearch(this);
}

@OnClick(R.id.enter)
public void onViewClicked() {
start = mStart.getText().toString();
end = mEnd.getText().toString();
if (start.isEmpty() || end.isEmpty()) {
Toast.makeText(this, "请输入地址", Toast.LENGTH_SHORT).show();
} else {
initStart();
}
}

private void initStart() {
GeocodeQuery query = new GeocodeQuery(start, "");
//查询你输入的字符串
searchStart.getFromLocationNameAsyn(query);
searchStart.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

}

@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
GeocodeAddress addr = geocodeResult.getGeocodeAddressList().get(0);
latLonPointStart = addr.getLatLonPoint();
Log.e("start", latLonPointStart.toString());
initEnd();
}
});
}

private void initEnd() {
GeocodeQuery query1 = new GeocodeQuery(end, "");
searchEnd.getFromLocationNameAsyn(query1);
searchEnd.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

}

@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
GeocodeAddress addr = geocodeResult.getGeocodeAddressList().get(0);
latLonPointEnd = addr.getLatLonPoint();
Log.e("end", latLonPointEnd.toString());

if (latLonPointEnd == null || latLonPointStart == null) {
Toast.makeText(MainActivity.this, "正在异步处理", Toast.LENGTH_SHORT).show();
} else {
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
Bundle bundle = new Bundle();
//序列化的第二种方式
bundle.putParcelable("start", latLonPointStart);
bundle.putParcelable("end", latLonPointEnd);
intent.putExtras(bundle);
startActivity(intent);
}
}
});


}
}

 

 

 

在地图页面:

 

package com.example.im.android_map2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

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.im.android_map2.overlay.DrivingRouteOverlay;

import butterknife.ButterKnife;
import butterknife.InjectView;

public class HomeActivity extends AppCompatActivity implements RouteSearch.OnRouteSearchListener {
@InjectView(R.id.map)
MapView map;
private LatLonPoint start;
private LatLonPoint end;
private AMap aMap;
private RouteSearch routeSearch;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.inject(this);
map.onCreate(savedInstanceState);
if (aMap == null) {
aMap = map.getMap();
}
start = getIntent().getExtras().getParcelable("start");
end = getIntent().getExtras().getParcelable("end");
Log.e("homeActivity开始", start.toString());
Log.e("homeActivity结束", end.toString());
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(start, end);
// fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault, null, null, "");
routeSearch.calculateDriveRouteAsyn(query);// 异步路径规划驾车模式查询
}

@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 driveRouteResult, int i) {
//自驾查询结果
aMap.clear();// 清理地图上的所有覆盖物

final DrivePath drivePath = driveRouteResult.getPaths()
.get(0);
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
HomeActivity.this, aMap, drivePath,
driveRouteResult.getStartPos(),
driveRouteResult.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) {

}
}

 

 

 

 

private SharedPreferences preferences;
private SharedPreferences.Editor edit;

 
 

preferences = MainActivity.this.getSharedPreferences("user", MODE_PRIVATE);
edit = preferences.edit();
boolean isTrue = preferences.getBoolean("isTrue", false);
if (isTrue) {
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
finish();
}

 

edit.putBoolean("isTrue", true);
edit.commit();
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
finish();

    

      

转载于:https://www.cnblogs.com/androidx/p/8029732.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值