быстрое упражнение, объединяя результат json, если противоположны - PullRequest
0 голосов
/ 09 апреля 2020

Я выполнил это упражнение, но не могу найти решения, ищу несколько советов, как ...

Я работаю в авиационном приложении

, чтобы быть более очистить одну взлетно-посадочную полосу аэропорта с двумя номерами, следующие json описывают одну взлетно-посадочную полосу с именем [16/34 в примере], одна сторона взлетно-посадочной полосы называется 16, другая - 34

см. чтобы понять, одна сторона 16, другая 34 runway

из API, который я загружаю json с данными взлетно-посадочной полосы аэропорта в следующем формате:

json

[
  {
    "length" : {
      "feet" : 11066,
      "meter" : 3372.9200000000001,
      "mile" : 2.0960000000000001,
      "km" : 3.3730000000000002,
      "nm" : 1.821
    },
    "location" : {
      "lat" : 22.1637077,
      "lon" : 113.586128
    },
    "hasLighting" : true,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Concrete",
    "displacedThreshold" : {
      "feet" : 1181,
      "meter" : 359.97000000000003,
      "mile" : 0.224,
      "km" : 0.35999999999999999,
      "nm" : 0.19400000000000001
    },
    "isClosed" : false,
    "name" : "16",
    "trueHdg" : 161.19999999999999
  },
  {
    "length" : {
      "feet" : 11066,
      "meter" : 3372.9200000000001,
      "mile" : 2.0960000000000001,
      "km" : 3.3730000000000002,
      "nm" : 1.821
    },
    "location" : {
      "lat" : 22.135021200000001,
      "lon" : 113.596695
    },
    "hasLighting" : true,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Concrete",
    "displacedThreshold" : {
      "feet" : 1214,
      "meter" : 370.02999999999997,
      "mile" : 0.23000000000000001,
      "km" : 0.37,
      "nm" : 0.20000000000000001
    },
    "isClosed" : false,
    "name" : "34",
    "trueHdg" : 341.19999999999999
  }
]

может найти в json следующие данные:

ВПП 16"имя": "16", "trueHdg" : 161.19999999999999

взлетно-посадочная полоса 34"name": "34" "trueHdg": 341.19999999999999

имя взлетно-посадочной полосы 16 имеют trueHdg 161,19999 градусов, а взлетно-посадочная полоса 34 является совершенно противоположным trueHdg из 341.1999999

после определения моей модели ВПП:

class RunwayConbine: Identifiable , Codable {
    var id : UUID = UUID()
    var runwayA : String
    var runwayB : String

init(runwayA: String, runwayB: String) {
    self.runwayA = runwayA
    self.runwayB = runwayB
}

, поэтому мне нужно найти для ВПП 16 т.р. ueHdg 161.19999999999999 противоположное в json (в данном случае 34 trueHdg 341.19999999999999)

, как только вы найдете противоположность ВПП, создайте вектор AirportRunway: [RunnwayConbine] (в данном случае содержащий только 1 элемент), где Я объединяю информацию о 2 взлетно-посадочных полосах в одном элементе, например, let runway = RunwayConbine (runwayA: 34, runwayB: 16)

, это должно работать для других json, если в аэропорту больше примеров взлетно-посадочной полосы:

[
  {
    "length" : {
      "feet" : 9843,
      "meter" : 3000.1500000000001,
      "mile" : 1.8640000000000001,
      "km" : 3,
      "nm" : 1.6200000000000001
    },
    "hasLighting" : false,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Unknown",
    "isClosed" : true,
    "name" : "06",
    "trueHdg" : 58.5
  },
  {
    "length" : {
      "feet" : 9836,
      "meter" : 2998.0100000000002,
      "mile" : 1.863,
      "km" : 2.9980000000000002,
      "nm" : 1.619
    },
    "location" : {
      "lat" : 33.50038,
      "lon" : 126.469292
    },
    "hasLighting" : true,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Asphalt",
    "displacedThreshold" : {
      "feet" : 0,
      "meter" : 0,
      "mile" : 0,
      "km" : 0,
      "nm" : 0
    },
    "isClosed" : false,
    "name" : "07",
    "trueHdg" : 58.399999999999999
  },
  {
    "length" : {
      "feet" : 6270,
      "meter" : 1911.0999999999999,
      "mile" : 1.1879999999999999,
      "km" : 1.911,
      "nm" : 1.032
    },
    "location" : {
      "lat" : 33.515529999999998,
      "lon" : 126.48738899999999
    },
    "hasLighting" : true,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Asphalt",
    "displacedThreshold" : {
      "feet" : 0,
      "meter" : 0,
      "mile" : 0,
      "km" : 0,
      "nm" : 0
    },
    "isClosed" : false,
    "name" : "13",
    "trueHdg" : 125.7
  },
  {
    "length" : {
      "feet" : 9843,
      "meter" : 3000.1500000000001,
      "mile" : 1.8640000000000001,
      "km" : 3,
      "nm" : 1.6200000000000001
    },
    "hasLighting" : false,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Unknown",
    "isClosed" : true,
    "name" : "24",
    "trueHdg" : 238.5
  },
  {
    "length" : {
      "feet" : 9836,
      "meter" : 2998.0100000000002,
      "mile" : 1.863,
      "km" : 2.9980000000000002,
      "nm" : 1.619
    },
    "location" : {
      "lat" : 33.514507299999998,
      "lon" : 126.49679999999999
    },
    "hasLighting" : true,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Asphalt",
    "displacedThreshold" : {
      "feet" : 0,
      "meter" : 0,
      "mile" : 0,
      "km" : 0,
      "nm" : 0
    },
    "isClosed" : false,
    "name" : "25",
    "trueHdg" : 238.40000000000001
  },
  {
    "length" : {
      "feet" : 6270,
      "meter" : 1911.0999999999999,
      "mile" : 1.1879999999999999,
      "km" : 1.911,
      "nm" : 1.032
    },
    "location" : {
      "lat" : 33.505499999999998,
      "lon" : 126.50411200000001
    },
    "hasLighting" : true,
    "width" : {
      "feet" : 148,
      "meter" : 45.109999999999999,
      "mile" : 0.028000000000000001,
      "km" : 0.044999999999999998,
      "nm" : 0.024
    },
    "surface" : "Asphalt",
    "displacedThreshold" : {
      "feet" : 1348,
      "meter" : 410.87,
      "mile" : 0.255,
      "km" : 0.41099999999999998,
      "nm" : 0.222
    },
    "isClosed" : false,
    "name" : "31",
    "trueHdg" : 305.69999999999999
  }
]

в этом примере я должен вернуть AirportRunway: [RunnwayConbine] с 2 элементами, содержащими runway1 = RunwayConbine (runwayA: 31, runwayB: 13) e RunwayConbine (runwayA: 06, runwayB: 24)

надеюсь, я был ясен ..

это то, что я пытаюсь сделать, но ... я очень далеко ...

             for (key,myJson):(String, JSON) in json {
                            let runway = RunwayModel(runwayName: "", runwayTrueHdg: "", runwaylenghtM: "", runwaylenghtNM: "", runwaywidthM: "", runwaywidthNM: "", runwaySurfaceType: "", isClosed: false)



                            pistaA = json[ind]["name"].stringValue

                            let hdg = myJson["trueHdg"].double

                            var HDHOpposto = hdg! + 180



                            if HDHOpposto > 360 {
                               HDHOpposto = HDHOpposto - 360
                            }

                            debugPrint(" check if \(hdg) == \(HDHOpposto)")

                            for (k,json) in myJson {


                            if hdg == HDHOpposto {


                                let opposto = myJson["name"].stringValue
                                    pistaB = opposto

                                let pistaTOT = RunwwayConbine(runwayConbineA: pistaA, runwayConbine: pistaB)

                                vettoreTUTTEPiste.append(pistaTOT)
                            }
                            }
                            debugPrint("la pista trovata opposta e \(pistaA) opposto con \(pistaB) nel vettore ci sono \(vettoreTUTTEPiste.count) piste in totoale")

                            vettorePiste.append(runway)
                            self.isRunwayDataReceive = true
                            i = i+1



                        }

большое спасибо, за помощь мне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...