高德地图——路线规划
添加权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
添加Key
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="cb6b5956ba18c602e4b8b51c1fee943d" />
<--------------------------------------------------------------第一个类-------------------------------------------------------------->
package com.amap.map3d.demo.route;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMap.InfoWindowAdapter;
import com.amap.api.maps.AMap.OnInfoWindowClickListener;
import com.amap.api.maps.AMap.OnMapClickListener;
import com.amap.api.maps.AMap.OnMarkerClickListener;
import com.amap.api.maps.MapView;
import com.amap.api.maps.MapsInitializer;
import com.amap.api.maps.model.BitmapDescriptorFactory;
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.overlay.BusRouteOverlay;
import com.amap.api.maps.overlay.DrivingRouteOverlay;
import com.amap.api.maps.overlay.WalkRouteOverlay;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiItemDetail;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener;
import com.amap.api.services.route.BusPath;
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.RouteSearch;
import com.amap.api.services.route.RouteSearch.BusRouteQuery;
import com.amap.api.services.route.RouteSearch.DriveRouteQuery;
import com.amap.api.services.route.RouteSearch.OnRouteSearchListener;
import com.amap.api.services.route.RouteSearch.WalkRouteQuery;
import com.amap.api.services.route.WalkPath;
import com.amap.api.services.route.WalkRouteResult;
import com.amap.map3d.demo.route.RouteSearchPoiDialog.OnListItemClick;
import com.amap.map3d.demo.util.AMapUtil;
import com.amap.map3d.demo.util.OffLineMapUtils;
import com.amap.map3d.demo.util.ToastUtil;
import com.example.map_demo02.R;
/**
* AMapV2地图中简单介绍route搜索
*/
public class RouteActivity extends Activity implements OnMarkerClickListener,
OnMapClickListener, OnInfoWindowClickListener, InfoWindowAdapter,
OnPoiSearchListener, OnRouteSearchListener, OnClickListener {
private AMap aMap;
private MapView mapView;
private Button drivingButton;
private Button busButton;
private Button walkButton;
private ImageButton startImageButton;
private ImageButton endImageButton;
private ImageButton routeSearchImagebtn;
private EditText startTextView;
private EditText endTextView;
private ProgressDialog progDialog = null;// 搜索时进度条
private int busMode = RouteSearch.BusDefault;// 公交默认模式
private int drivingMode = RouteSearch.DrivingDefault;// 驾车默认模式
private int walkMode = RouteSearch.WalkDefault;// 步行默认模式
private BusRouteResult busRouteResult;// 公交模式查询结果
private DriveRouteResult driveRouteResult;// 驾车模式查询结果
private WalkRouteResult walkRouteResult;// 步行模式查询结果
private int routeType = 1;// 1代表公交模式,2代表驾车模式,3代表步行模式
private String strStart;
private String strEnd;
private LatLonPoint startPoint = null;
private LatLonPoint endPoint = null;
private PoiSearch.Query startSearchQuery;
private PoiSearch.Query endSearchQuery;
private boolean isClickStart = false;
private boolean isClickTarget = false;
private Marker startMk, targetMk;
private RouteSearch routeSearch;
public ArrayAdapter<String> aAdapter;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.route_activity);
/*
* 设置离线地图存储目录,在下载离线地图或初始化地图设置;
* 使用过程中可自行设置, 若自行设置了离线地图存储的路径,
* 则需要在离线地图下载和使用地图页面都进行路径设置
* */
//Demo中为了其他界面可以使用下载的离线地图,使用默认位置存储,屏蔽了自定义设置
MapsInitializer.sdcardDir =OffLineMapUtils.getSdCacheDir(this);
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(bundle);// 此方法必须重写
init();
}
/**
* 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
registerListener();
}
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
startTextView = (EditText) findViewById(R.id.autotextview_roadsearch_start);
endTextView = (EditText) findViewById(R.id.autotextview_roadsearch_goals);
busButton = (Button) findViewById(R.id.imagebtn_roadsearch_tab_transit);
busButton.setOnClickListener(this);
drivingButton = (Button) findViewById(R.id.imagebtn_roadsearch_tab_driving);
drivingButton.setOnClickListener(this);
walkButton = (Button) findViewById(R.id.imagebtn_roadsearch_tab_walk);
walkButton.setOnClickListener(this);
startImageButton = (ImageButton) findViewById(R.id.imagebtn_roadsearch_startoption);
startImageButton.setOnClickListener(this);
endImageButton = (ImageButton) findViewById(R.id.imagebtn_roadsearch_endoption);
endImageButton.setOnClickListener(this);
routeSearchImagebtn = (ImageButton) findViewById(R.id.imagebtn_roadsearch_search);
routeSearchImagebtn.setOnClickListener(this);
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
/**
* 选择公交模式
*/
private void busRoute() {
routeType = 1;// 标识为公交模式
busMode = RouteSearch.BusDefault;
drivingButton.setBackgroundResource(R.drawable.mode_driving_off);
busButton.setBackgroundResource(R.drawable.mode_transit_on);
walkButton.setBackgroundResource(R.drawable.mode_walk_off);
}
/**
* 选择驾车模式
*/
private void drivingRoute() {
routeType = 2;// 标识为驾车模式
drivingButton.setBackgroundResource(R.drawable.mode_driving_on);
busButton.setBackgroundResource(R.drawable.mode_transit_off);
walkButton.setBackgroundResource(R.drawable.mode_walk_off);
}
/**
* 选择步行模式
*/
private void walkRoute() {
routeType = 3;// 标识为步行模式
walkMode = RouteSearch.WalkMultipath;
drivingButton.setBackgroundResource(R.drawable.mode_driving_off);
busButton.setBackgroundResource(R.drawable.mode_transit_off);
walkButton.setBackgroundResource(R.drawable.mode_walk_on);
}
/**
* 在地图上选取起点
*/
private void startImagePoint() {
ToastUtil.show(RouteActivity.this, "在地图上点击您的起点");
isClickStart = true;
isClickTarget = false;
registerListener();
}
/**
* 在地图上选取终点
*/
private void endImagePoint() {
ToastUtil.show(RouteActivity.this, "在地图上点击您的终点");
isClickTarget = true;
isClickStart = false;
registerListener();
}
/**
* 点击搜索按钮开始Route搜索
*/
public void searchRoute() {
strStart = startTextView.getText().toString().trim();
strEnd = endTextView.getText().toString().trim();
if (strStart == null || strStart.length() == 0) {
ToastUtil.show(RouteActivity.this, "请选择起点");
return;
}
if (strEnd == null || strEnd.length() == 0) {
ToastUtil.show(RouteActivity.this, "请选择终点");
return;
}
if (strStart.equals(strEnd)) {
ToastUtil.show(RouteActivity.this, "起点与终点距离很近,您可以步行前往");
return;
}
startSearchResult();// 开始搜终点
}
@Override
public void onInfoWindowClick(Marker marker) {
isClickStart = false;
isClickTarget = false;
if (marker.equals(startMk)) {
startTextView.setText("地图上的起点");
startPoint = AMapUtil.convertToLatLonPoint(startMk.getPosition());
startMk.hideInfoWindow();
startMk.remove();
} else if (marker.equals(targetMk)) {
endTextView.setText("地图上的终点");
endPoint = AMapUtil.convertToLatLonPoint(targetMk.getPosition());
targetMk.hideInfoWindow();
targetMk.remove();
}
}
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.isInfoWindowShown()) {
marker.hideInfoWindow();
} else {
marker.showInfoWindow();
}
return false;
}
@Override
public void onMapClick(LatLng latng) {
if (isClickStart) {
startMk = aMap.addMarker(new MarkerOptions()
.anchor(0.5f, 1)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.point)).position(latng)
.title("点击选择为起点"));
startMk.showInfoWindow();
} else if (isClickTarget) {
targetMk = aMap.addMarker(new MarkerOptions()
.anchor(0.5f, 1)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.point)).position(latng)
.title("点击选择为目的地"));
targetMk.showInfoWindow();
}
}
@Override
public View getInfoContents(Marker marker) {
return null;
}
@Override
public View getInfoWindow(Marker marker) {
return null;
}
/**
* 注册监听
*/
private void registerListener() {
aMap.setOnMapClickListener(RouteActivity.this);
aMap.setOnMarkerClickListener(RouteActivity.this);
aMap.setOnInfoWindowClickListener(RouteActivity.this);
aMap.setInfoWindowAdapter(RouteActivity.this);
}
/**
* 显示进度框
*/
private void showProgressDialog() {
if (progDialog == null)
progDialog = new ProgressDialog(this);
progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progDialog.setIndeterminate(false);
progDialog.setCancelable(true);
progDialog.setMessage("正在搜索");
progDialog.show();
}
/**
* 隐藏进度框
*/
private void dissmissProgressDialog() {
if (progDialog != null) {
progDialog.dismiss();
}
}
/**
* 查询路径规划起点
*/
public void startSearchResult() {
strStart = startTextView.getText().toString().trim();
if (startPoint != null && strStart.equals("地图上的起点")) {
endSearchResult();
} else {
showProgressDialog();
startSearchQuery = new PoiSearch.Query(strStart, "", "010"); // 第一个参数表示查询关键字,第二参数表示poi搜索类型,第三个参数表示城市区号或者城市名
startSearchQuery.setPageNum(0);// 设置查询第几页,第一页从0开始
startSearchQuery.setPageSize(20);// 设置每页返回多少条数据
PoiSearch poiSearch = new PoiSearch(RouteActivity.this,
startSearchQuery);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();// 异步poi查询
}
}
/**
* 查询路径规划终点
*/
public void endSearchResult() {
strEnd = endTextView.getText().toString().trim();
if (endPoint != null && strEnd.equals("地图上的终点")) {
searchRouteResult(startPoint, endPoint);
} else {
showProgressDialog();
endSearchQuery = new PoiSearch.Query(strEnd, "", "010"); // 第一个参数表示查询关键字,第二参数表示poi搜索类型,第三个参数表示城市区号或者城市名
endSearchQuery.setPageNum(0);// 设置查询第几页,第一页从0开始
endSearchQuery.setPageSize(20);// 设置每页返回多少条数据
PoiSearch poiSearch = new PoiSearch(RouteActivity.this,
endSearchQuery);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn(); // 异步poi查询
}
}
/**
* 开始搜索路径规划方案
*/
public void searchRouteResult(LatLonPoint startPoint, LatLonPoint endPoint) {
showProgressDialog();
final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(
startPoint, endPoint);
if (routeType == 1) {// 公交路径规划
BusRouteQuery query = new BusRouteQuery(fromAndTo, busMode, "北京", 0);// 第一个参数表示路径规划的起点和终点,第二个参数表示公交查询模式,第三个参数表示公交查询城市区号,第四个参数表示是否计算夜班车,0表示不计算
routeSearch.calculateBusRouteAsyn(query);// 异步路径规划公交模式查询
} else if (routeType == 2) {// 驾车路径规划
DriveRouteQuery query = new DriveRouteQuery(fromAndTo, drivingMode,
null, null, "");// 第一个参数表示路径规划的起点和终点,第二个参数表示驾车模式,第三个参数表示途经点,第四个参数表示避让区域,第五个参数表示避让道路
routeSearch.calculateDriveRouteAsyn(query);// 异步路径规划驾车模式查询
} else if (routeType == 3) {// 步行路径规划
WalkRouteQuery query = new WalkRouteQuery(fromAndTo, walkMode);
routeSearch.calculateWalkRouteAsyn(query);// 异步路径规划步行模式查询
}
}
@Override
public void onPoiItemDetailSearched(PoiItemDetail arg0, int arg1) {
}
/**
* POI搜索结果回调
*/
@Override
public void onPoiSearched(PoiResult result, int rCode) {
dissmissProgressDialog();
if (rCode == 0) {// 返回成功
if (result != null && result.getQuery() != null
&& result.getPois() != null && result.getPois().size() > 0) {// 搜索poi的结果
if (result.getQuery().equals(startSearchQuery)) {
List<PoiItem> poiItems = result.getPois();// 取得poiitem数据
RouteSearchPoiDialog dialog = new RouteSearchPoiDialog(
RouteActivity.this, poiItems);
dialog.setTitle("您要找的起点是:");
dialog.show();
dialog.setOnListClickListener(new OnListItemClick() {
@Override
public void onListItemClick(
RouteSearchPoiDialog dialog,
PoiItem startpoiItem) {
startPoint = startpoiItem.getLatLonPoint();
strStart = startpoiItem.getTitle();
startTextView.setText(strStart);
endSearchResult();// 开始搜终点
}
});
} else if (result.getQuery().equals(endSearchQuery)) {
List<PoiItem> poiItems = result.getPois();// 取得poiitem数据
RouteSearchPoiDialog dialog = new RouteSearchPoiDialog(
RouteActivity.this, poiItems);
dialog.setTitle("您要找的终点是:");
dialog.show();
dialog.setOnListClickListener(new OnListItemClick() {
@Override
public void onListItemClick(
RouteSearchPoiDialog dialog, PoiItem endpoiItem) {
endPoint = endpoiItem.getLatLonPoint();
strEnd = endpoiItem.getTitle();
endTextView.setText(strEnd);
searchRouteResult(startPoint, endPoint);// 进行路径规划搜索
}
});
}
} else {
ToastUtil.show(RouteActivity.this, R.string.no_result);
}
} else if (rCode == 27) {
ToastUtil.show(RouteActivity.this, R.string.error_network);
} else if (rCode == 32) {
ToastUtil.show(RouteActivity.this, R.string.error_key);
} else {
ToastUtil.show(RouteActivity.this, getString(R.string.error_other)
+ rCode);
}
}
/**
* 公交路线查询回调
*/
@Override
public void onBusRouteSearched(BusRouteResult result, int rCode) {
dissmissProgressDialog();
if (rCode == 0) {
if (result != null && result.getPaths() != null
&& result.getPaths().size() > 0) {
busRouteResult = result;
BusPath busPath = busRouteResult.getPaths().get(0);
aMap.clear();// 清理地图上的所有覆盖物
BusRouteOverlay routeOverlay = new BusRouteOverlay(this, aMap,
busPath, busRouteResult.getStartPos(),
busRouteResult.getTargetPos());
routeOverlay.removeFromMap();
routeOverlay.addToMap();
routeOverlay.zoomToSpan();
} else {
ToastUtil.show(RouteActivity.this, R.string.no_result);
}
} else if (rCode == 27) {
ToastUtil.show(RouteActivity.this, R.string.error_network);
} else if (rCode == 32) {
ToastUtil.show(RouteActivity.this, R.string.error_key);
} else {
ToastUtil.show(RouteActivity.this, getString(R.string.error_other)
+ rCode);
}
}
/**
* 驾车结果回调
*/
@Override
public void onDriveRouteSearched(DriveRouteResult result, int rCode) {
dissmissProgressDialog();
if (rCode == 0) {
if (result != null && result.getPaths() != null
&& result.getPaths().size() > 0) {
driveRouteResult = result;
DrivePath drivePath = driveRouteResult.getPaths().get(0);
aMap.clear();// 清理地图上的所有覆盖物
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
this, aMap, drivePath, driveRouteResult.getStartPos(),
driveRouteResult.getTargetPos());
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
} else {
ToastUtil.show(RouteActivity.this, R.string.no_result);
}
} else if (rCode == 27) {
ToastUtil.show(RouteActivity.this, R.string.error_network);
} else if (rCode == 32) {
ToastUtil.show(RouteActivity.this, R.string.error_key);
} else {
ToastUtil.show(RouteActivity.this, getString(R.string.error_other)
+ rCode);
}
}
/**
* 步行路线结果回调
*/
@Override
public void onWalkRouteSearched(WalkRouteResult result, int rCode) {
dissmissProgressDialog();
if (rCode == 0) {
if (result != null && result.getPaths() != null
&& result.getPaths().size() > 0) {
walkRouteResult = result;
WalkPath walkPath = walkRouteResult.getPaths().get(0);
aMap.clear();// 清理地图上的所有覆盖物
WalkRouteOverlay walkRouteOverlay = new WalkRouteOverlay(this,
aMap, walkPath, walkRouteResult.getStartPos(),
walkRouteResult.getTargetPos());
walkRouteOverlay.removeFromMap();
walkRouteOverlay.addToMap();
walkRouteOverlay.zoomToSpan();
} else {
ToastUtil.show(RouteActivity.this, R.string.no_result);
}
} else if (rCode == 27) {
ToastUtil.show(RouteActivity.this, R.string.error_network);
} else if (rCode == 32) {
ToastUtil.show(RouteActivity.this, R.string.error_key);
} else {
ToastUtil.show(RouteActivity.this, getString(R.string.error_other)
+ rCode);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imagebtn_roadsearch_startoption:
startImagePoint();
break;
case R.id.imagebtn_roadsearch_endoption:
endImagePoint();
break;
case R.id.imagebtn_roadsearch_tab_transit:
busRoute();
break;
case R.id.imagebtn_roadsearch_tab_driving:
drivingRoute();
break;
case R.id.imagebtn_roadsearch_tab_walk:
walkRoute();
break;
case R.id.imagebtn_roadsearch_search:
searchRoute();
break;
default:
break;
}
}
}
<--------------------------------------------------------------第二个类-------------------------------------------------------------->
package com.amap.map3d.demo.route;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.amap.api.services.core.PoiItem;
import com.example.map_demo02.R;
public class RouteSearchAdapter extends BaseAdapter {
private Context context;
private List<PoiItem> poiItems = null;
private LayoutInflater mInflater;
public RouteSearchAdapter(Context context, List<PoiItem> poiItems) {
this.context = context;
this.poiItems = poiItems;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return poiItems.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.poi_result_list, null);
}
TextView PoiName = ((TextView) convertView.findViewById(R.id.poiName));
TextView poiAddress = (TextView) convertView
.findViewById(R.id.poiAddress);
PoiName.setText(poiItems.get(position).getTitle());
String address = null;
if (poiItems.get(position).getSnippet() != null) {
address = poiItems.get(position).getSnippet();
} else {
address = "中国";
}
poiAddress.setText("地址:" + address);
return convertView;
}
}
<--------------------------------------------------------------第三个类-------------------------------------------------------------->
package com.amap.map3d.demo.route;
import java.util.List;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
import com.amap.api.services.core.PoiItem;
import com.example.map_demo02.R;
public class RouteSearchPoiDialog extends Dialog implements
OnItemClickListener, OnItemSelectedListener {
private List<PoiItem> poiItems;
private Context context;
private RouteSearchAdapter adapter;
protected OnListItemClick mOnClickListener;
public RouteSearchPoiDialog(Context context) {
this(context, android.R.style.Theme_Dialog);
}
public RouteSearchPoiDialog(Context context, int theme) {
super(context, theme);
}
public RouteSearchPoiDialog(Context context, List<PoiItem> poiItems) {
this(context, android.R.style.Theme_Dialog);
this.poiItems = poiItems;
this.context = context;
adapter = new RouteSearchAdapter(context, poiItems);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.routesearch_list_poi);
ListView listView = (ListView) findViewById(R.id.ListView_nav_search_list_poi);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
dismiss();
mOnClickListener.onListItemClick(RouteSearchPoiDialog.this,
poiItems.get(position));
}
});
}
@Override
public void onItemClick(AdapterView<?> view, View view1, int arg2, long arg3) {
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
public interface OnListItemClick {
public void onListItemClick(RouteSearchPoiDialog dialog, PoiItem item);
}
public void setOnListClickListener(OnListItemClick l) {
mOnClickListener = l;
}
}
<----------------------------------------------------------------------工具类-------------------------------------------------------------------------------->
/**
*
*/
package com.amap.map3d.demo.util;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import android.text.Html;
import android.text.Spanned;
import android.widget.EditText;
import com.amap.api.maps.model.LatLng;
import com.amap.api.services.core.LatLonPoint;
public class AMapUtil {
/**
* 判断edittext是否null
*/
public static String checkEditText(EditText editText) {
if (editText != null && editText.getText() != null
&& !(editText.getText().toString().trim().equals(""))) {
return editText.getText().toString().trim();
} else {
return "";
}
}
public static Spanned stringToSpan(String src) {
return src == null ? null : Html.fromHtml(src.replace("\n", "<br />"));
}
public static String colorFont(String src, String color) {
StringBuffer strBuf = new StringBuffer();
strBuf.append("<font color=").append(color).append(">").append(src)
.append("</font>");
return strBuf.toString();
}
public static String makeHtmlNewLine() {
return "<br />";
}
public static String makeHtmlSpace(int number) {
final String space = " ";
StringBuilder result = new StringBuilder();
for (int i = 0; i < number; i++) {
result.append(space);
}
return result.toString();
}
public static String getFriendlyLength(int lenMeter) {
if (lenMeter > 10000) // 10 km
{
int dis = lenMeter / 1000;
return dis + ChString.Kilometer;
}
if (lenMeter > 1000) {
float dis = (float) lenMeter / 1000;
DecimalFormat fnum = new DecimalFormat("##0.0");
String dstr = fnum.format(dis);
return dstr + ChString.Kilometer;
}
if (lenMeter > 100) {
int dis = lenMeter / 50 * 50;
return dis + ChString.Meter;
}
int dis = lenMeter / 10 * 10;
if (dis == 0) {
dis = 10;
}
return dis + ChString.Meter;
}
public static boolean IsEmptyOrNullString(String s) {
return (s == null) || (s.trim().length() == 0);
}
/**
* 把LatLng对象转化为LatLonPoint对象
*/
public static LatLonPoint convertToLatLonPoint(LatLng latlon) {
return new LatLonPoint(latlon.latitude, latlon.longitude);
}
/**
* 把LatLonPoint对象转化为LatLon对象
*/
public static LatLng convertToLatLng(LatLonPoint latLonPoint) {
return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
}
/**
* 把集合体的LatLonPoint转化为集合体的LatLng
*/
public static ArrayList<LatLng> convertArrList(List<LatLonPoint> shapes) {
ArrayList<LatLng> lineShapes = new ArrayList<LatLng>();
for (LatLonPoint point : shapes) {
LatLng latLngTemp = AMapUtil.convertToLatLng(point);
lineShapes.add(latLngTemp);
}
return lineShapes;
}
/**
* long类型时间格式化
*/
public static String convertToTime(long time) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(time);
return df.format(date);
}
public static final String HtmlBlack = "#000000";
public static final String HtmlGray = "#808080";
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.amap.map3d.demo.util;
public class ChString {
public static final String Kilometer = "\u516c\u91cc";// "公里";
public static final String Meter = "\u7c73";// "米";
public static final String ByFoot = "\u6b65\u884c";// "步行";
public static final String To = "\u53bb\u5f80";// "去往";
public static final String Station = "\u8f66\u7ad9";// "车站";
public static final String TargetPlace = "\u76ee\u7684\u5730";// "目的地";
public static final String StartPlace = "\u51fa\u53d1\u5730";// "出发地";
public static final String About = "\u5927\u7ea6";// "大约";
public static final String Direction = "\u65b9\u5411";// "方向";
public static final String GetOn = "\u4e0a\u8f66";// "上车";
public static final String GetOff = "\u4e0b\u8f66";// "下车";
public static final String Zhan = "\u7ad9";// "站";
public static final String cross = "\u4ea4\u53c9\u8def\u53e3"; // 交叉路口
public static final String type = "\u7c7b\u522b"; // 类别
public static final String address = "\u5730\u5740"; // 地址
public static final String PrevStep = "\u4e0a\u4e00\u6b65";
public static final String NextStep = "\u4e0b\u4e00\u6b65";
public static final String Gong = "\u516c\u4ea4";
public static final String ByBus = "\u4e58\u8f66";
public static final String Arrive = "\u5230\u8FBE";// 到达
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.amap.map3d.demo.util;
import com.amap.api.maps.model.LatLng;
public class Constants {
public static final int ERROR = 1001;// 网络异常
public static final int ROUTE_START_SEARCH = 2000;
public static final int ROUTE_END_SEARCH = 2001;
public static final int ROUTE_BUS_RESULT = 2002;// 路径规划中公交模式
public static final int ROUTE_DRIVING_RESULT = 2003;// 路径规划中驾车模式
public static final int ROUTE_WALK_RESULT = 2004;// 路径规划中步行模式
public static final int ROUTE_NO_RESULT = 2005;// 路径规划没有搜索到结果
public static final int GEOCODER_RESULT = 3000;// 地理编码或者逆地理编码成功
public static final int GEOCODER_NO_RESULT = 3001;// 地理编码或者逆地理编码没有数据
public static final int POISEARCH = 4000;// poi搜索到结果
public static final int POISEARCH_NO_RESULT = 4001;// poi没有搜索到结果
public static final int POISEARCH_NEXT = 5000;// poi搜索下一页
public static final int BUSLINE_LINE_RESULT = 6001;// 公交线路查询
public static final int BUSLINE_id_RESULT = 6002;// 公交id查询
public static final int BUSLINE_NO_RESULT = 6003;// 异常情况
public static final LatLng BEIJING = new LatLng(39.90403, 116.407525);// 北京市经纬度
public static final LatLng ZHONGGUANCUN = new LatLng(39.983456, 116.3154950);// 北京市中关村经纬度
public static final LatLng SHANGHAI = new LatLng(31.238068, 121.501654);// 上海市经纬度
public static final LatLng FANGHENG = new LatLng(39.989614, 116.481763);// 方恒国际中心经纬度
public static final LatLng CHENGDU = new LatLng(30.679879, 104.064855);// 成都市经纬度
public static final LatLng XIAN = new LatLng(34.341568, 108.940174);// 西安市经纬度
public static final LatLng ZHENGZHOU = new LatLng(34.7466, 113.625367);// 郑州市经纬度
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.amap.map3d.demo.util;
import android.content.Context;
import android.os.Environment;
public class OffLineMapUtils {
/**
* 获取map 缓存和读取目录
*/
public static String getSdCacheDir(Context context) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
java.io.File fExternalStorageDirectory = Environment
.getExternalStorageDirectory();
java.io.File autonaviDir = new java.io.File(
fExternalStorageDirectory, "amapsdk");
boolean result = false;
if (!autonaviDir.exists()) {
result = autonaviDir.mkdir();
}
java.io.File minimapDir = new java.io.File(autonaviDir,
"offlineMap");
if (!minimapDir.exists()) {
result = minimapDir.mkdir();
}
return minimapDir.toString() + "/";
} else {
return "";
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
*
*/
package com.amap.map3d.demo.util;
import android.content.Context;
import android.widget.Toast;
public class ToastUtil {
public static void show(Context context, String info) {
Toast.makeText(context, info, Toast.LENGTH_LONG).show();
}
public static void show(Context context, int info) {
Toast.makeText(context, info, Toast.LENGTH_LONG).show();
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
高德地图——路线规划相关推荐
- 高德地图小程序步行路线显示_微信小程序 高德地图路线规划实现过程详解
前言 最近项目中做到相关网约车小程序.需要使用到地图中的路线规划,对3种地图进行了分析.这里稍微做一下总结: 百度地图 百度坐标 (BD-09) 腾讯地图 火星坐标(GCJ-02) 高德地图 火星坐标 ...
- iOS 高德地图路线规划
最近做了高德地图路线规划,把自己不熟的点记录一下: 1.地图不显示当前位置精准圈:设置mapview的 customizeUserLocationAccuracyCircleRepresentatio ...
- 高德地图路线规划 时间_路线准、播报拥堵及时,这次自驾出行高德地图可算是帮了大忙...
在我们日常生活中,自驾已经成为一种很普遍的出行方式,不仅在时间上灵活,特别是一家人出行也比较方便.伴随自驾出行的除了爱车外,一款靠谱的地图导航软件也成为了必不可少的旅行伙伴. 目前比较常用的地图导航软 ...
- java 高德地图路线规划_高德地图 web 页面里的出行路线规划
高德地图的引入,有两种方式,第一种在引入链接里直接添加 plugin 参数: 第二种是引入链接里不添加 plugin 参数,而是在在使用插件之前,使用AMap.service方法加载插件,然后在回调 ...
- uniapp 开发安卓App实现高德地图路线规划导航
文章目录 技术概述 技术详述 问题与解决 我的总结 参考文献 技术概述 描述这个技术是做什么的/什么情况下会使用到这个技术,学习该技术的原因,技术的难点在哪里.控制在50-100字内. uniapp的 ...
- vue 引入高德地图 路线规划
由于vue-amap不支持路线规划,因此不予采纳. 效果如图 在index.html的header中引入 <script type="text/javascript" src ...
- Android高德地图路线规划,自定义图层(overlay),所有点和线刚好显示在屏幕中心
高德百度地图SDK路线规划包含:步行,公交,驾车,骑车. 搜索的结果是经纬度点信息Latlng(lat,lng) 功能 在地图map中将所有的点连线,并让该线能刚好被当前的地图层级包含,并且当前路线所 ...
- 关于Android高德地图路线规划的学习
其实一开始我是懵逼的 后来看了demo的源码才磕磕绊绊的做了出来. 线路规划属于Android地图SDK. 首先是流程,要有一个MainActivity主类,布局里面有MapView.点击规划路线的按 ...
- java 高德地图路线规划_高德地图api之路线规划
1.引入 2.创建并初始化实例对象 const map = new AMap.Map("container") 3.创建一个导航元素,用来承载导航路线(这里不要忘了,是个坑,用的啥 ...
- java 高德地图路线规划_公交出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...
公交路径规划可以根据起终点和公交换乘的数据,使用 BusRouteOverlay 画出公交路线图层,包括起终点和换乘点.另外也可以自定义起终点和换乘点的图标. 目前支持跨城公交路线规划,提供不同城市之 ...
最新文章
- 北大数学天才毕业后坚持出家:理想现实间的挣扎
- Rxjava、Retrofit返回json数据解析异常处理
- 如何清除服务器物理内存,服务器怎样清理物理内存
- E - Ignatius and the Princess IV
- (转)Linux下的输入/输出重定向
- tensor索引[..., 0]
- 消费者性别及其所偏好牛奶品牌频数分布
- ftp服务器、文件夹中带点文件删除方法
- 《Java就业培训教程》_张孝祥_书内源码_08
- 51单片机的汇编语言
- 使用html查看dicom,LEADTOOLS构建HTML5 DICOM/PACS查看器(二)
- Unity3D中GPS定位信息及经纬度转换方法
- The Beatles - Don't bother me 歌词翻译
- 怎么克隆计算机的mac,MAC地址克隆方法
- 【七七八八】简单的对话python代码实现
- AndroidStudio-断点调试-也许你该知道断点调试是有多么的美好
- myeclipse下用axis2开发web service
- Nodejs之Express框架
- linux模糊删除文件
- 大数据分析策略和发展趋势
热门文章
- 小米手机用什么蓝牙耳机好?国产蓝牙耳机推荐
- 去除GHOST版系统自带的2345流氓软件
- abb机器人建立工件坐标系_【收藏】设定ABB机器人工具坐标的方法
- 292. Nim Game(尼姆游戏)
- windows service 无法访问映射的网络驱动器
- 基于Java实现的MD5算法实现
- 2018-8-30-router的自我反思与总结三
- python 公司年会抽奖_python实现年会抽奖程序
- mysql安装卸载服务_windows下安装、卸载mysql服务的方法(mysql 5.6 zip解
- 3D视觉(六):PnP问题(pespective-n-point)