iOS 高德地图官方DEMO iOS_ClusterAnnotation_3D 里的BUG

用了官方给的demo里的四叉树点聚合算法,偶然间发现一个大BUG,如果两个坐标点经纬度完全一致,只有一个点能添加到地图上。

折腾后发现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];//根据对象的hash值判断是否相等
}

细心的小伙伴已经发现了,他这里的处理有问题,这里是用经纬度加聚合个数取hash来做isEqual操作,如果两个点经纬度相同且聚合个数一样,那就会有问题。

故改良如下

- (NSUInteger)hash
{
    NSString *toHash = [NSString stringWithFormat:@"%.5F%.5F%@", self.coordinate.latitude, self.coordinate.longitude,self.uid];
    return [toHash hash];
}

给每个点设置唯一的uid,这样就保证了点标的唯一性。

以上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容