2016-07-22 17 views
0

Ich möchte Route zwischen zwei Standorten erhalten, dafür habe ich esri Sample Service gefunden, d. H.: http://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World. Aber wenn ich diesen Service benutze, erhalte ich Fehler als unautorisierter Zugang zu einem sicheren. Ich kann diesen Service nicht nutzen, bitte sagen Sie mir, wenn es einen kostenlosen Service für die Route auf arcgis Karte Vielen Dank.Wie bekomme ich eine Route arcgis in Android?

mein Code:

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(); 
    } 
    }  
    } 

Antwort

0

Geokodierung Dienste Ohne Berücksichtigung (die kostenlos aufgerufen werden kann, wenn die Daten nicht gespeichert ist) Routing-Dienste tun Token benötigt.

Wie in der documentation erklärte:

Erforderliche Parameter: Token Verwenden Sie diesen Parameter ein Token an, die die Identität eines Benutzer, der die Berechtigungen bietet den Dienst zuzugreifen. Der Zugriff auf die -Dienste, die von Esri bereitgestellt werden, bietet weitere Informationen dazu, wie ein solches Token erhalten werden kann.

Sie können here gehen und ein kostenloses Entwicklerkonto registrieren. Sie erhalten ein kostenloses Token und die damit verbundene Menge an kostenlosen Gutschriften, mit denen Sie die Routing-API abfragen können.

Die oben verlinkte Dokumentation zeigt jedoch Antwortbeispiele für alle möglichen Situationen (Fehler, Route ok, Route nicht gefunden).

0

Folgen Sie nach dem Erstellen eines kostenlosen Entwicklerkontos diesen Schritten.

In Ihrer Funktion getRouteFromSource ersetzen Sie den vorhandenen Code mit diesem.

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(); 
    } 

Dies sollte Ihr Problem lösen.