Java 映射:检查点是否在多段线上

Java 映射:检查点是否在多段线上,java,android,google-maps,Java,Android,Google Maps,问题:地图上有多条多段线,当用户点击一条多段线时,需要检查点是否在多段线上,并且需要提取单击点的板条 已知: LatLong可以通过在地图上设置click listener来提取,要检测多段线单击,我们可以使用多段线单击listener,但需要一个将两者结合起来的解决方案。也就是说,每当用户点击多段线时,我们都可以提取该点的合理正确latlong。(不是点击/单击不在多段线上的地图)首先,您需要创建一个结构来存储创建的多段线: List<Polyline> polylines = n

问题:地图上有多条多段线,当用户点击一条多段线时,需要检查点是否在多段线上,并且需要提取单击点的板条

已知:


LatLong可以通过在地图上设置click listener来提取,要检测多段线单击,我们可以使用多段线单击listener,但需要一个将两者结合起来的解决方案。也就是说,每当用户点击多段线时,我们都可以提取该点的合理正确latlong。(不是点击/单击不在多段线上的地图)

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

List<Polyline> polylines = new ArrayList<Polyline>();
然后,您可以使用中的
PolyUtil.isLocationOnPath
方法来了解是否已单击多段线(在本例中使用100米公差。这意味着如果用户单击距离多段线100米或更少的多段线,则视为已单击多段线):


这似乎是一个合理的请求—理想情况下,它将是回调的一个参数—因为这似乎不可用(我想知道您是否同时得到两个回调(映射/多段线))然后我会说,在mapclick监听器中实现多段线监听器,方法是使用android地图实用程序PolyUtil.isLocationnPath,为其提供多条多段线的并集(或者如果需要知道哪个多段线,则保持它们唯一)。这样做的一个好处是,您还可以自定义多段线接触的公差。感谢您的解决方案,这是可行的,但问题是单击多段线会妨碍地图单击事件。任何解决方案都可以添加自定义的
谷歌地图。如果未单击多段线,则OnMapClickListener
。看看我最新的答案
polylines.add(mMap.addPolyline(yourPolylineOptions));
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
            }
        }
    }
});