实现查询地址和路线导航的代码

本文介绍了一款Android应用,该应用可以根据用户输入的起始点和目的地地址进行地理编码,获取经纬度信息,并通过调用Google Maps API实现路径规划与导航功能。支持多种出行方式,包括公交、步行和驾车。
    以下代码主要实现的是根据地址名得到经纬度,并在地图上显示及路线规划,导航。收藏路线和查看路线。

源代码:

package com.logistics;

import java.util.List;
import java.util.Locale;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.android.maps.GeoPoint;


public class Map_index extends Activity {

private GeoPoint fromGeoPoint, toGeoPoint;
private EditText mEditText01;
private EditText mEditText02;
private Button mButton01,mButton02;
private String TAG = "HIPPO_GEO_DEBUG";

public static final int SAVEROUTE = Menu.FIRST;
public static final int ROUTELIST = Menu.FIRST + 1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_citytocity);
mButton01 = (Button) findViewById(R.id.search_route);
mButton02 = (Button) findViewById(R.id.map_cancel);

mEditText01 = (EditText) findViewById(R.id.search_startingpoint);
mEditText01.setText(getResources()
.getText(R.string.str_default_starting_point).toString());
mEditText02 = (EditText) findViewById(R.id.search_destination);
mEditText02.setText(getResources()
.getText(R.string.str_default_address).toString());

// 按钮 查询地址规划路径
mButton01.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) { // 选择方式
final CharSequence[] items = { "乘车", "步行", "驾车" };
AlertDialog.Builder builder = new AlertDialog.Builder(
Map_index.this);
builder.setTitle("选择交通方式");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
StringBuilder params = new StringBuilder()
.append("&dirflg=");
switch (item) {
case 0:
params.append("r");
break;
case 1:
params.append("w");
break;
case 2:
params.append("d");
break;
default:
break;
}
getMap(params.toString());
}
});

AlertDialog alert = builder.create();
alert.show();
}
});

// 取消
mButton02.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
finish();
}
});

}



// TODO Auto-generated method stub
protected void getMap(String params) {
if (mEditText01.getText().toString() != ""
& mEditText01.getText().toString() != "") {
/* 取得User要前往的GeoPoint对象 */
fromGeoPoint = getGeoByAddress(mEditText01.getText().toString());
toGeoPoint = getGeoByAddress(mEditText02.getText().toString());

/* 路径规划Intent */
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);

/* 传入路径规划所需要的地标地址 */

intent.setData(Uri.parse("http://maps.google.com/maps?f=d&saddr="
+ GeoPointToString(fromGeoPoint) + "&daddr="
+ GeoPointToString(toGeoPoint) + "&hl=cn&t=m&" + params));
// 强制使用谷歌地图打开
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
& Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.setClassName("com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(intent);
}
}





/* 从输入的Address地址,取得其GeoPoint对象 */
private GeoPoint getGeoByAddress(String strSearchAddress) {
GeoPoint gp = null;
try {
if (strSearchAddress != "") {
Geocoder mGeocoder01 = new Geocoder(Map_index.this, Locale
.getDefault());

List<Address> lstAddress = mGeocoder01.getFromLocationName(
strSearchAddress, 1);
if (!lstAddress.isEmpty()) {
Address adsLocation = lstAddress.get(0);
double geoLatitude = adsLocation.getLatitude() * 1E6;
double geoLongitude = adsLocation.getLongitude() * 1E6;
gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);
} else {

Log.i(TAG, "Address Geopoint not Found.");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return gp;
}

/* 将Geopoint里的经纬度以String,String返回 */
private String GeoPointToString(GeoPoint gp) {
String strReturn = "";
try {
/* 当Location存在 */
if (gp != null) {
double geoLatitude = (int) gp.getLatitudeE6() / 1E6;
double geoLongitude = (int) gp.getLongitudeE6() / 1E6;
strReturn = String.valueOf(geoLatitude) + ","
+ String.valueOf(geoLongitude);
}
} catch (Exception e) {
e.printStackTrace();
}
return strReturn;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, SAVEROUTE, 0, "收藏路线")
.setIcon(getResources().getDrawable(R.drawable.list_add));
menu.add(0, ROUTELIST, 1, "路线列表")
.setIcon(getResources().getDrawable(R.drawable.business));
return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case SAVEROUTE:
Long mRowId=-1L;
Intent intent1 = new Intent(Map_index.this,
MapCollectionPath.class);

Bundle fpoint = new Bundle();
fpoint.putLong("mRowId", mRowId);
fpoint.putString("fav_startingpoint", mEditText01.getText()
.toString());
fpoint.putString("fav_destination", mEditText02.getText()
.toString());
fpoint.putString("title","");
intent1.putExtras(fpoint);
startActivity(intent1);
break;


case ROUTELIST:
Intent intent2 = new Intent(Map_index.this, MapList.class);
startActivity(intent2);
break;
}
return super.onOptionsItemSelected(item);
}


}
城市公交查询系统(毕业设计) 本系统采用结构化设计的方法来实现系统总体功能,提高系统的各项指标,即将整个系统合理的划分成各个功能模块,正确地处理模块之间模块内部的联系以及数据库的联系,定义各模块的内部结构,通过对模块的设计模块之间关系的系统来实现整个系统的功能 前台主要有3个模块,线路查询、站点查询、公交换乘模块后台管理模块 功能名称:线路查询 功能概述:可以获得要查询公交所通过的各个站点。 功能名称:站点查询 功能概述:通过输入的指定站点查询经过该站点的公交。 功能名称:公交换乘查询 功能概述:分为公交直达、公交一次换乘,主要体现那些不可直达需要转车的路线的所有换法。(如果用户输入的起始点终点,有一条及一条以上的公交线可以直达的,则为公交直达;如果输入的起始点终点,没有一条公交线可以直接到的,系统将会给出一次换乘的方案,则为公交一次换乘) 功能名称:后台管理 功能概述:用于管理员登陆,添加、修改、删除公交线路,修改信息资料、安全密码,回复留言板等功能。 本系统提供了的车次查询功能、路线查询功能。乘客可以方便的进行查询,以防乘错车次。当然有些功能的智能化不是很强,系统有待进一步来完善。 毕业论文文件夹下为《开题报告》、《毕业论文》及《英文翻译》等相关文档 DB_51aspx下为Sql数据库,附加后修改App_Code/DB.cs中的配置文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值