android高德地图api,android 高德地图最新API

package com.amap.cn.apis.route;

import java.util.ArrayList;

import java.util.List;

import android.app.ProgressDialog;

import android.content.Context;

import android.graphics.Canvas;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AutoCompleteTextView;

import android.widget.Button;

import android.widget.ImageButton;

import android.widget.TextView;

import android.widget.Toast;

import com.amap.cn.apis.R;

import com.amap.cn.apis.route.RouteSearchPoiDialog.OnListItemClick;

import com.amap.cn.apis.util.Constants;

import com.amap.mapapi.core.AMapException;

import com.amap.mapapi.core.GeoPoint;

import com.amap.mapapi.core.PoiItem;

import com.amap.mapapi.map.MapActivity;

import com.amap.mapapi.map.MapController;

import com.amap.mapapi.map.MapView;

import com.amap.mapapi.map.Overlay;

import com.amap.mapapi.map.RouteMessageHandler;

import com.amap.mapapi.map.RouteOverlay;

import com.amap.mapapi.poisearch.PoiPagedResult;

import com.amap.mapapi.poisearch.PoiSearch;

import com.amap.mapapi.poisearch.PoiSearch.Query;

import com.amap.mapapi.poisearch.PoiTypeDef;

import com.amap.mapapi.route.Route;

public class RouteDemoextends MapActivityimplements RouteMessageHandler {

private MapView mMapView;

private MapController mMapController;

private GeoPoint point;

private Button drivingButton;

private Button transitButton;

private Button walkButton;

private ImageButton startImageButton;

private ImageButton endImageButton;

private ImageButton routeSearchImagebtn;

private AutoCompleteTextView startTextView;

private AutoCompleteTextView endTextView;

private int mode = Route.BusDefault;

private ProgressDialog progDialog;

private PoiPagedResult startSearchResult;

private PoiPagedResult endSearchResult;

private String strStart;

private String strEnd;

private GeoPoint startPoint =null;

private GeoPoint endPoint =null;

private MapPointOverlay overlay;

private String poiType;

private List routeResult;

private RouteOverlay ol;

@Override

protected void onCreate(Bundle bundle) {

super.onCreate(bundle);

setContentView(R.layout.route);

mMapView = (MapView) findViewById(R.id.route_MapView);

mMapView.setBuiltInZoomControls(true);// 设置启用内置的缩放控件

mMapController = mMapView.getController();// 得到mMapView的控制权,可以用它控制和驱动平移和缩放

point =new GeoPoint((int) (39.90923 * 1E6), (int) (116.397428 * 1E6));// 用给定的经纬度构造一个GeoPoint,单位是微度

// (度

// *

// 1E6)

mMapController.setCenter(point);// 设置地图中心点

mMapController.setZoom(12);// 设置地图zoom级别

startTextView = (AutoCompleteTextView) findViewById(R.id.autotextview_roadsearch_start);

startTextView.setSelectAllOnFocus(true);

endTextView = (AutoCompleteTextView) findViewById(R.id.autotextview_roadsearch_goals);

endTextView.setSelectAllOnFocus(true);

drivingButton = (Button) findViewById(R.id.imagebtn_roadsearch_tab_driving);

transitButton = (Button) findViewById(R.id.imagebtn_roadsearch_tab_transit);

walkButton = (Button) findViewById(R.id.imagebtn_roadsearch_tab_walk);

overlay =new MapPointOverlay(this);

drivingButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mode = Route.DrivingDefault;

drivingButton.setBackgroundResource(R.drawable.mode_driving_on);

transitButton

.setBackgroundResource(R.drawable.mode_transit_off);

}

});

transitButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mode = Route.BusDefault;

drivingButton

.setBackgroundResource(R.drawable.mode_driving_off);

transitButton.setBackgroundResource(R.drawable.mode_transit_on);

}

});

walkButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

mode = Route.WalkDefault;

drivingButton

.setBackgroundResource(R.drawable.mode_driving_off);

transitButton

.setBackgroundResource(R.drawable.mode_transit_off);

walkButton.setBackgroundResource(R.drawable.mode_walk_on);

}

});

startImageButton = (ImageButton) findViewById(R.id.imagebtn_roadsearch_startoption);

startImageButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

showToast("在地图上点击您的起点");

poiType ="startPoint";

mMapView.getOverlays().add(overlay);

}

});

endImageButton = (ImageButton) findViewById(R.id.imagebtn_roadsearch_goalsoption);

endImageButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

showToast("在地图上点击您的终点");

poiType ="endPoint";

mMapView.getOverlays().add(overlay);

}

});

routeSearchImagebtn = (ImageButton) findViewById(R.id.imagebtn_roadsearch_search);

routeSearchImagebtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

strStart = startTextView.getText().toString().trim();

strEnd = endTextView.getText().toString().trim();

if (strStart ==null || strStart.length() ==0) {

Toast.makeText(RouteDemo.this,"请选择起点", Toast.LENGTH_SHORT)

.show();

return;

}

if (strEnd ==null || strEnd.length() ==0) {

Toast.makeText(RouteDemo.this,"请选择终点", Toast.LENGTH_SHORT)

.show();

return;

}

startSearchResult();

}

});

}

public void showToast(String showString) {

Toast.makeText(getApplicationContext(), showString, Toast.LENGTH_SHORT)

.show();

}

// 查询路径规划起点

public void startSearchResult() {

strStart = startTextView.getText().toString().trim();

if (startPoint !=null && strStart.equals("地图上的点")) {

endSearchResult();

}else {

final Query startQuery =new Query(strStart, PoiTypeDef.All,"010");

progDialog = ProgressDialog.show(RouteDemo.this,null,

"正在搜索您所需信息...",true,true);

Thread t =new Thread(new Runnable() {

@Override

public void run() {

// 调用搜索POI方法

PoiSearch poiSearch =new PoiSearch(RouteDemo.this,

startQuery);// 设置搜索字符串

try {

startSearchResult = poiSearch.searchPOI();

if (progDialog.isShowing()) {

routeHandler.sendMessage(Message.obtain(

routeHandler, Constants.ROUTE_START_SEARCH));

}

}catch (AMapException e) {

Message msg =new Message();

msg.what = Constants.ROUTE_SEARCH_ERROR;

msg.obj = e.getErrorMessage();

routeHandler.sendMessage(msg);

}

}

});

t.start();

}

}

// 查询路径规划终点

public void endSearchResult() {

strEnd = endTextView.getText().toString().trim();

if (endPoint !=null && strEnd.equals("地图上的点")) {

searchRouteResult(startPoint, endPoint);

}else {

final Query endQuery =new Query(strEnd, PoiTypeDef.All,"010");

progDialog = ProgressDialog.show(RouteDemo.this,null,

"正在搜索您所需信息...",true,false);

Thread t =new Thread(new Runnable() {

@Override

public void run() {

PoiSearch poiSearch =new PoiSearch(RouteDemo.this,

endQuery);// 设置搜索字符串

try {

endSearchResult = poiSearch.searchPOI();

if (progDialog.isShowing()) {

routeHandler.sendMessage(Message.obtain(

routeHandler, Constants.ROUTE_END_SEARCH));

}

}catch (AMapException e) {

Message msg =new Message();

msg.what = Constants.ROUTE_SEARCH_ERROR;

msg.obj = e.getErrorMessage();

routeHandler.sendMessage(msg);

}

}

});

t.start();

}

}

public void searchRouteResult(GeoPoint startPoint, GeoPoint endPoint) {

progDialog = ProgressDialog.show(RouteDemo.this,null,"正在获取线路",true,

true);

final Route.FromAndTo fromAndTo =new Route.FromAndTo(startPoint,

endPoint);

Thread t =new Thread(new Runnable() {

@Override

public void run() {

try {

routeResult = Route.calculateRoute(RouteDemo.this,

fromAndTo, mode);

if (progDialog.isShowing()) {

if (routeResult !=null || routeResult.size() >0)

routeHandler.sendMessage(Message

.obtain(routeHandler,

Constants.ROUTE_SEARCH_RESULT));

}

}catch (AMapException e) {

Message msg =new Message();

msg.what = Constants.ROUTE_SEARCH_ERROR;

msg.obj = e.getErrorMessage();

routeHandler.sendMessage(msg);

}

}

});

t.start();

}

private Handler routeHandler =new Handler() {

public void handleMessage(Message msg) {

if (msg.what == Constants.ROUTE_START_SEARCH) {

progDialog.dismiss();

try {

List poiItems;

if (startSearchResult !=null

&& (poiItems = startSearchResult.getPage(1)) !=null

&& poiItems.size() >0) {

RouteSearchPoiDialog dialog =new RouteSearchPoiDialog(

RouteDemo.this, poiItems);

dialog.setTitle("您要找的起点是:");

dialog.show();

dialog.setOnListClickListener(new OnListItemClick() {

@Override

public void onListItemClick(

RouteSearchPoiDialog dialog,

PoiItem startpoiItem) {

startPoint = startpoiItem.getPoint();

strStart = startpoiItem.getTitle();

startTextView.setText(strStart);

endSearchResult();

}

});

}else {

showToast("无搜索起点结果,建议重新设定...");

}

}catch (AMapException e) {

e.printStackTrace();

}

}else if (msg.what == Constants.ROUTE_END_SEARCH) {

progDialog.dismiss();

try {

List poiItems;

if (endSearchResult !=null

&& (poiItems = endSearchResult.getPage(1)) !=null

&& poiItems.size() >0) {

RouteSearchPoiDialog dialog =new RouteSearchPoiDialog(

RouteDemo.this, poiItems);

dialog.setTitle("您要找的终点是:");

dialog.show();

dialog.setOnListClickListener(new OnListItemClick() {

@Override

public void onListItemClick(

RouteSearchPoiDialog dialog,

PoiItem endpoiItem) {

// TODO Auto-generated method stub

endPoint = endpoiItem.getPoint();

strEnd = endpoiItem.getTitle();

endTextView.setText(strEnd);

searchRouteResult(startPoint, endPoint);

}

});

}else {

showToast("无搜索起点结果,建议重新设定...");

}

}catch (AMapException e) {

e.printStackTrace();

}

}else if (msg.what == Constants.ROUTE_SEARCH_RESULT) {

progDialog.dismiss();

if (routeResult !=null && routeResult.size() >0) {

Route route = routeResult.get(0);

if (route !=null) {

if (ol !=null) {

ol.removeFromMap(mMapView);

}

ol =new RouteOverlay(RouteDemo.this, route);

ol.registerRouteMessage(RouteDemo.this);// 注册消息处理函数

ol.addToMap(mMapView);// 加入到地图

ArrayList pts =new ArrayList();

pts.add(route.getLowerLeftPoint());

pts.add(route.getUpperRightPoint());

mMapView.getController().setFitView(pts);// 调整地图显示范围

mMapView.invalidate();

}

}

}else if (msg.what == Constants.ROUTE_SEARCH_ERROR) {

progDialog.dismiss();

showToast((String) msg.obj);

}

}

};

// RouteOverlay拖动过程中触发

@Override

public void onDrag(MapView arg0, RouteOverlay arg1,int arg2, GeoPoint arg3) {

// TODO Auto-generated method stub

}

// RouteOverlay拖动开始时触发

@Override

public void onDragBegin(MapView arg0, RouteOverlay arg1,int arg2,

GeoPoint arg3) {

// TODO Auto-generated method stub

}

// RouteOverlay拖动完成触发

@Override

public void onDragEnd(MapView mapView, RouteOverlay overlay,int index,

GeoPoint pos) {

// TODO Auto-generated method stub

try {

startPoint = overlay.getStartPos();

endPoint = overlay.getEndPos();

searchRouteResult(startPoint, endPoint);

}catch (IllegalArgumentException e) {

ol.restoreOverlay(mMapView);

overlayToBack(ol, mMapView);

}catch (Exception e1) {

overlay.restoreOverlay(mMapView);

overlayToBack(ol, mMapView);

}

}

private void overlayToBack(RouteOverlay overlay, MapView mapView) {

startPoint = overlay.getStartPos();

endPoint = overlay.getEndPos();

}

@Override

public boolean onRouteEvent(MapView arg0, RouteOverlay arg1,int arg2,

int arg3) {

// TODO Auto-generated method stub

return false;

}

public class MapPointOverlayextends Overlay {

private LayoutInflater inflater;

private View popUpView;

public MapPointOverlay(Context context) {

inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override

public void draw(Canvas canvas, MapView mapView,boolean shadow) {

// TODO Auto-generated method stub

super.draw(canvas, mapView, shadow);

}

@Override

public boolean onTap(final GeoPoint point,final MapView view) {

if (popUpView !=null) {

view.removeView(popUpView);

}

// Projection接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换

popUpView = inflater.inflate(R.layout.popup,null);

TextView textView = (TextView) popUpView.findViewById(R.id.PoiName);

textView.setText("点击即可选择此点");

MapView.LayoutParams lp;

lp =new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,

MapView.LayoutParams.WRAP_CONTENT, point,0,0,

MapView.LayoutParams.BOTTOM_CENTER);

view.addView(popUpView, lp);

popUpView.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if (poiType.equals("startPoint")) {

startTextView.setText("地图上的点");

startTextView.selectAll();

startPoint = point;

}

if (poiType.equals("endPoint")) {

endTextView.setText("地图上的点");

endTextView.selectAll();

endPoint = point;

}

view.removeView(popUpView);

view.getOverlays().remove(overlay);

}

});

return super.onTap(point, view);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值