Как получить образец маршрута arcgis в android?

Я хочу получить маршрут между двумя местоположениями, потому что я нашел пример эсри-сервиса, например: http://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World . Но если я использую эту службу, я получаю ошибку как несанкционированный доступ к защищенной. Я не могу использовать эту услугу. Скажите, пожалуйста, если бесплатное обслуживание для получения маршрута на карте arcgis.

мой код:

public void getRouteFromSource(Geometry current_location,Geometry destination_point,boolean isCurrentLocation){
        routeLayer = new GraphicsLayer();
        mMapView.addLayer(routeLayer);

        // Initialize the RouteTask
        try {

        String routeTaskURL = "http://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World";
            mRouteTask = RouteTask.createOnlineRouteTask(routeTaskURL, null);

        } catch (Exception e1) {
            e1.printStackTrace();                       
        }

    // Add the hidden segments layer (for highlighting route segments)
    hiddenSegmentsLayer = new GraphicsLayer();
    mMapView.addLayer(hiddenSegmentsLayer);     

    QueryDirections(current_location, destination_point,isCurrentLocation);
}
private void QueryDirections(final Geometry sourceGeometry, final Geometry destinationGeometry,boolean isCurrentLocation) {

    // Show that the route is calculating

    if(isCurrentLocation==false){
    dialog = ProgressDialog.show(mContext, PollingStationLocatorContant.plase_wait,
            "Calculating route...", true);
    }

//  Log.e("mLocation", "mLocation  "+sourceGeometry);
//  Log.e("POINTTT", "POINTTT"+p);
    // Spawn the request off in a new thread to keep UI responsive
    Thread t = new Thread() {
        private RouteResult mResults;

        @Override
        public void run() {
            try {
                // Start building up routing parameters

                /*Point startPoint = new Point(78.4867, 17.3850);
                Point stopPoint = new Point(79.5941, 17.9689);*/

        //      Log.e("mLocation.getX()",""+ p.getX()+"---"+ p.getY());
        //      Log.e("mLocation.getY()",""+ mLocation.getX() +"----"+ mLocation.getY());

                //Point startPoint = new Point(mLocation.getX(), mLocation.getY());
                //Point stopPoint = new Point(p.getX(), p.getY());

                StopGraphic point1 = new StopGraphic(sourceGeometry);
                StopGraphic point2 = new StopGraphic(destinationGeometry);                  

                Log.e("point1", ""+point1);
                Log.e("point2", ""+point2);
                NAFeaturesAsFeature rfaf = new NAFeaturesAsFeature();
                // Convert point to EGS (decimal degrees)
                // Create the stop points (start at our location, go
                // to pressed location)
                rfaf.setFeatures(new Graphic[] { point1, point2 });
                rfaf.setCompressedRequest(true);

        //  RouteParameters r = new RouteParameters();

                RouteParameters rp = mRouteTask.retrieveDefaultRouteTaskParameters();                   

                //rp.setImpedanceAttributeName("Length");
                rp.setReturnDirections(false);
                // Assign the first cost attribute as the impedance

                rp.setStops(rfaf);
                // Set the routing service output SR to our map
                // service's SR
                rp.setOutSpatialReference(mMapView.getSpatialReference());
                //rp.setImpedanceAttributeName("");

                // Solve the route and use the results to update UI
                // when received
                mResults = mRouteTask.solve(rp);                    

                List<Route> routes = mResults.getRoutes();
                Route mRoute = routes.get(0);

                Geometry routeGeom = mRoute.getRouteGraphic().getGeometry();
                Graphic symbolGraphic = new Graphic(routeGeom, new SimpleLineSymbol(Color.BLUE,5));
                //SimpleMarkerSymbol sls = new SimpleMarkerSymbol(Color.RED, 10,STYLE.CIRCLE);
                PictureMarkerSymbol pls=new PictureMarkerSymbol(mContext.getResources().getDrawable(R.drawable.animation_image));
                mMapView.setExtent(routeGeom, 20);
                Graphic destinatonGraphic = new Graphic(sourceGeometry, pls);
                mGraphicsLayer.addGraphic(symbolGraphic);
                mDestinationGraphicLayer.addGraphic(destinatonGraphic);
                mMapView.addLayer(mGraphicsLayer);
                mMapView.addLayer(mDestinationGraphicLayer);

            mHandler.post(mUpdateResults);
            } catch (Exception e) {
                mDestinationGraphicLayer.removeAll();
                noRouteFound=true;


                 e.printStackTrace();
                mHandler.post(mUpdateResults);

            }
        }
    };
    // Start the operation
    t.start();
}

void updateUI() {

    if(dialog!=null && dialog.isShowing()){
    dialog.dismiss();
    if(noRouteFound){

        Toast.makeText(mContext, "Unable to find route.Please select with in State", Toast.LENGTH_LONG).show();
    }
    }       
    }

android,arcgis,

0

Ответов: 2


0

Не обращая внимания на службы геокодирования (которые могут быть вызваны бесплатно, если данные не хранятся), для служб маршрутизации требуется токен.

Как указано в документации :

Обязательные параметры : токен Используйте этот параметр для указания токена, который предоставляет идентификатор пользователя, имеющего разрешения на доступ к службе. Доступ к услугам, предоставляемым Esri, дает больше информации о том, как можно получить доступ к токену доступа.

Что вы можете сделать, так это перейти сюда и зарегистрировать бесплатную учетную запись разработчика. Вы получите бесплатный токен и связанный с ним размер бесплатных кредитов, которые вы можете использовать для запроса API маршрутизации.

Однако приведенная выше документация показывает образцы ответов для всех возможных ситуаций (ошибка, маршрут ok, маршрут не найден).


0

После создания бесплатной учетной записи разработчика выполните следующие действия.

Внутри вашей функции getRouteFromSource замените существующий код на это.

TOKEN = "The token you receive after you sign up";
CLIENT_ID = "The client_id you receive after you sign up";

try {
        UserCredentials authenticate= new UserCredentials();
        authenticate.setUserAccount("your username", "your password");
        authenticate.setUserToken(TOKEN, CLIENT_ID);
        mRouteTask = RouteTask
                .createOnlineRouteTask(
                        "http://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",
                        authenticate);
    } catch (Exception e1) {
        e1.printStackTrace();
    }

Это должно решить вашу проблему.

андроид, ArcGIS,