0
我有一個NSDictionary大約2000個位置經緯度和長度,我放在地圖上的針腳,如果他們在可見的地圖區域。搜索NSDictionary的緯度經度與一定的距離
當前每次平移地圖時,我只需循環查看我的字典並計算距離以查看位置是否可見,如果是這樣就放下一個別針。
CLLocationCoordinate2D centre = [self.map centerCoordinate];
CLLocation *mapCenter =[[CLLocation alloc] initWithLatitude: centre.latitude longitude: centre.longitude];
for (int i=0; i < [self.dealersSource count]; i++) {
CLLocation *d = [[CLLocation alloc] initWithLatitude: [[[self.dealersSource objectAtIndex:i] valueForKey:@"lat"] floatValue]
longitude: [[[self.dealersSource objectAtIndex:i] valueForKey:@"long"] floatValue]];
CLLocationDistance distance = [d distanceFromLocation:mapCenter];
float dist =(distance/1609.344);
if (dist <= radius && dist !=0) {
// this will be visible on the map, add to list of annotations
}
}
這工作,但似乎非常低效,並且可以在較舊的iPad慢 - 特別是當越來越多的位置被添加到這個列表。我希望能夠使用某種NSPredicate在我開始循環之前過濾我的初始列表。
我假設你有和2000字典的NSArray,其中每個字典都有@「lat」和@「lon」鍵值。 您可以使用NSPredicate爲給定的謂詞過濾NSArray。 I.e.像這樣:NSArray * filteredarray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@「(lat> =%d)」,16.0989]]; 也看看這個鏈接,其中詳細解釋了NSPredicate過濾:http://stackoverflow.com/questions/110332/filtering-nsarray-into-a-new-nsarray-in-objective-c –
我想我的混亂是我需要做一個> =和一個<=都正確的基於可見的地圖?對於經濟和經濟都很正常 – Slee
。謂詞就像語句條件一樣,所以你需要寫出滿足你最終需求的條件。 Addind(a> = some_value && a <= some_value)應該可以解決問題。 –