在谷歌地图多点之间显示路线 [英] Show routes between multiple points on Google Maps
本文介绍了在谷歌地图多点之间显示路线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我创建自己的自定义地图,以显示我的当前位置,并在地图上的多个点。它工作正常,但现在我想告诉我的,从当前位置的路线上map.Can每一点你给我一些建议,我怎么能做到这一点? THX。
这是我customMap活动:
公共类CustomMapActivity扩展MapActivity {
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_map);
字符串商=;
标准暴击=新标准();
位置LOC =新的位置();
LocationManager mlocManager =(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
图形页面图形页面=(图形页面)findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(真正的);
名单<覆盖> mapOverlays =调用MapView.getOverlays();
可绘制绘制= this.getResources()getDrawable(R.drawable.marker)。
ItemizedOverlayedClass itemizedoverlay =新ItemizedOverlayedClass(绘制,这一点);
尝试
{
MyLocationOverlay mylocationOverlay =新MyLocationOverlay(本,图形页面);
mylocationOverlay.enableMyLocation();
。调用MapView.getOverlays()加(mylocationOverlay);
供应商= mlocManager.getBestProvider(暴击,假);
LOC = mlocManager.getLastKnownLocation(供应商);
}
赶上(例外前)
{
//Toast.makeText(this,无法以检索提供商,Toast.LENGTH_LONG).show();
}
对于(ServiceActivity活动:DataSources.ActivitiesList)
{
尝试
{
位置SITELOCATION =新的位置();
siteLocation.setLatitude(activity.SiteLatitude);
siteLocation.setLongitude(activity.SiteLongitude);
的GeoPoint点=新的GeoPoint((INT)(activity.SiteLatitude * 1e6个),(INT)(activity.SiteLongitude * 1e6个));
OverlayItem overlayitem =新OverlayItem(点,activity.SiteName ++ activity.SiteAddress,距离这个位置:+将String.valueOf(loc.distanceTo(SITELOCATION)/ 1000)+公里);
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
赶上(例外前)
{
@燮pressWarnings(未使用)
AlertDialogClass警报=新AlertDialogClass(这一点,ex.getMessage());
}
}
}
@覆盖
保护无效onResume(){
// TODO自动生成方法存根
super.onResume();
//mylocationOverlay.enableMyLocation();
}
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
//充气菜单;这增加了项目操作栏,如果它是present。
。getMenuInflater()膨胀(R.menu.activity_map,菜单);
返回true;
}
@覆盖
保护的布尔isRouteDisplayed(){
// TODO自动生成方法存根
返回false;
}
}
这是覆盖类:
包com.example.srwebservice;
进口的java.util.ArrayList;
进口android.app.AlertDialog;
进口android.content.Context;
进口android.graphics.drawable.Drawable;
进口com.google.android.maps.ItemizedOverlay;
进口com.google.android.maps.OverlayItem;
公共类ItemizedOverlayedClass扩展ItemizedOverlay {
私人的ArrayList< OverlayItem> mOverlays =新的ArrayList< OverlayItem>();
语境mContext;
公共ItemizedOverlayedClass(可绘制defaultMarker)
{
超(boundCenterBottom(defaultMarker));
// TODO自动生成构造函数存根
}
公共ItemizedOverlayedClass(可绘制defaultMarker,上下文语境)
{
超(boundCenterBottom(defaultMarker));
mContext =背景;
}
@覆盖
保护OverlayItem createItem中(int i)以
{
// TODO自动生成方法存根
返回mOverlays.get(ⅰ);
}
@覆盖
公众诠释大小()
{
返回mOverlays.size();
}
公共无效addOverlay(OverlayItem叠加)
{
mOverlays.add(叠加);
填充();
}
@覆盖
受保护的布尔中的onTap(INT指数){
OverlayItem项目= mOverlays.get(指数);
AlertDialog.Builder对话框=新AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
返回true;
}
}
解决方案
我发现了一个简单的solution.I可以使用谷歌直接映射的意图,我不需要再创建一个自定义地图的活动:
如果(DataSources.ActivitiesList.length大于0)
{
串地址=http://maps.google.com/maps?daddr=+ DataSources.ActivitiesList [0] .SiteLatitude.toString()+,+ DataSources.ActivitiesList [0] .SiteLongitude.toString();
的for(int i = 1; I< DataSources.ActivitiesList.length;我++)
{
如果(DataSources.ActivitiesList [I] .SiteLatitude!= NULL)
地址+ =+到:+ DataSources.ActivitiesList [I] .SiteLatitude +,+ DataSources.ActivitiesList [I] .SiteLongitude;
}
意向意图=新的意图(android.content.Intent.ACTION_VIEW,Uri.parse(地址));
startActivity(意向);
打破;
}
I've created my own custom map to show my current location and multiple points on map. it works fine,but now i would like to show a route from my current location to every point on the map.Can you give me some suggestions how i can do that? thx.
this is my customMap activity:
public class CustomMapActivity extends MapActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
String provider = "";
Criteria crit = new Criteria();
Location loc = new Location("");
LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.marker);
ItemizedOverlayedClass itemizedoverlay = new ItemizedOverlayedClass(drawable, this);
try
{
MyLocationOverlay mylocationOverlay = new MyLocationOverlay(this, mapView);
mylocationOverlay.enableMyLocation();
mapView.getOverlays().add(mylocationOverlay);
provider = mlocManager.getBestProvider(crit, false);
loc = mlocManager.getLastKnownLocation(provider);
}
catch(Exception ex)
{
//Toast.makeText(this, "Unable to retrive provider", Toast.LENGTH_LONG).show();
}
for (ServiceActivity activity : DataSources.ActivitiesList)
{
try
{
Location siteLocation = new Location("");
siteLocation.setLatitude(activity.SiteLatitude);
siteLocation.setLongitude(activity.SiteLongitude);
GeoPoint point = new GeoPoint((int)(activity.SiteLatitude * 1e6),(int)(activity.SiteLongitude * 1e6));
OverlayItem overlayitem = new OverlayItem(point, activity.SiteName+ " " + activity.SiteAddress, "Distance to this location: " + String.valueOf(loc.distanceTo(siteLocation)/1000) + " km");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
catch(Exception ex)
{
@SuppressWarnings("unused")
AlertDialogClass alert = new AlertDialogClass(this,ex.getMessage());
}
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//mylocationOverlay.enableMyLocation();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_map, menu);
return true;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
and this is the overlay class:
package com.example.srwebservice;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
public class ItemizedOverlayedClass extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
Context mContext;
public ItemizedOverlayedClass(Drawable defaultMarker)
{
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}
public ItemizedOverlayedClass(Drawable defaultMarker, Context context)
{
super(boundCenterBottom(defaultMarker));
mContext = context;
}
@Override
protected OverlayItem createItem(int i)
{
// TODO Auto-generated method stub
return mOverlays.get(i);
}
@Override
public int size()
{
return mOverlays.size();
}
public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
}
解决方案
i found a simpler solution.I can use google maps intent directly, and i don't need to create a custom map activity anymore:
if(DataSources.ActivitiesList.length >0)
{
String address = "http://maps.google.com/maps?daddr=" + DataSources.ActivitiesList[0].SiteLatitude.toString() + "," + DataSources.ActivitiesList[0].SiteLongitude.toString();
for (int i= 1 ;i < DataSources.ActivitiesList.length ; i++)
{
if(DataSources.ActivitiesList[i].SiteLatitude != null)
address += "+to:" + DataSources.ActivitiesList[i].SiteLatitude + "," + DataSources.ActivitiesList[i].SiteLongitude;
}
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(address));
startActivity(intent);
break;
}
这篇关于在谷歌地图多点之间显示路线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文