'Swift: Suggestions to make a better/faster lookup
I am creating a dataset (from terrain data) that I visualise in Google Earth by generating a KML file. Part of the KML creation assigns a colour to a polygon based on a data value in the dataset.
My code is 'ugly' (I wrote it in a hurry as I just needed something that 'worked') and the lookup function getPolyStyle to find the colour to assign to the polygon is not very efficient.
Any suggestions on a better way to do this?
struct KMLPolyStyle: Codable {
let color: String?
let outline: Int?
let fill: Int?
}
let surfacePolyStyles :[Range<Double>:KMLPolyStyle] = [-90.0 ..< -5.0: KMLPolyStyle(color: "7fbf3f00", outline: 0, fill: nil),
-5.0 ..< -2.5: KMLPolyStyle(color: "7fbf5f00", outline: 0, fill: nil),
-2.5 ..< 0.0: KMLPolyStyle(color: "7fbf7f00", outline: 0, fill: nil),
0.0 ..< 2.5: KMLPolyStyle(color: "7f7fbf00", outline: 0, fill: nil),
2.5 ..< 5.0: KMLPolyStyle(color: "7f3fff00", outline: 0, fill: nil),
5.0 ..< 5.5: KMLPolyStyle(color: "7f38f213", outline: 0, fill: nil),
5.5 ..< 6.0: KMLPolyStyle(color: "7f32e526", outline: 0, fill: nil),
6.0 ..< 6.5: KMLPolyStyle(color: "7f2cd839", outline: 0, fill: nil),
6.5 ..< 7.0: KMLPolyStyle(color: "7f25cb4c", outline: 0, fill: nil),
7.0 ..< 7.5: KMLPolyStyle(color: "7f1fbf5f", outline: 0, fill: nil),
7.5 ..< 8.0: KMLPolyStyle(color: "7f19b272", outline: 0, fill: nil),
8.0 ..< 8.5: KMLPolyStyle(color: "7f12a585", outline: 0, fill: nil),
8.5 ..< 9.0: KMLPolyStyle(color: "7f0c9898", outline: 0, fill: nil),
9.0 ..< 9.5: KMLPolyStyle(color: "7f068bab", outline: 0, fill: nil),
9.5 ..< 10.0: KMLPolyStyle(color: "7f007fbf", outline: 0, fill: nil),
10.0 ..< 11.0: KMLPolyStyle(color: "7f0078c5", outline: 0, fill: nil),
11.0 ..< 12.0: KMLPolyStyle(color: "7f0072cb", outline: 0, fill: nil),
12.0 ..< 13.0: KMLPolyStyle(color: "7f006bd2", outline: 0, fill: nil),
13.0 ..< 14.0: KMLPolyStyle(color: "7f0065d8", outline: 0, fill: nil),
14.0 ..< 15.0: KMLPolyStyle(color: "7f005fdf", outline: 0, fill: nil),
15.0 ..< 16.0: KMLPolyStyle(color: "7f0058e5", outline: 0, fill: nil),
16.0 ..< 17.0: KMLPolyStyle(color: "7f0052eb", outline: 0, fill: nil),
17.0 ..< 18.0: KMLPolyStyle(color: "7f004bf2", outline: 0, fill: nil),
18.0 ..< 19.0: KMLPolyStyle(color: "7f0045f8", outline: 0, fill: nil),
19.0 ..< 20.0: KMLPolyStyle(color: "7f003fff", outline: 0, fill: nil),
20.0 ..< 21.0: KMLPolyStyle(color: "7f2a34ff", outline: 0, fill: nil),
21.0 ..< 22.0: KMLPolyStyle(color: "7f552aff", outline: 0, fill: nil),
22.0 ..< 23.0: KMLPolyStyle(color: "7f7f1fff", outline: 0, fill: nil),
23.0 ..< 24.0: KMLPolyStyle(color: "7faa15ff", outline: 0, fill: nil),
24.0 ..< 25.0: KMLPolyStyle(color: "7fd40aff", outline: 0, fill: nil),
25.0 ..< 90.0: KMLPolyStyle(color: "7fff00ff", outline: 0, fill: nil)]
func getPolyStyle(for maskAngle: Double) -> KMLPolyStyle {
var polyStyle = surfacePolyStyles[-90 ..< -5.0]
for style in surfacePolyStyles {
if style.key.contains(maskAngle) {
polyStyle = surfacePolyStyles[style.key]
break
}
}
return polyStyle!
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
