8

我有一张带有叠加层的地图,我想缓存它——在用户在地图上访问的每个地方(这是一个矩形区域)——我检查我是否有一个位于这个矩形中的叠加层的缓存。

为了改进缓存(所以如果用户以前在同一个矩形上,除了现在他离前一个矩形几米远) - 我想“圆”坐标。

这样,每次用户处于矩形时 - 我检查这个矩形是否类似于以前缓存的矩形,如果是,我会带来缓存的结果。

此外,如果用户被缩小并且他的矩形包含在更大的(以前缓存的)矩形中 - 那么我也可以使用缓存的矩形。

有什么建议么 ?

4

3 回答 3

1

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

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 - 我没有尝试运行它。无论如何,我希望你能明白要点。

于 2013-02-15T11:32:25.387 回答
1

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

假设我们有一个名为 cachedPoints 的数据结构,一个名为 maxdistance 的相关点之间的最大距离,以及一个我们试图检查它是否靠近另一个调用点的新点。

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

另一种方法是使用按x或纬度排序的数据结构,然后在点的maxdistance范围内搜索是否存在x或纬度的缓存点,然后检查y或经度。它会快一点,但它需要某种哈希来实现,并增加了一堆你可能不需要的复杂性。

希望这就是你要问的。

于 2013-02-13T20:26:09.883 回答
0

嘿,您可以在 Android 的 Google 地图 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);
于 2013-02-16T10:13:49.637 回答