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