谷歌地圖SDK的iOS端 在2017年出了新的API,可以生成熱力圖,下面就教大家如何生成熱力圖
首先需要添加谷歌地圖及熱力圖支持SDK,目前我用的cocoapods添加
pod 'GoogleMaps'
pod 'Google-Maps-iOS-Utils'
然后pod install就可以集成谷歌地圖了
添加谷歌地圖
? ? self.mapView = [[GMSMapView alloc] init];
? ? self.mapView.settings.rotateGestures = NO;
? ? self.mapView.settings.tiltGestures = NO;
? ? self.mapView.settings.allowScrollGesturesDuringRotateOrZoom = NO;
? ? self.mapView.myLocationEnabled = YES;
? ? self.mapView.delegate = self;
創(chuàng)建熱力圖Layer
self.heatMapLayer = [[GMUHeatmapTileLayer alloc] init];
? ? NSMutableArray* colors = @[].mutableCopy;
? ? [colorsaddObject:[MUAppHelper colorWithHexString:@"#FFD800"]];
? ? [colorsaddObject:[MUAppHelper colorWithHexString:@"#F03F05"]];
//賦值熱力圖的權(quán)重色值,權(quán)重從低到高
? ? self.heatMapLayer.gradient = [[GMUGradient alloc] initWithColors:colors startPoints:@[@0.01,@0.5] colorMapSize:256];
//透明度,設(shè)置太高會遮住地圖,太低會看不清
? ? self.heatMapLayer.opacity =0.7;
//熱力圖半徑,設(shè)置太高熱力圖會比較大,根據(jù)需求來自己調(diào)吧
? ? self.heatMapLayer.radius =25;
緊接著就要獲取熱力圖數(shù)據(jù)了。獲取的是經(jīng)緯度和權(quán)重,統(tǒng)一添加到數(shù)組中,賦值給heatMapLayer的數(shù)據(jù)中。
由于數(shù)據(jù)量可能比較大,所以我們使用多線程處理數(shù)據(jù),處理完畢后主線程刷新UI
NSOperationQueue* queue = [NSOperationQueue new];
? ? NSBlockOperation* operation = [NSBlockOperation blockOperationWithBlock:^{
? ? ? ? NSMutableArray* locationArr =@[].mutableCopy;
? ? ? ? for (HeatMapLocation* location in self.locationCollection.orderCoordinates) {
//將經(jīng)緯度和權(quán)重添加到數(shù)組中。intensity是權(quán)重
? ? ? ? ? ? [locationArr addObject:[[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(location.lat, location.lon) intensity:0.666]];
? ? ? ? }
? ? ? ? for (HeatMapLocation* location in self.locationCollection.cancelCoordinates) {
? ? ? ? ? ? [locationArr addObject:[[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(location.lat, location.lon) intensity:1]];
? ? ? ? }
? ? ? ? for (HeatMapLocation* location in self.locationCollection.openCoordinates) {
? ? ? ? ? ? [locationArr addObject:[[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(location.lat, location.lon) intensity:0.333]];
? ? ? ? }
? ? ? ? //GMUWeightedLatLng
? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? self.heatMapLayer.weightedData = locationArr;
? ? ? ? ? ? self.heatMapLayer.map =self.mapView;
? ? ? ? });
? ? }];
? ? [queue addOperation:operation];
添加完畢后就會發(fā)現(xiàn)熱力圖已經(jīng)顯示了
如圖
