为了账号安全,请及时绑定邮箱和手机立即绑定

Android Studio 中的说明

Android Studio 中的说明

泛舟湖上清波郎朗 2021-11-24 16:06:20
我正在尝试研究如何在 android studio(谷歌地图)上获取从用户位置到选定标记的方向。你们有什么想法吗?
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

使用谷歌地图距离矩阵 api 通过给定代码查找从源到目的地的路径


DateTime now = new DateTime();

        try {

            DirectionsResult result = DirectionsApi.newRequest(getGeoContext())

                    .mode(TravelMode.DRIVING)

                    .origin(new com.google.maps.model.LatLng(fromLat, fromLng))

                    .destination(new com.google.maps.model.LatLng(ToLat, ToLng))

                    .departureTime(now)

                    .await();


            addMarkersToMap(result, googleMap);

            addPolyline(result, googleMap);


            if (loader!=null && loader.isShowing()){

                loader.dismiss();

            }

        } catch (ApiException ignored) {

            Log.e("Exception"," "+ignored.getMessage());

        } catch (InterruptedException | IOException e) {

            e.printStackTrace();

            Log.e("Exception"," InterruptedException "+e.getMessage());

        }

添加标记


private void addMarkersToMap(DirectionsResult results, GoogleMap mMap) {

        mMap.addMarker(new MarkerOptions().position(

                new LatLng(results.routes[0].legs[0].startLocation.lat,results.routes[0].legs[0].startLocation.lng))

                .title(from)

                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

        mMap.addMarker(new MarkerOptions().position(

                new LatLng(results.routes[0].legs[0].endLocation.lat,results.routes[0].legs[0].endLocation.lng))

                .title(to)

                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));

    }

绘制折线并超时以从谷歌的服务器获取数据


private GeoApiContext getGeoContext() {

        GeoApiContext geoApiContext = new GeoApiContext();

        return geoApiContext.setQueryRateLimit(3)

                .setApiKey(getString(R.string.directionsApiKey))

                .setConnectTimeout(1, TimeUnit.SECONDS)

                .setReadTimeout(1, TimeUnit.SECONDS)

                .setWriteTimeout(1, TimeUnit.SECONDS);

    }


private void addPolyline(DirectionsResult results, GoogleMap mMap) {

        List<LatLng> decodedPath = PolyUtil.decode(results.routes[0].overviewPolyline.getEncodedPath());


        int PATTERN_DASH_LENGTH_PX = 20;

        int PATTERN_GAP_LENGTH_PX = 20;

        PatternItem DASH = new Dash(PATTERN_DASH_LENGTH_PX);

        PatternItem GAP = new Gap(PATTERN_GAP_LENGTH_PX);

        List<PatternItem> PATTERN_POLYGON_ALPHA = Arrays.asList(GAP, DASH);


        mMap.addPolyline(new PolylineOptions()

                .geodesic(true)

                .color(getResources().getColor(R.color.colorPrimary))

                .width(5)

                .pattern(PATTERN_POLYGON_ALPHA)

                .addAll(decodedPath));

    }


查看完整回答
反对 回复 2021-11-24
?
繁星coding

TA贡献1797条经验 获得超4个赞

1.使用谷歌地图方向api获取方向latlng。谷歌方向api

2.之后,您需要使用折线在地图上绘制路径。

这是完整的教程链接


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信