我有问题。我有数据库500k记录。每个记录存储纬度、经度、动物种类、观察日期。我必须在 Mapkit 视图上方绘制网格(15x10),以显示该网格单元中物质的浓度。每个单元格都是 32x32 的盒子。
如果我在运行时计算它是非常slow。
有人知道如何缓存它吗?在内存或数据库中。
数据结构:
观察:
- Latitude
- 经度
- Date
- Specie
- 其他一些不重要的数据
屏幕示例:
替代文本http://img6.imageshack.us/img6/7562/20091204201332.png http://img6.imageshack.us/img6/7562/20091204201332.png
每个红色框的不透明度显示该区域的物种数量。
我现在使用的代码:
data -> 从数据库中选择,这是地图区域中的所有观察
for (int row = 0; row < rows; row++)
{
for (int column = 0; column < columns; column++)
{
speciesPerBox=0;
minG=boxes[row][column].longitude;
if (column!=columns-1) {
maxG=boxes[row][column+1].longitude;
} else {
maxG=buttomRight.longitude;
}
maxL=boxes[row][column].latitude;
if (row!=rows-1) {
minL=boxes[row+1][column].latitude;
} else {
minL=buttomRight.latitude;
}
for (int i=0; i<sightingCount; i++) {
l=data[i].latitude;
g=data[i].longitude;
if (l>=minL&&l<maxL&&g>=minG&&g<maxG) {
for (int j=0; j<speciesPerBox; j++) {
if (speciesCountArray[j]==data[i].specie) {
hasSpecie=YES;
}
}
if (hasSpecie==NO) {
speciesCountArray[speciesPerBox]=data[i].specie;
speciesPerBox++;
}
hasSpecie=NO;
}
}
}
mapData[row][column].count = speciesPerBox;
}
}
由于数据是静态的,因此您可以预先计算每个网格的每个物种并将其存储在数据库中,而不是所有位置坐标。
由于您有 15 x 10 = 150 个单元格,因此您最终会在数据库中获得 150 * [物种数量] 条记录,这应该是一个小得多的数字。
另外,请确保您在正确的列上有索引。否则,您的查询将不得不一遍又一遍地扫描每条记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)