在android中,如何在谷歌地图上的两点之间获得方向?
我搜索了两个小时,但只找到了绘制线,我想得到这个表单点击的方向!我有十个点,当我点击该点时,我想显示从我的位置到该点的方向。 我的代码外观:在android中,如何在谷歌地图上的两点之间获得方向?,android,google-maps,google-maps-api-3,Android,Google Maps,Google Maps Api 3,我搜索了两个小时,但只找到了绘制线,我想得到这个表单点击的方向!我有十个点,当我点击该点时,我想显示从我的位置到该点的方向。 我的代码外观: package de.vogella.android.locationapi.maps; import android.content.Context; import android.graphics.drawable.Drawable; import android.location.Location; import android.location.
package de.vogella.android.locationapi.maps;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;
public class ShowMapActivity extends MapActivity {
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private MyOverlays itemizedoverlay,itemizedoverlay_central;
private MyLocationOverlay myLocationOverlay;
private String nameOfOffice_AZ[];
private String addressOfOffice_AZ[];
private String phoneOfOffice_AZ[];
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main); // bind the layout to the activity
// Configure the Map
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
Projection projection = mapView.getProjection();
nameOfOffice_AZ= getResources().getStringArray(R.array.NamesOFObject_AZ);
addressOfOffice_AZ = getResources().getStringArray(R.array.AddressOfOffice_AZ);
phoneOfOffice_AZ = getResources().getStringArray(R.array.PhoneOfOffice_AZ);
mapController = mapView.getController();
mapController.setZoom(16); // Zoon 1 is world view
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0, new GeoUpdateHandler());
myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
mapView.getController().animateTo(myLocationOverlay.getMyLocation());
}
});
Drawable drawable = this.getResources().getDrawable(R.drawable.office_icon);
Drawable drawable_central = this.getResources().getDrawable(R.drawable.central_office);
itemizedoverlay = new MyOverlays(this, drawable);
itemizedoverlay_central = new MyOverlays(this, drawable_central);
createMarker();
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
public class GeoUpdateHandler implements LocationListener {
@Override
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude() * 1E6);
int lng = (int) (location.getLongitude() * 1E6);
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
mapController.animateTo(point); // mapController.setCenter(point);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
private void createMarker() {
//CENTRAL OFFICE
GeoPoint p_central = new GeoPoint((int)(40.38292884084829 * 1e6),(int)(49.84223246574 * 1e6));
OverlayItem overlayitem = new OverlayItem(p_central, nameOfOffice_AZ[0] ,addressOfOffice_AZ[0]+"\n"+phoneOfOffice_AZ[0] );
itemizedoverlay_central.addOverlay(overlayitem);
mapView.getOverlays().add(itemizedoverlay_central);
//END CENTRALL OFFICE
GeoPoint p = new GeoPoint((int)(40.376455916943236 * 1e6),(int)(49.84803676605224 * 1e6));
overlayitem = new OverlayItem(p, nameOfOffice_AZ[0] ,addressOfOffice_AZ[0]+"\n"+phoneOfOffice_AZ[0] );
itemizedoverlay.addOverlay(overlayitem);
mapView.getOverlays().add(itemizedoverlay);
}
@Override
protected void onResume() {
super.onResume();
myLocationOverlay.enableMyLocation();
myLocationOverlay.enableCompass();
}
@Override
protected void onPause() {
super.onPause();
myLocationOverlay.disableMyLocation();
myLocationOverlay.disableCompass();
}
}
和MyOverlays.java
package de.vogella.android.locationapi.maps;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
public class MyOverlays extends ItemizedOverlay<OverlayItem> {
private static int maxNum = 5;
private OverlayItem overlays[] = new OverlayItem[maxNum];
private int index = 0;
private boolean full = false;
private Context mContext;
private OverlayItem previousoverlay;
public MyOverlays(Context context, Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
this.mContext = context;
}
private ArrayList< OverlayItem > mOverlays = new ArrayList< OverlayItem >();
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
public void name() {
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
@Override
protected boolean onTap(int i) {
//when you tap on the marker this will show the informations provided by you when you create in the
//main class the OverlayItem
OverlayItem item = mOverlays.get(i);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setInverseBackgroundForced(true);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.setCancelable(true);
dialog.setPositiveButton("Go To", new OkOnClickListener());
/// dialog.setNegativeButton("No, no", new CancelOnClickListener());
dialog.show();
// nese bax = new nese();
// bax.oldu(mContext);
return true;
}
private final class CancelOnClickListener implements
DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(mContext, "You clicked yes", Toast.LENGTH_LONG)
.show();
}
}
private final class OkOnClickListener implements
DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
//Toast.makeText(mContext, "You clicked no", Toast.LENGTH_LONG).show();
}
}
public class RoutePath extends MapActivity {
/** Called when the activity is first created. */
MapView mapView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView) findViewById(R.id.mapview);
double src_lat = 25.04202; // the testing source
double src_long = 121.534761;
double dest_lat = 25.05202; // the testing destination
double dest_long = 121.554761;
GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),
(int) (src_long * 1E6));
GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
(int) (dest_long * 1E6));
DrawPath(srcGeoPoint, destGeoPoint, Color.GREEN, mapView);
mapView.getController().animateTo(srcGeoPoint);
mapView.getController().setZoom(15);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
private void DrawPath(GeoPoint src, GeoPoint dest, int color,
MapView mMapView01) {
// code in section 2.2
}
}
package de.vogella.android.locationapi.maps;
导入java.util.ArrayList;
导入android.app.AlertDialog;
导入android.app.AlertDialog.Builder;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.graphics.Color;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.widget.Toast;
导入com.google.android.maps.GeoPoint;
导入com.google.android.maps.ItemizedOverlay;
导入com.google.android.maps.MapActivity;
导入com.google.android.maps.MapView;
导入com.google.android.maps.OverlayItem;
公共类MyOverlays扩展了ItemizedOverlay{
私有静态int maxNum=5;
私有OverlayItem overlays[]=新OverlayItem[maxNum];
私有整数指数=0;
私有布尔满=假;
私有上下文;
私有覆盖项先前覆盖;
公共MyOverlays(上下文、可绘制的defaultMarker){
super(boundCenterBottom(defaultMarker));
this.mContext=上下文;
}
私有ArrayListmOverlays=新ArrayList();
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
公共无效名称(){
}
@凌驾
受保护的OverlayItem createItem(int i){
返回mOverlays.get(i);
}
@凌驾
公共整数大小(){
返回mOverlays.size();
}
@凌驾
受保护的布尔onTap(int i){
//当您点击标记时,将显示您在中创建时提供的信息
//覆盖项的主类
OverlayItem item=mOverlays.get(i);
AlertDialog.Builder dialog=新建AlertDialog.Builder(mContext);
对话框。setInverseBackgroundForced(真);
setTitle(item.getTitle());
setMessage(item.getSnippet());
对话框。可设置可取消(true);
setPositiveButton(“转到”,新建OkOnClickListener());
///setNegativeButton(“否,否”,新的CancelOnClickListener());
dialog.show();
//nese bax=新的nese();
//bax.oldu(mContext);
返回true;
}
私有最终类CancelOnClickListener实现
DialogInterface.OnClickListener{
public void onClick(DialogInterface dialog,int which){
Toast.makeText(mContext,“您单击了是”,Toast.LENGTH\u LONG)
.show();
}
}
私有最终类OkOnClickListener实现
DialogInterface.OnClickListener{
public void onClick(DialogInterface dialog,int which){
//Toast.makeText(mContext,“您单击了否”,Toast.LENGTH_LONG.show();
}
}
公共类RoutePath扩展了MapActivity{
/**首次创建活动时调用。*/
地图视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView MapView=(MapView)findViewById(R.id.MapView);
double src_lat=25.04202;//测试源
双src_long=121.534761;
double dest_lat=25.05202;//测试目的地
双端长=121.554761;
地质点SRCEOPINT=新的地质点((int)(src_lat*1E6),
(int)(src_long*1E6);;
地质点destGeoPoint=新的地质点((int)(dest_lat*1E6),
(国际)(目的地长*1E6));
绘图路径(srcGeoPoint、destGeoPoint、Color.GREEN、mapView);
mapView.getController().animateTo(srcGeoPoint);
mapView.getController().setZoom(15);
}
@凌驾
受保护的布尔值isRouteDisplayed(){
//TODO自动生成的方法存根
返回false;
}
专用空心绘制路径(地质点src、地质点dest、int color、,
地图视图mMapView01){
//第2.2节中的代码
}
}
}这篇博客文章可能是一个很好的起点:
对我来说很好。这篇博客文章可以作为一个很好的起点:
对我来说效果很好。搜索方面的努力减少了 不管怎么说,看看吧 以及使用意图
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=xx.xx,xx.xx&daddr=xx.xx,xx.xx"));
startActivity(intent);
搜索方面的努力减少了 不管怎么说,看看吧 以及使用意图
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=xx.xx,xx.xx&daddr=xx.xx,xx.xx"));
startActivity(intent);
一个很好的教程此api不适用于多个路由
https://maps.google.com/maps?saddr=new+york&daddr=baltimore&saddr=harrisburg&daddr=Sunbury,UnitedState
,仅适用于使用“to=”的连接路线这个api不适用于多个路由https://maps.google.com/maps?saddr=new+york&daddr=baltimore&saddr=harrisburg&daddr=Sunbury,UnitedState
,仅适用于使用“to=”参数连接的路线。谢谢,我不太了解代码绘制线或路径(我指的是汽车道路)在给定两点之间?谢谢,我不太理解代码在给定两点之间画线或路径(我指的是汽车道路)?