5

Google Maps API v2 を使用して地図上に動的ルートを描画するベスト プラクティスは何だろうと思っています。ユーザーが移動している間にルートを延長できるマップが必要です。Polyline と PolylineOptions を使用することによる明らかな解決策があるようです。しかし、ポリラインをインスタンス化したでポイントを追加する簡単な方法が見つかりません。ポリラインを描画するには、次のようにします。

PolylineOptions polylineOptions = new PolylineOptions();
polylineOptions.add(POINT1, POINT2, POINT3);
Polyline line = googleMap.addPolyline(polylineOptions);

しかし、線を GoogleMap に渡した後、新しい点を追加することはできません。何かのようなもの

polylineOptions.add(POINT1, POINT2, POINT3);

私のルートには何も追加しません。

完全な新しいポリラインを追加するだけです。しかし、既存のものだけを延長する方法はありませんか?ポリラインのすべてのポイントを取得し、新しいポイントを追加して、それらをラインに書き戻す方法を見つけました。

List<LatLng> points = line.getPoints();
points.add(POINT4);
line.setPoints(points);

しかし、私には面倒なようです。何か案は?

4

2 に答える 2

3

クラスで、という名前mainActivityのプライベート静的LatLng変数を定義し、それを最初prevに初期化します。(0,0)また、フラグ変数を作成し、それに 0 を代入します。リスナーのメソッドで、という名前OnLocationChangedのローカル変数を作成し、ここで現在の座標を取得します...最初に flag の値を確認し、0 の場合は に割り当てます。次に、ポリラインを追加します。LatLngcurrentcurrentprev

再度割り当てcurrentますprev(これは、最初の時間以降はフラグが 1 になるため、毎回発生します)

例えば:

public void onLocationChanged(Location location) 
{

    LatLng current = new LatLng(location.getLatitude(), location.getLongitude());

    if(flag==0)  //when the first update comes, we have no previous points,hence this 
    {
        prev=current;
        flag=1;
    }
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(current, 16);
    map.animateCamera(update);
    map.addPolyline((new PolylineOptions())
        .add(prev, current).width(6).color(Color.BLUE)
        .visible(true));
    prev=current;
    current = null;                    
}

このようなもの。もちろん、パフォーマンスを向上させることができます。これは単なるサンプル コードです。しかし、それはうまくいくはずです。ポリラインが前と現在のポイントのみを追加するたびに、ポイントごとに延長されます。

于 2014-06-17T17:06:16.667 に答える
0

ドキュメントを見るとpolylineOptions.add(LatLng)googleMap.addPolyline(polylineOptions)メソッドがオブジェクトを返すように見えpolylineOptionsます。最初のメソッドも、最後にポイントを追加してpolylineOptions 戻ります。

polylineOptionsをもう一度追加するか、もう一度追加する前にgoogleMap.addPolyline(polylineOptions)使用する必要があると思います。googleMap.clear()このような何か:

polylineOptions = googleMap.addPolyline(polylineOptions);
// googleMap.clear();
googleMap.addPolyline(polylineOptions.add(point));
于 2012-12-18T13:07:10.507 に答える