6

グーグルマップv2アンドロイドマップのスポットをクリックしたいのですが。クリックしたポイントがポリラインパス上のポイントと交差する場合は、ポリラインを表示します。Androidでポリラインのクリック可能なイベントが文書化されていません。現在のポリラインオブジェクトを拡張しようとしました(finalとマークされています)

他にどのようなオプションがありますか?

4

5 に答える 5

15

ライブラリを使用できます: https://github.com/googlemaps/android-maps-utils

次のメソッド (OnMapClickListener 内) を使用して、ポリラインへのクリックを検出します。

  PolyUtil.isLocationOnPath(point, polyline.getPoints(), isGeodesic, tolerance);
于 2014-11-26T23:00:19.873 に答える
13

Maps API v8.4の最近の更新により、クリッカブルが導入されました Polyline

ドキュメントで述べたように:

を使用しOnPolylineClickListenerて、クリック可能なポリラインでのクリック イベントをリッスンします。このリスナーをマップに設定するには、 を呼び出します googleMap.setOnPolylineClickListener(...)onPolylineClick(Polyline)ユーザーがポリラインをクリックすると、コールバックを受け取り ます。

グラドル依存性:

compile 'com.google.android.gms:play-services-maps:8.4.0'

コールバックを実装します:GoogleMap.OnPolylineClickListener

ポリラインを初期化:

Polyline polyline = googleMap.addPolyline(options);
polyline.setClickable(true);
...

イベントを受け取る

@Override
public void onPolylineClick(Polyline polyline) {
     ....
}

ハッピーコーディング:)

于 2016-01-27T10:59:33.303 に答える
2

ポリラインでクリック イベントを処理できないという同様の問題がありました。私は C# である Xamarin for Android を使用していましたが、この場合、機能は Android Java ライブラリとほぼ同じです。

結局、私は唯一の選択肢と思われる方法を実行することになりました。

これには、ポリラインのすべての中間点 (約 1300 あります) の処理が含まれていました。すべての で、クリック イベントのOnMapClickを取得し、LatLngそれと静的 のすべてのポリラインの中点との間の距離式を実行しましたList<PolylineOptions>。次に、マップ マーカーを最も近いポリラインにアタッチしました。

ポリラインをタップすると、約 4 分の 1 秒でマーカーがポップアップ表示されます。

Google Maps API から実装されたマーカー クリック イベントも同様の方法で機能すると思います。

これは、クリックに最も近いポイントの検索を処理する for ループです。

int i = 0;//create an indexer for the loop
double shortestDist = 100;//set an initial very large dist just to be safe
int myIndex = 0;//set variable that will store the running index of the closest point
foreach (PolylineOptions po in myPolylines) {
    var thisDist = Distance (point, midPoint (po.Points [0].Latitude, po.Points [0].Longitude, po.Points [1].Latitude, po.Points [1].Longitude));//calculate distance between point and midpoint of polyline
    if (thisDist < shortestDist) {
        shortestDist = thisDist;//remember current shortest distance
        myIndex = i;//set closest polyline index to current loop iteration
    }
    i++;
} 

私はそれが最もきれいなコードではないことを知っていますが、それは仕事を成し遂げます. インターネットのどこにもこれに対する本当の答えがなかったので、ここにあります。中点を事前に計算し、それらを同じサイズのリストに保存し、マップをクリックするたびに各ポリラインに対して中点式を呼び出す必要がないようにすることで、おそらくより効率的になる可能性がありますが、すでに非常に高速に動作しています.

編集

ちなみに、Galaxy s3でテストを行っているので、それほど効率的ではないと思います。

于 2014-08-04T14:41:20.063 に答える
2

を登録OnMapClickListenerます。特定のクリックが自分の回線上にあるかどうかを自分で判断します。もしそうなら、この場合あなたがやりたかったことは何でもしてください。

于 2013-01-19T16:44:42.933 に答える