diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-07-08 19:08:36 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-07-12 14:27:57 +0200 |
| commit | de8123b6e9c9b436f1d70e83271e4e322ff8238d (patch) | |
| tree | ba694530b878e6af38830f0799f99e8f265018f5 | |
| parent | 47ba74c4a9fafea829a7c82522613b449eba58d6 (diff) | |
| download | mullvadvpn-de8123b6e9c9b436f1d70e83271e4e322ff8238d.tar.xz mullvadvpn-de8123b6e9c9b436f1d70e83271e4e322ff8238d.zip | |
Draw interior polygons above exterior
MapKit has issues drawing interior polygons.
| -rw-r--r-- | ios/MullvadVPN/GeoJSON.swift | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/ios/MullvadVPN/GeoJSON.swift b/ios/MullvadVPN/GeoJSON.swift index 3ed306af72..4b3f8c7c28 100644 --- a/ios/MullvadVPN/GeoJSON.swift +++ b/ios/MullvadVPN/GeoJSON.swift @@ -38,7 +38,7 @@ extension GeoJSON { switch geometry { case .polygon(let polygon): - return [polygon.mkPolygon] + return polygon.mkPolygons case .multiPolygon(let multiPolygon): return multiPolygon.mkPolygons @@ -102,18 +102,24 @@ extension GeoJSON { struct Polygon: Decodable { let coordinates: [[[Double]]] - var mkPolygon: MKPolygon { + var mkPolygons: [MKPolygon] { let coords = self.geoCoordinates let exteriorCoordinates = coords.first ?? [] - let interiorPolygons = coords.dropFirst().map { (interiorCoords) -> MKPolygon in - return MKPolygon(coordinates: interiorCoords, count: interiorCoords.count) - } - return MKPolygon( + let exteriorPolygon = MKPolygon( coordinates: exteriorCoordinates, count: exteriorCoordinates.count, - interiorPolygons: interiorPolygons + interiorPolygons: nil ) + + let interiorPolygons = coords.dropFirst().map { interiorCoords -> MKPolygon in + return MKPolygon( + coordinates: interiorCoords, + count: interiorCoords.count + ) + } + + return [exteriorPolygon] + interiorPolygons } private var geoCoordinates: [[CLLocationCoordinate2D]] { @@ -129,8 +135,8 @@ extension GeoJSON { let coordinates: [[[[Double]]]] var mkPolygons: [MKOverlay] { - return coordinates.map { values -> MKPolygon in - return Polygon(coordinates: values).mkPolygon + return coordinates.flatMap { values -> [MKPolygon] in + return Polygon(coordinates: values).mkPolygons } } } |
