获取两个位置之间的距离并绘制线android谷歌地图

Sha*_*ady 2 java android geolocation google-geolocation

我有一个应用程序,可以打开地图并用标记缩放我的位置,然后如果我长按任何位置,它会将该位置保存在数据库中,一切正常,但我无法管理的一件事是在两个位置标记之间绘制一条路径线。

这是三个全局变量

 Location myLocation;
 LatLng onmaplongclicklastlatlng;
 private GoogleMap mMap;
Run Code Online (Sandbox Code Playgroud)

mylocation由我分配LocationListener,并且onmaplongclicklastlatlng当我长按地图上的任何位置时分配。

将标记放置在两个位置上已完成,我已经有了要在其上画线的两个点。

我只需要在这两个位置之间画一条线(我当前的位置在myLocation变量中定期更新)

每当我长按地图时,onmaplongclicklastlatlng就会发生变化。

整个代码已完成,我有一个button想要用于该行的代码,因为我可以通过此方法draw访问这两个位置,其他代码无需更改。variablesbutton

public void getLine(View view) {

    // need to draw a line here from user gps posiution to the marker location    
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多教程,但由于某种原因它们不起作用,任何帮助将不胜感激。

哦,最后但并非最不重要的一点

onmaplongclicklastlatlng
Run Code Online (Sandbox Code Playgroud)

是 LatLng 且

myLocation
Run Code Online (Sandbox Code Playgroud)

是一个位置

但它们可以互换以适应目的

ex. Location maplocation = new Location(onmaplongclicklastlatlng
.latitude, onmaplongclicklastlatlng.longitude);
Run Code Online (Sandbox Code Playgroud)

和

Latlng myLatLng = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());
Run Code Online (Sandbox Code Playgroud)

正如我所说,任何帮助将不胜感激。如果还需要任何其他信息,请告诉我,我将编辑问题。

Sha*_*sul 5

要计算两个位置之间的准确距离,您必须使用Google Map Distance Matrix API。如下构建您的网址。

https://maps.googleapis.com/maps/api/distancematrix/json?" +"origin=" + origin.latitude + "," + origin.longitude+ "&" +"destination=" + dest.latitude + "," + dest.longitude +"&sensor=false&units=metric&mode=driving" + "&" + key=YOUR_API_KEY
Run Code Online (Sandbox Code Playgroud)

要在两个位置之间画线,您必须首先使用Google Map Direction Api,构建您的网址,如下所示

https://maps.googleapis.com/maps/api/directions/json?" +"origin=" + origin.latitude + "," + origin.longitude+ "&" +"destination=" + dest.latitude + "," + dest.longitude +"&sensor=false&units=metric&mode=driving" + "&" + key=YOUR_API_KEY
Run Code Online (Sandbox Code Playgroud)

上面的 api 调用返回一个 latlng 列表,将列表添加到折线中

 Polyline polyline1 = googleMap.addPolyline(new PolylineOptions()
                .clickable(true)
                .addAll(latlngList));
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。