Android 通过取整坐标矩形缓存覆盖-如何?

Android 通过取整坐标矩形缓存覆盖-如何?,android,overlay,android-mapview,coordinate-systems,Android,Overlay,Android Mapview,Coordinate Systems,我有一张地图,上面有我想要缓存的覆盖图- 在地图上用户访问的每个地方(这是一个矩形区域),我检查是否有位于该矩形中的覆盖缓存 为了改进缓存(因此,如果用户以前在同一个矩形上,除了现在他离前一个矩形有几米远之外),我想“圆化”坐标 这样,每次用户在一个矩形中时,我都会检查这个矩形是否与以前缓存的矩形相似,如果相似,我会带来缓存的结果 另外,如果用户被缩小,并且他的矩形包含在一个更大的(以前缓存的)矩形中,那么我也可以使用缓存的矩形 有什么建议吗?如果你只是想看看如何对坐标进行分组,那么就决定x和y

我有一张地图,上面有我想要缓存的覆盖图- 在地图上用户访问的每个地方(这是一个矩形区域),我检查是否有位于该矩形中的覆盖缓存

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

这样,每次用户在一个矩形中时,我都会检查这个矩形是否与以前缓存的矩形相似,如果相似,我会带来缓存的结果

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


有什么建议吗?

如果你只是想看看如何对坐标进行分组,那么就决定x和y坐标之间的最大差值,或者你想要的纬度和经度。然后有两种方法可以对它们进行分组。第一种方法比较简单,但是如果你有很多点的话,它会很慢

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

for each cachedPoint in cachedPoints
{
    if (point.x - cachedPoint.x < maxdistance)
    {
        if (point.y - cachedPoint.y < maxdistance)
        {
              cachedPoint.incrementvisits();  
        }
    }
}
缓存点中每个缓存点的

{
if(点x-缓存点x<最大距离)
{
if(点y-缓存点y<最大距离)
{
cachedPoint.IncrementVisites();
}
}
}
另一种方法是使用按x或纬度排序的数据结构,然后搜索以查看是否存在x或纬度在点的最大距离内的缓存点,然后检查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.
}

上面的内容可能是有效的,也可能不是有效的——我没有试过运行它。无论如何,我希望你能理解要点。

嘿,你可以在android的Google map v2中添加标记

这里我给出了addmarker的代码

    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);