я работаю над приложением, которое просматривает контакты на карте
приложение читает контакты из базы данных SQLite, используя этот код:
- (void) readDB
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filename = @"places.db";
NSString *filedocPath = [docDir stringByAppendingPathComponent:filename];
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:filedocPath];
if(success == NO)
{
NSString *configPathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:filename];
[fileManager copyItemAtPath:configPathFromApp toPath:filedocPath error:nil];
[fileManager release];
}
FMDatabase* db = [FMDatabase databaseWithPath:filedocPath];
if (![db open]) {
NSLog(@"Could not open db.");
return;
}
// kind of experimentalish.
[db setShouldCacheStatements:YES];
/*read*/
for(int i = 0; i <colNum; i++)
{
[poi_Infos addObject:[[NSMutableArray alloc] init]];
}
NSString *queryString=[NSString stringWithFormat:@"select Category as %@,* from Places",categoryName];
FMResultSet *rs = [db executeQuery:queryString];
while ([rs next])
{
// just print out what we've got in a number of formats.
[ [poi_Infos objectAtIndex:0] addObject:[rs stringForColumn:@"Company Name"]];
[ [poi_Infos objectAtIndex:1] addObject:[NSNumber numberWithDouble:[[rs stringForColumn:@"Latitude"] doubleValue]] ];
[ [poi_Infos objectAtIndex:2] addObject:[NSNumber numberWithDouble:[[rs stringForColumn:@"Longitude"] doubleValue]] ];
}
[rs close];
[db close];
//NSLog(@"%@,%@", [[poi_Infos objectAtIndex:0] objectAtIndex:0],[[poi_Infos objectAtIndex:1] objectAtIndex:0]);
}
- (void) displayLocalPOI
{
CLLocationCoordinate2D CurrentLocation;
CurrentLocation=map.userLocation.coordinate;
//set the radius in km so that you will get the nearest location in that radius
double radius=localSearchRadius;
int num = [[poi_Infos objectAtIndex:0] count];
for(int i = 0; i < num; i++)
{
double y = [[[poi_Infos objectAtIndex:1] objectAtIndex:i] doubleValue];
double x = [[[poi_Infos objectAtIndex:2] objectAtIndex:i] doubleValue];
if(y>=CurrentLocation.latitude-(radius/111)&&y<=CurrentLocation.latitude+(radius/111))
{
if(x>=CurrentLocation.longitude-(radius/111)&&x<=CurrentLocation.longitude+(radius/111))
{
CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(
(CLLocationDegrees)y,
(CLLocationDegrees)x);
NSString *title = [[poi_Infos objectAtIndex:1] objectAtIndex:i];
UserAnnotation *userAnnotation = [[UserAnnotation alloc] initWithCoordinate:coord];
userAnnotation.title = title;
[self.mapAnnotations addObject:userAnnotation];
[userAnnotation release];
}
}
}
}
, поскольку у меня больше, чем10 000 пинт, приложение работает очень медленно.
Мой вопрос:
1 - есть ли способ ускорить процесс?Как выбрать только контакты в ближайшем месте в радиусе, прежде чем обрабатывать их?пожалуйста, предоставьте код.
2 - как я могу бросить больше булавок, если я уменьшу масштаб?