Google map生成熱力圖

谷歌地圖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)顯示了

如圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容