Bu sayfada, Yardımcı programda bulunan bu kitap için iOS için Haritalar SDK'sı Isı haritaları, havanın dağılımını göstermek için veri noktalarının yoğunluğunu gösterir.
Bu videoda, aşağıdaki durumlarda işaretçilere alternatif olarak ısı haritalarının kullanımı harita üzerinde çok sayıda veri noktası bulunması gerektiğini unutmayın.
Isı haritaları, izleyicilerin dağılımı ve göreli konum dağılımını anlamasını kolaylaştırır haritadaki veri noktalarının yoğunluğuna göre değişir. Her panele işaretçi yerleştirmek yerine, verilerin dağılımını göstermek için renkleri kullanırlar.
Aşağıdaki örnekte kırmızı, polisin en yoğun olduğu bölgeleri temsil eder Victoria, Avustralya’daki istasyonlar.
Kitaplığı henüz ayarlamadıysanız kurulum rehberini okumanızı öneririz. bu sayfada.
Basit bir ısı haritası ekleme
Haritanıza ısı haritası eklemek için aşağıdakileri içeren bir veri kümesi gerekir:
koordinatlarıyla birlikte çalışır. İlk olarak,
GMUHeatmapTileLayer
örneği için map
özelliği bir GMSMapView
olarak ayarlanıyor.
Uygulamanızın viewDidLoad()
işlevinde bunu yaparak temel haritanın
önce yüklendiğini görüyorsunuz. Ardından,
GMUHeatmapTileLayer
örneğine GMUWeightedLatLng
nesne eklendi.
Yardımcı program, kabul eden GMUHeatmapTileLayer
sınıfını sağlar:
GMUWeightedLatLng
nesne koleksiyonu. Dört haftada bir karo
yarıçap, gradyan ve opaklık seçeneklerine göre çeşitli yakınlaştırma seviyeleri
sağlanır.
Adımları daha ayrıntılı olarak inceleyelim:
map
özelliğiniGMUHeatmapTileLayer
GMSMapView
(bunu uygulamanızınviewDidLoad()
işlevinde yapın).GMUWeightedLatLng
nesneden oluşan bir koleksiyonu şuraya geçirin:GMUHeatmapTileLayer
örneği.- Harita görünümünü geçerek
GMUHeatmapTileLayer.map
numaralı telefonu arayın.Swift
class Heatmap: UIViewController { private var mapView: GMSMapView! private var heatmapLayer: GMUHeatmapTileLayer! override func viewDidLoad() { super.viewDidLoad() heatmapLayer = GMUHeatmapTileLayer() heatmapLayer.map = mapView } // ... func addHeatmap() { // Get the data: latitude/longitude positions of police stations. guard let path = Bundle.main.url(forResource: "police_stations", withExtension: "json") else { return } guard let data = try? Data(contentsOf: path) else { return } guard let json = try? JSONSerialization.jsonObject(with: data, options: []) else { return } guard let object = json as? [[String: Any]] else { print("Could not read the JSON.") return } var list = [GMUWeightedLatLng]() for item in object { let lat = item["lat"] as! CLLocationDegrees let lng = item["lng"] as! CLLocationDegrees let coords = GMUWeightedLatLng( coordinate: CLLocationCoordinate2DMake(lat, lng), intensity: 1.0 ) list.append(coords) } // Add the latlngs to the heatmap layer. heatmapLayer.weightedData = list } }
Objective-C
@implementation Heatmap { GMSMapView *_mapView; GMUHeatmapTileLayer *_heatmapLayer; } - (void)viewDidLoad { [super viewDidLoad]; _heatmapLayer = [[GMUHeatmapTileLayer alloc] init]; _heatmapLayer.map = _mapView; } // ... - (void) addHeatmap { // Get the data: latitude/longitude positions of police stations. NSURL *path = [NSBundle.mainBundle URLForResource:@"police_stations" withExtension:@"json"]; NSData *data = [NSData dataWithContentsOfURL:path]; NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSMutableArray<GMUWeightedLatLng *> *list = [[NSMutableArray alloc] init]; [json enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSDictionary *item = (NSDictionary *)obj; CLLocationDegrees lat = [(NSNumber *) [item valueForKey:@"lat"] doubleValue]; CLLocationDegrees lng = [(NSNumber *) [item valueForKey:@"lng"] doubleValue]; GMUWeightedLatLng *coords = [[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(lat, lng) intensity:1.0]; [list addObject:coords]; }]; // Add the latlngs to the heatmap layer. _heatmapLayer.weightedData = list; } @end
Bu örnekte, veriler police_stations.json
adlı bir JSON dosyasında depolanmaktadır.
Dosyadan bir alıntı aşağıdadır:
[
{"lat" : -37.1886, "lng" : 145.708 } ,
{"lat" : -37.8361, "lng" : 144.845 } ,
{"lat" : -38.4034, "lng" : 144.192 } ,
{"lat" : -38.7597, "lng" : 143.67 } ,
{"lat" : -36.9672, "lng" : 141.083 }
]
Isı haritasını özelleştirme
Isı haritasının özelleştirilebilir birkaç özelliği vardır. Aşağıdaki durumlarda seçenekleri
GMUHeatmapTileLayer
örneğini oluşturarak veya dilediğiniz zaman
seçenek için yeni bir değer ayarlayarak.
Aşağıdaki seçenekler kullanılabilir:
Yarıçap: Isı haritasına uygulanan Gauss bulanıklığının boyutu. piksel cinsinden belirtin. Varsayılan değer 20'dir. 10 ile 50 arasında olmalıdır. Tekliflerinizi otomatikleştirmek ve optimize etmek için Yarıçapı ayarlamak için
GMUHeatmapTileLayer.radius
tuşlarına basın.Gradyan: Isı haritasının rengini oluşturmak için kullandığı bir renk aralığı değişiklik gösterir.
GMUGradient
, renkleri içeren bir tam sayı dizisi ve maksimum yoğunluğun yüzdesi olarak verilen, her rengin başlangıç noktası ve 0 ile 1 arasında bir kesir olarak ifade edilir. Her öğe için yalnızca bir renk belirtmelisiniz tek renkli gradyan veya çok renkli için en az iki renk kullanabilirsiniz. Renk haritası, bu renkler arasındaki interpolasyon kullanılarak oluşturulur. Varsayılan renk geçişi iki renk içerir.colorMapSize
parametresi gradyandaki adım sayısı. Büyük sayılar daha doğru sonuçlar verir renk geçişi gibi daha küçük sayılar ise çizgi grafiğidir. Gradyanı ayarlamak içinGMUHeatmapTileLayer.gradient
öğesini kullanın.Opaklık: Bu, ısı haritası katmanının tamamının opaklığıdır ve arasında yer alır. Varsayılan değer 0,7'dir. Şu ayarı yapmak için
GMUHeatmapTileLayer.opacity
düğmesini kullanın: opaklık değeri için de geçerlidir.
Örneğin, bir Gradient
oluşturun:
Swift
let gradientColors: [UIColor] = [.green, .red] let gradientStartPoints: [NSNumber] = [0.2, 1.0] heatmapLayer.gradient = GMUGradient( colors: gradientColors, startPoints: gradientStartPoints, colorMapSize: 256 )
Objective-C
NSArray<UIColor *> *gradientColors = @[UIColor.greenColor, UIColor.redColor]; NSArray<NSNumber *> *gradientStartPoints = @[@0.2, @1.0]; _heatmapLayer.gradient = [[GMUGradient alloc] initWithColors:gradientColors startPoints:gradientStartPoints colorMapSize:256];
Mevcut bir ısı haritasının opaklığını değiştirmek için:
Swift
heatmapLayer.opacity = 0.7
Objective-C
_heatmapLayer.opacity = 0.7;
Mevcut bir seçeneği güncelle
Daha önce ayarlanmış bir seçeneği güncellemek için aşağıdaki adımları uygulayın:
- Seçeneği istediğiniz değere güncelleyin.
GMUHeatmapTileLayer.clearTileCache()
Hizmetleri İçin Arayın.
Veri kümesini değiştirme
Isı haritasının derlendiği veri kümesini değiştirmek için:
- Veri toplama işleminizi güncelleyin.
GMUHeatmapTileLayer.weightedData
hesabını kullan, geçenGMUWeightedLatLng
dizisidir. GMUHeatmapTileLayer.clearTileCache()
Hizmetleri İçin Arayın.
Isı haritasını kaldırma
Isı haritasını kaldırmak için GMUHeatmapTileLayer.map
adlı kişiyi nil
ileterek çağırın.
Swift
heatmapLayer.map = nil
Objective-C
_heatmapLayer.map = nil;
Demo uygulamayı göster
Isı haritası uygulamasına ilişkin başka bir örnek için
HeatmapViewController
: Yardımcı program kitaplığıyla birlikte gönderilen demo uygulamada.
Kurulum kılavuzu, aşağıdakilerin nasıl yapılacağını gösterir:
demo uygulamasını çalıştırın.