我想点击谷歌地图 v2 安卓地图上的一个点。如果单击的点与折线路径上的某个点相交,则显示该折线。我没有看到任何记录在案的 android 中折线的可点击事件。我试图扩展当前的折线对象(标记为最终)
我还有什么其他选择?
我想点击谷歌地图 v2 安卓地图上的一个点。如果单击的点与折线路径上的某个点相交,则显示该折线。我没有看到任何记录在案的 android 中折线的可点击事件。我试图扩展当前的折线对象(标记为最终)
我还有什么其他选择?
您可以使用库: https ://github.com/googlemaps/android-maps-utils
并使用下一个方法(在 OnMapClickListener 中)检测对折线的点击:
PolyUtil.isLocationOnPath(point, polyline.getPoints(), isGeodesic, tolerance);
随着地图 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) {
....
}
快乐编码:)
注册一个OnMapClickListener
. 自己确定给定的点击是否在您的线路上。如果是,请在这种情况下做任何你想做的事情。
我有一个类似的问题,我无法处理折线上的点击事件。我使用的是 Xamarin for Android,它是 C#,但在这种情况下,功能与 Android Java 库基本相同。
最后,我最终做了似乎是唯一的选择。
这涉及处理我的折线的所有中点(其中大约有 1300 个)。每一次OnMapClick
,我都采用LatLng
了点击事件,并在它与静态中所有折线的中点之间执行了一个距离公式List<PolylineOptions>
。然后我将地图标记附加到最近的折线。
从多段线上点击,它会在大约四分之一秒内弹出一个标记。
我想 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 上进行了测试,所以我认为它并不太低效。
如果您正在使用,com.google.android.gms:play-services-maps:8.4.0
则它包括折线单击侦听器
googleMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
{
@Override
public void onPolylineClick(Polyline polyline)
{
//do your work selected polyline
}
});
PolylineOptions line = new PolylineOptions();
Polyline polyline = googleMap.addPolyline(line);
polyline.setClickable(true);