gpt4 book ai didi

android - 将 infoWindow 放置在远离重叠多段线的位置

转载 作者:行者123 更新时间:2023-11-29 23:45:55 27 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,其中包含一个带有谷歌地图的 Activity ,我在其中用多段线绘制了两个位置之间的路径。我在源和目的地添加了标记,信息窗口显示了一些数据,但这些信息窗口阻止了折线并使用户缩放 map 以查看路径。有没有办法像 Uber 那样移动信息窗口? Sample example of what I'm trying to achieve

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

最佳答案

这个问题实际上有两个部分:(1) 确定您想要信息窗口的位置和 (2) 如何将它放在那里。我将主要关注 (1) 并尝试为 (2) 提供引用。

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

(1) 的一种方法是在从 A 点到 B 点的路径周围创建一个边界矩形。这是对问题的简化,虽然有待展示的缺点,但却是一个很好的初始方法。我认为您很快就会意识到一些优化,以便在极端情况下更好地适应位置。

使用此边界矩形 (R) 确定相对于感兴趣的标记 anchor 的最小尺寸(d1 与 d2)。

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

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

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

enter image description here

...但是标签有点挤,所以这里显示了第二个松散的案例:

enter image description here

虽然效率低下,但确定边界矩形很简单。遍历路径点(从“我的位置”到“家”)并保持纬度和经度的最大值和最小值(请注意,-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.

优化:假设您更喜欢第二张图片中“家”的位置:

enter image description here

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

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

关于android - 将 infoWindow 放置在远离重叠多段线的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51414694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com