Suite au cours 11.2 Maîtriser la création d’apps iPhone / Chapitre 4.5 BusBus / Regrouper les annotations
J’utilise les données de la communauté urbaine pour tester : https://data.iledefrance.fr/explore/dataset/arrets-par-lignes-de-transport-en-commun-en-ile-de-france/
PS: je ne prends que CSO sinon il y a plus de 70 000 points !!!
Je voudrais regrouper les BusStop non par StopType (car je n’ai pas de “mobilier”) mais par nom (et/ou numéro) de ligne de bus que j’appelle routeNumber (routeName dans l’exemple du cours).
Le problème c’est que sur un même endroit (coordonnées GPS identique), je n’arrive pas à passer d’une PIN à une autre car je peux en avoir 2 ou 3 parfois (même arrêt pour plusieurs lignes de bus). J’ai utilisé clusteringIdentifier = busStop.routeNumber
Voici mon BusStop.swift :
class BusStop: MKPointAnnotation {
let routeNumber : String
init? (feature:Feature) { //Feature GEOSwift
guard let point = feature.geometries?.first as? Waypoint, //type Geometry dans le GEOJson créé un tableau geometries dans GEOSwift
let properties = feature.properties,
let stopName = properties["stop_name"] as? String,
let routeName = properties["route_long_name"] as? String,
let agency = properties["agency_name"] as? String
else { return nil }
routeNumber = routeName
super.init()
self.title = stopName
self.subtitle = "Ligne : \(routeName) / Agence : \(agency)"
self.coordinate = CLLocationCoordinate2DFromCoordinate(point.coordinate)
}
}
et voici mon BusStopAnnotationView.swift
import MapKit
class busStopAnnotationView: MKMarkerAnnotationView {
override var annotation: MKAnnotation? {
willSet {
if let busStop = newValue as? BusStop {
clusteringIdentifier = busStop.routeNumber
markerTintColor = UIColor.red.withAlphaComponent(0.5)
glyphText = "🚏"
}
}
}
}