用了官方給的demo里的四叉樹點(diǎn)聚合算法,偶然間發(fā)現(xiàn)一個(gè)大BUG坤溃,如果兩個(gè)坐標(biāo)點(diǎn)經(jīng)緯度完全一致拍霜,只有一個(gè)點(diǎn)能添加到地圖上。
折騰后發(fā)現(xiàn)ClusterAnnotation里重寫了該類的hash方法
- (NSUInteger)hash
{
NSString *toHash = [NSString stringWithFormat:@"%.5F%.5F%ld", self.coordinate.latitude, self.coordinate.longitude, (long)self.count];
return [toHash hash];
}
- (BOOL)isEqual:(id)object
{
return [self hash] == [object hash];//根據(jù)對(duì)象的hash值判斷是否相等
}
細(xì)心的小伙伴已經(jīng)發(fā)現(xiàn)了薪介,他這里的處理有問題祠饺,這里是用經(jīng)緯度加聚合個(gè)數(shù)取hash來做isEqual操作,如果兩個(gè)點(diǎn)經(jīng)緯度相同且聚合個(gè)數(shù)一樣汁政,那就會(huì)有問題道偷。
故改良如下
- (NSUInteger)hash
{
NSString *toHash = [NSString stringWithFormat:@"%.5F%.5F%@", self.coordinate.latitude, self.coordinate.longitude,self.uid];
return [toHash hash];
}
給每個(gè)點(diǎn)設(shè)置唯一的uid,這樣就保證了點(diǎn)標(biāo)的唯一性。
以上记劈。