Android 谷歌地图 行车路线
Posted
技术标签:
【中文标题】Android 谷歌地图 行车路线【英文标题】:Android Google Maps Driving Direction 【发布时间】:2012-11-21 12:07:31 【问题描述】:我在我的论文中开发一个安卓谷歌地图,我能问一些关于安卓驾驶方向的问题吗?
这是我的问题。
“当一个按钮被点击时,如何在安卓谷歌地图中生成一个随机的行车路线,它会随机给出从起点到终点的路径。”
谢谢!
我通过这个问了谷歌地图。
private void parsing(GeoPoint start, GeoPoint end) throws ClientProtocolException, IOException, JSONException, URISyntaxException
HttpClient httpclient = new DefaultHttpClient();
StringBuilder urlstring = new StringBuilder();
urlstring.append("https://maps.googleapis.com/maps/api/directions/json?origin=")
.append(Double.toString((double)start.getLatitudeE6()/1E6)).append(",").append(Double.toString((double)start.getLongitudeE6()/1E6)).append("&destination=")
.append(Double.toString((double)end.getLatitudeE6()/1E6)).append(",").append(Double.toString((double)end.getLongitudeE6()/1E6))
.append("&sensor=false");
//urlstring.append("http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=true");
url = new URI(urlstring.toString());
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = null;
is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null)
sb.append(line + "\n");
is.close();
reader.close();
String result = sb.toString();
JSONObject jsonObject = new JSONObject(result);
JSONArray routeArray = jsonObject.getJSONArray("routes");
JSONObject routes = routeArray.getJSONObject(0);
JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
String encodedString = overviewPolylines.getString("points");
List<GeoPoint> pointToDraw = decodePoly(encodedString);
//Added line:
mv_mapview.getOverlays().add(new RoutePathOverlay(pointToDraw));
点击地图。
class MapOverlay extends Overlay
@Override
public boolean onTap(final GeoPoint p, MapView mapView)
// TODO Auto-generated method stub
geop_Tpoint = p;
mcon_mapcontrol = mapView.getController();
mcon_mapcontrol.animateTo(p);
mv_mapview.invalidate();
longitude = (int)(p.getLongitudeE6()*1E6);
latitude = (int)(p.getLatitudeE6()*1E6);
new AlertDialog.Builder(ShowMap.this)
.setTitle("Routes")
.setMessage("Display Routes?")
.setNegativeButton("NO",
new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog,
int which)
// TODO Auto-generated method stub
textlocation.setText("Tap in the Map for Destination!");
dialog.dismiss();
)
.setPositiveButton("YES",
new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog,
int which)
// TODO Auto-generated method stub
try
textlocation.setText("");
parsing(geop_startpoint,geop_Tpoint);
geocodeExecuter(geop_startpoint,geop_Tpoint);
showButton.setEnabled(true);
catch(Exception e)
textlocation.setText(""+ e.getMessage());
).show();
showButton.setEnabled(true);
return true;
起点是通过 GPS,它会告诉我我所在的位置。
【问题讨论】:
这个问题太笼统了,具体说明一下。你试过什么? 对不起,对不起我的语法。我的意思是,我有一个起点和一个目的地。现在我的应用程序可以绘制一条路径,使用 JSON 从起点到目标点,我的问题是,我怎样才能用相同的点更改路径?例如在谷歌地图 v3 中我可以拖动路径,但在我的如果我将使用一个按钮来生成它。 【参考方案1】:这将帮助您获得从 A 点到 B 点的路线。
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=" + startLatitude + "," + startLongitude + "&daddr=" + destlat + "," + destlon));
startActivity(intent);
【讨论】:
【参考方案2】:这取决于你如何问路到谷歌地图。 如果您使用指定源和目标的链接创建意图,您可以尝试调用如下内容:
https://maps.google.com/maps?saddr=START_POINT&daddr=MIDDLE_POINT+to:DESTINATION_POINT
这也接受 GPS 坐标,所以你也可以这样调用:
https://maps.google.com/maps?saddr=START_POINT&daddr=XX.YYYYY,WW.ZZZZZ+to:DESTINATION_POINT
如果起点和终点是固定的,您可以尝试执行以下操作:
获取起点的 GPS 坐标 获取目的地的 GPS 坐标 生成几个不超过源和目标定义的矩形的坐标 (X-Y)这应该会在 A 和 B 之间的某处生成一个随机点。
如果您将中间点放在玉米地或类似的地方,Google 地图足够聪明,可以选择最靠近道路的点来生成方向。
更新: 阅读代码后: 我认为实现结果的最快方法是找到 A 和 B 的 GPS 位置,然后在两者之间生成一个随机点并进行 2 次调用:A-RandomPoint B-RandomPoint。
总距离为 A-R 行程和 R-B 行程之和,时间相同。
关于中点的计算: 第一:设定界限。 如果要计算X:取A点的X和B点的X。 此时: minX 将是最低的,而 maxX 将是最高的(如果你的分数接近 greenwitch,你可能需要仔细考虑你在做什么)。 现在在你的最大值和最小值之间生成一个随机浮点数。这是一项微不足道的任务,并且有很多结果。举个例子:How do I generate random integers within a specific range in Java?
【讨论】:
在我的情况下,我通过 GPS 获得起点,而我的目的地是当我点击地图时。并且出现一个对话框,要求生成路线/路径..但是如果我必须生成另一个路线/路径,我如何通过单击另一个按钮来实现呢?..非常感谢。 非常感谢您的回答 barkausen.. 它给了我很多想法..:) 您对此有什么想法吗?这是我的另一篇文章。***.com/questions/13494424/… 你能给我一些可以帮助我的代码吗?..非常感谢..我没有得到你的指示,因为我是安卓谷歌地图的初学者。 :) 在哪方面帮助您?你已经有了解码谷歌地图数据的代码,你只需要在 Xa-Xb 和 Ya-Yb 之间找到一个浮点数并将其放入请求 O.o【参考方案3】:这就是我在 Java 中转换它的方式。
public List<GeoPoint> findCoordinatesInACircle(double lat, double longi,double radius)
double newLat;
double newLong;
List<GeoPoint> searchpoints = new ArrayList<GeoPoint>();
double rLat=(radius/6371)*(180/Math.PI);
double rLon= rLat/Math.cos(longi * (Math.PI/180));
for(int i =0 ; i < 181; i++ )
double iRad = i*(Math.PI/180);
newLat = lat + (rLat * Math.sin(iRad));
newLong = longi + (rLon * Math.cos(iRad));
GeoPoint onePoint = new GeoPoint((int)(float)(newLat),(int)(float)(newLong));
if(i%pointInterval == 0)
searchpoints.add(onePoint);
return searchpoints;
【讨论】:
以上是关于Android 谷歌地图 行车路线的主要内容,如果未能解决你的问题,请参考以下文章
谷歌地图将行车路线导出到 kml 文件 - java geogoogle