Ali*_*Ali 1 google-maps ios google-maps-sdk-ios
我正在使用iOS版Google Maps API,以显示上面带有大量标记(〜1200)的地图。实际上,显示所有这些标记需要花费很长时间。
您是否会推荐一个解决方案或框架,使我们仅在可见的地图区域上显示标记?
提前致谢。
我开发了一个内部应用
该应用程序从一开始就使用Apple Maps开始,然后在最近的几个月中,我们切换到了Google Maps。更新:由于性能问题,我们切换回了Apple Maps :)
1:谷歌地图的性能是惊人的。
如果要使用同一图像创建多个标记,请为每个标记使用相同的UIImage实例。显示许多标记时,这将有助于提高应用程序的性能。
但这还不够。我尝试添加2000个(1px x 1px大小,4色)gif图像作为marker.icon,结果是相同的。是的,内存占用空间从60MB减少到了54MB,但在移动相机时仍然滞后。
与苹果地图相比,谷歌地图是一个非常苗条的框架。我已经尝试了一切。苹果地图可以处理2000个图钉,而谷歌地图则不能。
MAX_NUM_MARKER码:
int MAX_NUM_MARKER = 200;
if (IS_IPAD) {
if ([[[UIDevice currentDevice] platformString] isEqualToString:@"iPad 1G"]) {
MAX_NUM_MARKER = 150;
} else if ([[[UIDevice currentDevice] platformString] isEqualToString:@"iPad 2G"]) {
MAX_NUM_MARKER = 200;
} else if ([[[UIDevice currentDevice] platformString] isEqualToString:@"iPad 3G"]) {
MAX_NUM_MARKER = 300;
} else if ([[[UIDevice currentDevice] platformString] isEqualToString:@"iPad 4G"]) {
MAX_NUM_MARKER = 400;
} else {
MAX_NUM_MARKER = 400;
}
} else {
if (IS_IPHONE_6 || IS_IPHONE_6P) {
MAX_NUM_MARKER = 400;
} else if (IS_IPHONE_5) {
MAX_NUM_MARKER = 300;
} else if (IS_IPHONE_4_OR_LESS) {
MAX_NUM_MARKER = 150;
} else {
MAX_NUM_MARKER = 500;
}
}
Run Code Online (Sandbox Code Playgroud)
在屏幕代码上可见标记:
- (BOOL)isMarkerVisibleOnMap:(GMSMarker*)marker {
float padding = 0.0f;
CGPoint point = [map.projection pointForCoordinate:marker.position];
if (point.x >= -padding && point.y >= -padding && point.x <= map.frame.size.width+padding
&& point.y <= map.frame.size.height+padding) {
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
对于群集我们使用https://github.com/googlemaps/google-maps-ios-utils在GitHub上找到。设计良好,易于使用和调整(非官方)库。您基本上将标记添加到数组中一次,然后在需要显示地图上的图钉时使用“聚类”。
看看Apple iOS9的新地图模式:SatelliteFlyover。现在多数民众赞成在质量+电池消耗:D
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |