我正在使用适用于iOS的Google Maps API,以显示包含大量标记的地图(~1200)。 实际上,显示所有这些标记需要很长时间。
您会推荐一个解决方案或框架,让我们只在可见地图区域显示标记吗?
提前致谢。
答案 0 :(得分:4)
我开发了一个具有
的内部应用程序应用程序最初使用 Apple Maps 开始,然后在过去几个月我们切换到 Google地图。更新:由于性能问题,我们切换回Apple Maps:)
1:谷歌地图的表现非常激烈。
如果要使用相同的图像创建多个标记,请使用相同的标记 每个标记的UIImage实例。这将有助于改善 显示许多标记时应用程序的性能。
但这还不够。我尝试添加2000(1px x 1px大小,4色)gif图像作为marker.icon,结果是相同的。是的,内存占用从60MB减少到54MB但是当你移动相机时它仍然落后。
与Apple地图相比,谷歌地图是一个非常苗条的框架。我尝试了一切。 Apple地图可以处理2000个引脚而Google地图则不能。
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;
}
}
在屏幕代码上显示标记:
- (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;
}
对于群集,我们使用了gitHUb上的https://github.com/googlemaps/google-maps-ios-utils。 精心设计,易于使用和调整(非官方)库。 您基本上将标记添加到数组中,然后使用&#34; clustering&#34;任何时候需要显示地图上的引脚。
看一下Apple iOS9新地图模式: SatelliteFlyover 。现在那就是质量+电池耗尽:D
答案 1 :(得分:1)
从Marker Clustering上看,谷歌地图iOS版目前没有正式支持here。
正如here所见,你可以做的事情很少