我有一张带有叠加层的地图,我想缓存它——在用户在地图上访问的每个地方(这是一个矩形区域)——我检查我是否有一个位于这个矩形中的叠加层的缓存。
为了改进缓存(所以如果用户以前在同一个矩形上,除了现在他离前一个矩形几米远) - 我想“圆”坐标。
这样,每次用户处于矩形时 - 我检查这个矩形是否类似于以前缓存的矩形,如果是,我会带来缓存的结果。
此外,如果用户被缩小并且他的矩形包含在更大的(以前缓存的)矩形中 - 那么我也可以使用缓存的矩形。
有什么建议么 ?
我有一张带有叠加层的地图,我想缓存它——在用户在地图上访问的每个地方(这是一个矩形区域)——我检查我是否有一个位于这个矩形中的叠加层的缓存。
为了改进缓存(所以如果用户以前在同一个矩形上,除了现在他离前一个矩形几米远) - 我想“圆”坐标。
这样,每次用户处于矩形时 - 我检查这个矩形是否类似于以前缓存的矩形,如果是,我会带来缓存的结果。
此外,如果用户被缩小并且他的矩形包含在更大的(以前缓存的)矩形中 - 那么我也可以使用缓存的矩形。
有什么建议么 ?
如果您设置如下数据结构:
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 - 我没有尝试运行它。无论如何,我希望你能明白要点。
如果您只是在查看如何对坐标进行分组,请确定您想要的 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或经度。它会快一点,但它需要某种哈希来实现,并增加了一堆你可能不需要的复杂性。
希望这就是你要问的。
嘿,您可以在 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);