【发布时间】:2019-05-26 22:01:02
【问题描述】:
当我点击折线时,我希望时间(自定义对象)显示在该特定纬度长期位置。
实现折线的代码
PolylineOptions lineOptions = new PolylineOptions().width(7).color(Color.BLACK).geodesic(true);
for (int i = 0; i < points.size(); i++) {
LatLng latLng1 = new LatLng(Double.parseDouble(points.get(i).getmLatitude()), Double.parseDouble(points.get(i).getmLongitude()));
lineOptions.add(latLng1);
}
if (mPolyline != null) {
mPolyline.remove();
}
mPolyline = mMap.addPolyline(lineOptions);
mPolyline.setClickable(true);
for (int i = 0; i < points.size(); i++) {
//setting tags to be used on ployline click
mPolyline.setTag(points.get(i).getTime());
}
List<PatternItem> pattern = Arrays.asList(
new Gap(15), new Dash(15), new Gap(15));
mPolyline.setPattern(pattern);
mPolyline.setJointType(JointType.ROUND);
现在,当我单击折线时,我只会得到一个对所有人都相同的标签。我想要与 lat long 相关的每个折线位置的唯一标签(自定义对象)
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
@Override
public void onPolylineClick(Polyline polyline) {
Toast.makeText(mContext, (String) polyline.getTag(), Toast.LENGTH_SHORT).show();
}
});
感谢您的贡献:)
编辑
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
boolean isOnRoute = PolyUtil.isLocationOnPath(latLng, lineOptions.getPoints(), false, 25);
if (isOnRoute) {
for (LocationVo mCoordinates : points) {
double distanceInMeters = SphericalUtil.computeDistanceBetween(latLng, mCoordinates.getmLatLong());
boolean isWithin50m = distanceInMeters < 50;
if (isWithin50m) {
Toast.makeText(mContext, mCoordinates.getTime(), Toast.LENGTH_SHORT).show();
break;
}
}
}
}
});
并非我的所有折线都符合条件并且点击时不显示吐司
【问题讨论】:
-
你不能用标签到达那里 - 你最好使用
onMapClickListener并计算最近点,如果在points的容差显示时间内。请参阅 android-maps-utils 获取PolyLine.isLocationOnPath和SphericalUtil.computeDistanceBetween。不幸的是,polyLineListener 没有给出点击点,否则你可以在那里进行计算。 -
@Andy 确切地说已经有 18 天了,我能够通过关注您的评论来显示折线单击的时间谢谢!不过我有一个问题,我比较从 SphericalUtil.computeDistanceBetween 得到的距离小于 50 米,并不是我所有的折线点击都显示时间请检查我已经编辑了我的问题
标签: android google-maps google-maps-markers google-polyline