Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将信息窗口放置在远离重叠多段线的位置_Android_Google Maps_Google Maps Markers_Google Polyline_Polylineoptions - Fatal编程技术网

Android 将信息窗口放置在远离重叠多段线的位置

Android 将信息窗口放置在远离重叠多段线的位置,android,google-maps,google-maps-markers,google-polyline,polylineoptions,Android,Google Maps,Google Maps Markers,Google Polyline,Polylineoptions,我正在开发一个Android应用程序,其中包含一个带有谷歌地图的活动,我用多段线在两个位置之间绘制路径。我使用infowindow在源和目标添加了标记,其中显示了一些数据,但这些infowindow会阻止多段线,并使用户可以缩放地图以查看路径。有没有一种方法可以像优步那样移动infowindow 任何帮助都将不胜感激。 谢谢。这个问题实际上有两个部分:(1)确定信息窗口的位置;(2)如何到达该位置。我将主要集中在(1)上,并尝试为(2)提供参考 (请注意,还有第三个问题可以从动画gif中推断出来

我正在开发一个Android应用程序,其中包含一个带有谷歌地图的活动,我用多段线在两个位置之间绘制路径。我使用infowindow在源和目标添加了标记,其中显示了一些数据,但这些infowindow会阻止多段线,并使用户可以缩放地图以查看路径。有没有一种方法可以像优步那样移动infowindow

任何帮助都将不胜感激。
谢谢。

这个问题实际上有两个部分:(1)确定信息窗口的位置;(2)如何到达该位置。我将主要集中在(1)上,并尝试为(2)提供参考

(请注意,还有第三个问题可以从动画gif中推断出来:“主页”的信息窗口被调整,因为它在最终视图中被剪裁了-我在最后添加了一种方法。)

(1)的一种方法是围绕从点a到点B的路径创建一个边界矩形。这是对问题的简化,有缺点有待说明,但是一种很好的初始方法。有一些优化,我想你很快就会意识到,在极端情况下,它们更适合这个位置

使用此边界矩形(R)确定相对于相关标记定位点(d1 vs d2)的最小尺寸

然后,使用最小尺寸,您可以计算从定位点到信息窗口最近一侧的屏幕距离(f)。从最近的点可以确定信息窗口的定位偏移

首先是一些有多种用途的图片:(a)通过标签识别关键位置;(b)开始考虑更复杂的问题:

最简单的情况如图所示…:

…但标签有点拥挤,因此第二个较松的箱子如图所示:

确定边界矩形很简单,但效率很低。在路径的各个点上循环(从我的位置到家),并保持纬度和经度的最大值和最小值(注意-180到180经度交叉是一个普遍的复杂性,这里没有提到-请记住)。这将产生:

LatLng upperLeft (maxLat, minLng)
LatLng lowerRight (minLat, maxLng)
因此,确定A的信息窗口的位置是:

Compute the length (in meters) from A to side of rectangle by using Point A to (A lat, M lng) and Point A to (M lat, A Lng).  (Use `SphericalUtil.distanceBetween`)

Determine the lesser of the two measurements, L.

Use L (distance in meters) to compute a screen pixel equivalent S.

Adjust S to offset from edge of BR (Sadj)

Use Sadj (in screen pixels) to compute the Info Window offset (in screen pixels) taking into account the Info Window anchor point and the dimension of the Info Window.

Set the info window anchor (which is relative to the marker coordinate system) and render.
优化:假设您更喜欢第二张图片中“家”的位置,比如:

然后优化只考虑较小的边界矩形,只使用路径的较近段的子集。因此,这导致了下一个问题,即确定何时使用d1/d2的阈值进行优化。当缩放级别不包括两个点时,将使用相同的优化;只需使用屏幕上的点来计算边界矩形


对于第三个问题,缩放后剪裁“主页”是为了在应用边框时考虑信息窗口的尺寸-这样,最小尺寸将始终包括信息窗口的相应范围。

请再次阅读问题@SarthakGandhi。我非常感谢您的时间,现在我知道了实现所需的方法,完成后我将发布实现的代码作为答案。Thanks@Harsha你为Android实现了吗?请分享代码。