Bu sayfada, iOS için Haritalar SDK'sının yardımcı program kitaplığında bulunan ısı haritası yardımcı programı açıklanmaktadır. Isı haritaları, bir haritada veri noktalarının dağılımını ve yoğunluğunu göstermek için kullanışlıdır.
Bu videoda, verileriniz harita üzerinde çok sayıda veri noktası gerektirdiğinde işaretçilere alternatif olarak ısı haritalarının kullanımı ele alınmaktadır.
Isı haritaları, izleyicilere bir haritada veri noktalarının dağılımını ve göreceli yoğunluğunu anlamalarını kolaylaştırır. Isı haritaları, her konuma bir işaretçi yerleştirmek yerine verilerin dağılımını renklerle gösterir.
Aşağıdaki örnekte kırmızı, Avustralya'nın Victoria eyaletinde polis karakollarının yoğun olduğu bölgeleri temsil etmektedir.
Kitaplığı henüz oluşturmadıysanız bu sayfanın geri kalanını okumadan önce kurulum kılavuzunu inceleyin.
Basit bir ısı haritası ekleme
Haritanıza bir ısı haritası eklemek için ilgilendiğiniz her konumun koordinatlarından oluşan bir veri kümesine ihtiyacınız vardır. Öncelikle, map
özelliğini GMSMapView
olarak ayarlayarak bir GMUHeatmapTileLayer
örneği oluşturun.
Isı haritasıyla çalışmadan önce ana haritanın yüklenmesini sağlamak için bunu uygulamanızın viewDidLoad()
işlevinde yapın. Ardından, GMUWeightedLatLng
nesnelerinin bir koleksiyonunu GMUHeatmapTileLayer
örneğine iletin.
Yardımcı program, GMUWeightedLatLng
nesneleri koleksiyonunu kabul eden GMUHeatmapTileLayer
sınıfını sağlar. Sağlanan yarıçap, degrade ve opaklık seçeneklerine göre çeşitli yakınlaştırma düzeyleri için karo resimleri oluşturur.
Adımları daha ayrıntılı bir şekilde inceleyelim:
map
mülkünüGMSMapView
olarak ayarlayarak birGMUHeatmapTileLayer
örneği oluşturun (Bunu uygulamanızınviewDidLoad()
işlevinde yapın).GMUWeightedLatLng
nesnesi koleksiyonunuGMUHeatmapTileLayer
örneğine iletin.- Harita görünümünü ileterek
GMUHeatmapTileLayer.map
işlevini çağırı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 depolanmıştır.
Dosyadan bir alıntı:
[
{"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 çeşitli özelleştirilebilir özellikleri vardır. Seçenekleri, GMUHeatmapTileLayer
örneğini ilk kez oluştururken veya istediğiniz zaman seçenek için yeni bir değer ayarlayarak belirleyebilirsiniz.
Aşağıdaki seçenekler kullanılabilir:
Yarıçap: Isı haritasına uygulanan Gauss bulanıklığının boyutu (piksel cinsinden). Varsayılan değer 20'dir. 10 ile 50 arasında olmalıdır. Yarıçapı ayarlamak için
GMUHeatmapTileLayer.radius
simgesini kullanın.Gradyan: Isı haritasının renk haritasını oluşturmak için kullandığı, en düşükten en yükseğe kadar yoğunluktaki renk aralığı. Renkleri içeren bir tam sayı dizisi ve her rengin başlangıç noktasını belirten, maksimum yoğunluğun yüzdesi olarak verilen ve 0 ile 1 arasında bir kesir olarak ifade edilen bir kayan nokta dizisi kullanılarak bir
GMUGradient
oluşturulur. Tek renkli bir degrade için yalnızca bir renk, çok renkli bir degrade için ise en az iki renk belirtmeniz gerekir. Renk haritası, bu renkler arasında ara değerleme kullanılarak oluşturulur. Varsayılan gradyan iki renkten oluşur.colorMapSize
parametresi, gradyandaki adım sayısını tanımlar. Daha büyük sayılar daha yumuşak bir degrade oluştururken daha küçük sayılar, kontur grafiğine benzer daha keskin geçişler sağlar. Gradyanı ayarlamak içinGMUHeatmapTileLayer.gradient
simgesini kullanın.Opaklık: Isı haritası katmanının tamamının opaklığıdır ve 0 ile 1 arasındadır. Varsayılan değer 0,7'dir. Opaklığı ayarlamak için
GMUHeatmapTileLayer.opacity
öğesini kullanın.
Ö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üncelleme
Daha önce ayarlanmış bir seçeneği güncellemek için aşağıdaki adımları uygulayın:
- Seçeneği istediğiniz değerle güncelleyin.
GMUHeatmapTileLayer.clearTileCache()
Hizmetleri İçin Arayın.
Veri kümesini değiştirme
Isı haritasının oluşturulduğu veri kümesini değiştirmek için:
- Veri toplama işleminizi güncelleyin.
GMUHeatmapTileLayer.weightedData
kullanın veGMUWeightedLatLng
dizisi gönderin. GMUHeatmapTileLayer.clearTileCache()
Hizmetleri İçin Arayın.
Isı haritasını kaldırma
Bir ısı haritasını kaldırmak için nil
parametresini ileterek GMUHeatmapTileLayer.map
işlevini çağırın.
Swift
heatmapLayer.map = nil
Objective-C
_heatmapLayer.map = nil;
Demo uygulamayı göster
Isı haritası uygulama örneği için yardımcı program kitaplığıyla birlikte gönderilen demo uygulamadaki HeatmapViewController
bölümüne bakın.
Kurulum kılavuzunda demo uygulamanın nasıl çalıştırılacağı gösterilmektedir.