2017-01-19 5 views
0

Mapbox(4.2.1)を使用して私の位置から目標位置に線を引いています。私は非常に基本的なナビゲーション援助として直線を使用する意図があります。私はガイドラインOnMyLocationChanged()を再描画しています。しかし、私の場所が変更されると、私の新しい場所に線が引かれますが、MyLocationView(ユーザーアイコン)は更新されません(下の画像を参照)。私の場所からマーカーまでポリラインを描く

最終的にもう一度会議が終了しますが、時間がかかります。直線が正確な半径の内側に描かれているようですが、ユーザーのアイコンから直線をまっすぐに描くことができれば好きです。

ユーザー(地図上の実際のアイコン)とユーザーの移動に伴って更新される場所との間に線を引く簡単な方法はありますか?

マイOnMyLocationChangedは次のとおりです。

MapboxMap.OnMyLocationChangeListener listner = new MapboxMap.OnMyLocationChangeListener(){ 
     @Override 
     public void onMyLocationChange(final @Nullable Location locationChanged) { 
      //If we are not targeting anything or we are not tracking location 
      if(target == null || !map.isMyLocationEnabled()) return; 

      mapView.getMapAsync(new OnMapReadyCallback() { 
       @Override 
       public void onMapReady(MapboxMap mapboxMap) { 
        //Log.i("LOC-MAPLINE", "Drawing from mapLoc call"); 

        //Error if we don't have a location 
        if(!mapboxMap.isMyLocationEnabled() || locationChanged == null) return; 

        LatLng[] points = new LatLng[2]; 

        final Location myLoc = locationChanged; 

        LatLng loc = new LatLng(myLoc.getLatitude(), myLoc.getLongitude()); 
        LatLng dest = new LatLng(target.getLatitude(), target.getLongitude()); 
        points[0] = loc; 
        points[1] = dest; 

        mapboxMap.removeAnnotations(); 

        loadMarker(target); 


        PolylineOptions poly = new PolylineOptions() 
          .add(points) 
          .color(Color.parseColor("#3887be")) 
          .width(5); 
        line = mapboxMap.addPolyline(poly); 
       } 
      }); 
     } 
    }; 

Line error

どのような援助が大幅に高く評価されて、ありがとうございました!

EDIT(可能な重複した質問について - Google direction route from current location to known location) 私の質問はいくつかの理由で異なると思います。

  1. 私は方向のAPIからのもののように(私はターンの方向についてのターンを得ることに興味がないユーザアイコンオーバーレイの場所ではなく、実際の場所(精度の問題)

  2. を得ることにもっと心配です)

  3. 私はGoogleマップではなくマップボックスを使用しています(あまり確かではありませんが、いくつかの違いがあります)。

にもかかわらず、その質問には、ドキュメントによると、私の質問

+0

[現在の場所から既知の場所へのGoogleのルート](http://stackoverflow.com/questions/32810495/google-directi)の可能な複製現在の場所から現在地までの距離) –

+0

私はいくつかの理由で質問が異なると信じています: 1.私は実際の場所ではなくユーザーのアイコンオーバーレイの場所を取得することにもっと関心があります(精度の問題) 2.私は(方向のAPIからのもののように)ターン方向のためのターン 3.私はむしろ、GoogleマップよりもMapboxを使用しています(あまりにもわからないが、いくつかの違いがあるかもしれませんが得ることに興味がありません)。 それにもかかわらず、その質問は私の質問に答えていないようです。 – SCTaylor

+0

これが理由です**可能な複製** –

答えて

0

にお答えしていないようだあなた必要があるだけで、あなたのcurrentLocation(原点)と宛先を渡し、このメソッドを実装し

private void getRoute(Position origin, Position destination) throws ServicesException { 

    MapboxDirections client = new MapboxDirections.Builder() 
     .setOrigin(origin) 
     .setDestination(destination) 
     .setProfile(DirectionsCriteria.PROFILE_CYCLING) 
     .setAccessToken(MapboxAccountManager.getInstance().getAccessToken()) 
     .build(); 

    client.enqueueCall(new Callback<DirectionsResponse>() { 
     @Override 
     public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) { 
     // You can get the generic HTTP info about the response 
     Log.d(TAG, "Response code: " + response.code()); 
     if (response.body() == null) { 
      Log.e(TAG, "No routes found, make sure you set the right user and access token."); 
      return; 
     } else if (response.body().getRoutes().size() < 1) { 
      Log.e(TAG, "No routes found"); 
      return; 
     } 

     // Print some info about the route 
     currentRoute = response.body().getRoutes().get(0); 
     Log.d(TAG, "Distance: " + currentRoute.getDistance()); 
     Toast.makeText(
      DirectionsActivity.this, 
      "Route is " + currentRoute.getDistance() + " meters long.", 
      Toast.LENGTH_SHORT).show(); 

     // Draw the route on the map 
     drawRoute(currentRoute); 
     } 

     @Override 
     public void onFailure(Call<DirectionsResponse> call, Throwable throwable) { 
     Log.e(TAG, "Error: " + throwable.getMessage()); 
     Toast.makeText(DirectionsActivity.this, "Error: " + throwable.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    } 

private void drawRoute(DirectionsRoute route) { 
    // Convert LineString coordinates into LatLng[] 
    LineString lineString = LineString.fromPolyline(route.getGeometry(), Constants.OSRM_PRECISION_V5); 
    List<Position> coordinates = lineString.getCoordinates(); 
    LatLng[] points = new LatLng[coordinates.size()]; 
    for (int i = 0; i < coordinates.size(); i++) { 
     points[i] = new LatLng(
     coordinates.get(i).getLatitude(), 
     coordinates.get(i).getLongitude()); 
    } 

    // Draw Points on MapView 
    map.addPolyline(new PolylineOptions() 
     .add(points) 
     .color(Color.parseColor("#009688")) 
     .width(5)); 
    } 

参照https://www.mapbox.com/android-sdk/examples/directions/

+0

答えをいただきありがとうございます。私は方向APIを見てきましたが、私のニーズにはかなり不満です。私は単に私の場所と静的なポイントとの間に直線を描く必要があります。 私は単純な線の注釈を描く解決策を探していました。これは、画像に示されているように、ほぼ完全にズームしていると正確には正確には正しく機能していません。ナビゲーションAPIに追加のAPI呼び出しを行わなければ、これが可能になるはずです。 – SCTaylor

+0

あなたはdrawRouteをどんなルートでも実装しますか?あなたがまだ助けを必要としている場合は私に知らせて –

関連する問題