Как исправить 'При преобразовании из строки в CLLocationCoordinate2D. " - PullRequest
0 голосов
/ 17 октября 2019

Я использую декодер, и он покажет мне неправильный ответ, 1-я строка - это строка, а вторая - я преобразую строку в CLLocationCoordinate2D.

enter image description here

Почему для 1-й широты и последней долготы 0,0?

С этим связан следующий вопрос: Преобразовать строку из CLLocationCoordinate2D в массив

Мое требование И я хочу выводить таким образом и сохранить его в Пусть координаты .

let coordinates = [
(-122.63748, 45.52214),
(-122.64855, 45.52218),
(-122.6545, 45.52219),
(-122.65497, 45.52196),
(-122.65631, 45.52104),
(-122.6578, 45.51935),
(-122.65867, 45.51848),
(-122.65872, 45.51293) ]

Кодировка Я кодирую вот такКстати, и кодирование на 100% дает правильный результат.

 func encodeCoordinates(coords: [CLLocationCoordinate2D]) -> String {
//        let flattenedCoords: [String] = coords.map { coord -> String in "\(coord.latitude):\(coord.longitude)" }
        let flattenedCoords: [String] = coords.map { coord -> String in "\(coord.latitude):\(coord.longitude)"}
        let encodedString: String = flattenedCoords.joined(separator: ",")
        print("[\(encodedString)]")
        return encodedString
    }

Это вывод: enter image description here

Ошибка в декодировании

Я декодирую таким образом. Я использую этот код, он такой же, как Конвертировать строку CLLocationCoordinate2D (s) в массив Но не дает мне правильный результат.

func decodeCoordinates(encodedString: String) -> [CLLocationCoordinate2D] {
    let flattenedCoords: [String] = encodedString.components(separatedBy: ",")
    let coords: [CLLocationCoordinate2D] = flattenedCoords.map { coord -> CLLocationCoordinate2D in
        let split = coord.components(separatedBy: ":")
        if split.count == 2 {
            let latitude: Double = Double(split[0]) ?? 0.0
            let longitude: Double = Double(split[1]) ?? 0.0
            return CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
        } else {
            return CLLocationCoordinate2D()
        }
    }
    return coords
}

func makingRouteOfFreeRide(){

print("\n\n\n\n\n\n\n\n oooooo \(ProfileRoutesVC.map)\n\n\n\n\n\n\n\n\n",decodeCoordinates(encodedString: ProfileRoutesVC.map))
let a = decodeCoordinates(encodedString: ProfileRoutesVC.map)

enter image description here

1 Ответ

1 голос
/ 18 октября 2019

Если ваша входная строка выглядит следующим образом:

let yourCoordinateString = "[32.4945:74.5229,32.4945:74.5229,32.4945:74.5229]"
func decodeCoordinates(encodedString: String) -> [CLLocationCoordinate2D] {
    var tmpString = encodedString
    tmpString.removeFirst(1)
    tmpString.removeLast(1)

    let flattenedCoords: [String] = tmpString.components(separatedBy: ",")
    let coords: [CLLocationCoordinate2D] = flattenedCoords.map { coord -> CLLocationCoordinate2D in
        let split = coord.components(separatedBy: ":")
        if split.count == 2 {
            let latitude: Double = Double(split[0]) ?? 0.0
            let longitude: Double = Double(split[1]) ?? 0.0
                return CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
            } else {
                return CLLocationCoordinate2D()
            }
        }

        return coords
}
...