如何在谷歌地图中绘制多个地理点之间的路线(注意:这是公交车站路线)?

Posted

技术标签:

【中文标题】如何在谷歌地图中绘制多个地理点之间的路线(注意:这是公交车站路线)?【英文标题】:How to draw a route between many geo points in google map (note: this is a bus stop route line)? 【发布时间】:2019-06-07 03:49:27 【问题描述】:

This is my image.Wrong route. I want to this route like that.Correct route.

我有很多静态地理点作为公交车站的地理点。有时地理点存在上百个。我可以使用折线进行路线,但它显示的是直线。我想查看道路线。

我尝试并寻找很多问题,但只看到两点之间。我已经尝试使用谷歌的道路 API。但这仅限于 100 点。所以我不能使用道路 API。请指出我。

public void getBusStopInfo() 
    HttpService httpService = NetManager.getInstance().create(HttpService.class);
    Observable<GdResultData> observable = httpService.findByRoute(id);
    RxManager.getInstance().getHttpListResult(observable, newRxSubscriber<GdResultBean<List<BusStopServerBean>>>(getContext()) 
        @Override
        protected void _onError(Throwable e) 
            e.printStackTrace();
            if (mLoadingDialog != null) 
                mLoadingDialog.dismiss();
            
        

        @Override
        protected void _onNext(GdResultBean<List<BusStopServerBean>>listGdResultBean) 
            if (listGdResultBean.getErrorID() != HttpFields.HTTP_RESULT_OK) 
                return;
            
            List<BusStopServerBean> object = listGdResultBean.getObject();
            for (BusStopServerBean busStopServerBean : object) 
                if (isMmLanguage) 
                    mMap.addMarker(new MarkerOptions().position(new LatLng(busStopServerBean.getLat(), busStopServerBean.getLng()))
                           .title(busStopServerBean.getNameMm()).snippet(busStopServerBean.getRoadMm())
                            .icon(BitmapDescriptorFactory.fromResource(R.mipmap.bus_stop_circler)).alpha(0.9f).flat(true))
                            .setTag(busStopServerBean.getId());
                 else 
                    mMap.addMarker(new MarkerOptions().position(new LatLng(busStopServerBean.getLat(), busStopServerBean.getLng()))
                            .title(busStopServerBean.getNameEn()).snippet(busStopServerBean
                                   .getRoadEn()).icon(BitmapDescriptorFactory.fromResource(R.mipmap.bus_stop_circler))
                           .alpha(0.9f).flat(true)).setTag(busStopServerBean.getId());
                
            
            insertBusLine(object);
            mLoadingDialog.dismiss();
        
    , BusStopServerBean.class);




private void insertBusLine(List<BusStopServerBean> object) 
    if (object == null || object.size() == 0) 
        return;
    
    LatLngBounds.Builder boundBuilder = new LatLngBounds.Builder();
    LatLng latLng;

//This is for route
    PolylineOptions polylineOptions = new PolylineOptions()
            .color(Color.parseColor(color))
            .geodesic(false)
            .width(5);

    //this is for geo points latlng over 100 obj size
    for (BusStopServerBean busStopServerBean : object) 
        latLng = new LatLng(busStopServerBean.getLat(), busStopServerBean.getLng());busStopServerBean.getLng()));
        polylineOptions.add(latLng);
        boundBuilder.include(latLng);
    


    mMap.addPolyline(polylineOptions);//this is show route on map[enter image description here][1]
    mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(boundBuilder.build(), 11));


【问题讨论】:

【参考方案1】:

具有多个航点的每条路线都由两个航点之间的路线组成。所以,考虑到restrictions:

注意:使用 10 个或更多航点或航点的查询 优化,支付更高的费率。了解有关发票的更多信息 适用于 Google Maps Platform 产品。

您可以将具有 100 多个航点的单个请求拆分为具有少于 10 个航点的多个请求(甚至并行运行),并将其结果组合起来以获得整个路线。

【讨论】:

@HZan 是的,没有其他办法。但是您应该将单个请求与多个航点拆分,以将不超过 10 个航点的请求相乘。还可以从Roads API 中查看Snap to Roads。 我通过roads api 进行了测试,但我的路线是直的,这是限制100 分。如果我在上面加上100 分,那就是错误。 @HZan 只需创建 10 个 10 个点的请求,而不是一个 100 个点。 你有任何示例或教程。

以上是关于如何在谷歌地图中绘制多个地理点之间的路线(注意:这是公交车站路线)?的主要内容,如果未能解决你的问题,请参考以下文章

使用位置坐标值在谷歌地图中绘制路线图

如何在android中的谷歌地图上绘制路线并计算多个标记之间的距离

在谷歌地图中做“沿途的兴趣点”

Android,在谷歌地图上绘制路线

如何在谷歌地图中绘制gpx文件

在谷歌地图上绘制方向