通过舍入坐标矩形caching重叠 – 如何?

我有一个覆盖图,我想caching的地图 – 用户在地图上(这是一个矩形区域)访问的每个地方 – 我检查,如果我有一个驻留在这个矩形的覆盖高速caching。

为了提高caching(所以如果用户以前在同一个矩形,除了现在他是从前一个矩形几米) – 我想“四舍五入”的坐标。

这样,每当用户在一个rectange – 我检查这个矩形是否类似于以前caching的矩形,如果是这样我带来caching的结果。

此外,如果用户缩小和他的矩形包含在一个更大(以前caching)的矩形 – 然后我也可以使用caching的矩形。

有什么build议么 ?

如果您只是想看如何对坐标进行分组,请确定x和y坐标之间的最大差异或者您想要的纬度和经度。 然后有两种方法可以将它们分组。 第一个比较容易,但是如果你有很多的话就会很慢。

假设我们有一个名为cachedPoints的数据结构,这个数据结构是一个叫做maxdistance的相关点之间的最大距离,我们试图去检查它是否接近另一个被调用的点。

for each cachedPoint in cachedPoints { if (point.x - cachedPoint.x < maxdistance) { if (point.y - cachedPoint.y < maxdistance) { cachedPoint.incrementvisits(); } } } 

另一种方法是使用按x或纬度sorting的数据结构,然后search是否存在x或纬度在点的最大距离内的caching点,然后检查y或经度。 它会快一点,但是需要一些散列才能实现,并增加了一些你可能不需要的复杂性。

希望这就是你要问的。

如果您设置了如下的数据结构:

 var a = { 'scales' : [50, 100, 200, 400, 1000], 'cachedRects': [{'location': 'rect-large-1234-5678.png', x: 1234, y: 5678, scale: 3} {'location': 'rect-small-1240-5685.png', x: 1240, y: 5685, scale: 1} ] } 

你可以使用模函数来做到这一点:

 var currentx = GetCurrentX(); var currenty = GetCurrentY(); var currentScale = GetCurrentScale(); var rectFound = false; foreach(rect in a.cachedRects) { if (rect.scale === currentScale && currentx % a.scales[currentScale] === rect.x && currenty % a.scales[currentScale] === rect.y) { rectFound = true; useOverlay(rect); break; } } if(!rectFound) { //could loop again for a larger rectangle of a lower scale. } 

以上可能会或可能不会成为有效的JS – 我还没有试图运行它。 无论如何,我希望你明白。

嘿,你可以添加标记在Android的谷歌地图V2。

在这里,我给代码添加标记

  MarkerOptions mOpt = new MarkerOptions(); mOpt.position(new LatLng(userHstry.getMyLatlng().latitude, userHstry.getMyLatlng().longitude)); // map.clear(); mOpt.title("Address : " + userHstry.getAddress()).snippet("Date : " + userHstry.getDate() + " , Time : " + userHstry.getTime()); map.addMarker(mOpt);