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();

    

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM