地图:检查一条点是否在折线上

时间:2018-03-27 11:44:15

标签: java android google-maps

问题:我们在地图上有多条折线,当用户点击折线时,需要检查该点是否在折线上,并且还需要提取点击点的纬度。

已知:

可以通过在地图上设置点击侦听器来提取LatLong,并检测折线点击,我们可以使用折线点击侦听器,但需要一个结合两者的解决方案。也就是说,只要用户点击折线,我们就可以为该点提取合理正确的latlong。(不是在地图上点击/点击不在折线上)

1 个答案:

答案 0 :(得分:1)

首先,您需要创建一个结构来存储创建的折线:

List<Polyline> polylines = new ArrayList<Polyline>();

并将您创建的每条折线添加到List

polylines.add(mMap.addPolyline(yourPolylineOptions));

然后,您可以使用Google Maps Android API Utility Library中的PolyUtil.isLocationOnPath方法来了解是否已点击折线(在此示例中使用100米公差。这意味着如果用户使用折线被视为已点击点击100米以下的折线或更少):

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
        public void onMapClick(LatLng click) {
            boolean isPolylineClicked = false;
            for (Polyline polyline : polylines) {
                if (PolyUtil.isLocationOnPath(click, polyline.getPoints(), false, 100)) {
                    isPolylineClicked = true;
                    // Polyline clicked!
                }
            }

            if (!isPolylineClicked) {
                // Other OnMapClickListener behavior
            }
        }
    }
});