Как нарисовать многоугольник из файла JSON? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь нарисовать многоугольник на карте Google из файла geo json.я знаю, как я могу нарисовать путь из нескольких координат, но я не могу нарисовать это из карты Google

Вот мой файл JSON

 {
"type": "Polygon",
"coordinates": [
    [
        [
            90.35087585449219,
            23.87767555995429
        ],
        [
            90.35293579101562,
            23.877832529038052
        ],

        [
            90.45867919921875,
            23.662449542924175
        ],
        [
            90.45455932617188,
            23.66103447347277
        ],
        [
            90.35053253173828,
            23.872966398925893
        ],
        [
            90.35018920898438,
            23.87516402872517
        ],
        [
            90.35087585449219,
            23.87767555995429
        ]
    ]
]
}

Как я могу нарисовать многоугольник из этого json?я хочу, чтобы это динамический способ не статичный способ также для карты Google

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Попробуйте, это может помочь:)

struct ResponseData: Decodable {
    var coordinates: [coordinates]
    var type : String
}
struct coordinates : Decodable {
    var lng: String
    var lat: String
}

Создать 2 struct

@IBOutlet weak var mapView: GMSMapView!

override func viewDidLoad() {
    super.viewDidLoad()

    let path = GMSMutablePath()
    if let url = Bundle.main.url(forResource: "document", withExtension: "json") {

        do {
            let data = try Data(contentsOf: url)
            let decoder = JSONDecoder()
            let jsonData = try decoder.decode(ResponseData.self, from: data)

            for te in jsonData.coordinates {
                path.add(CLLocationCoordinate2D(latitude: te.lat.toDouble(), longitude: te.lng.toDouble()))
            }
        }
        catch {
            //Handle error
            print(error.localizedDescription)
        }
    }

    let rectangle = GMSPolyline(path: path)
    rectangle.strokeColor = .red
    rectangle.strokeWidth = 5.0
    rectangle.map = mapView
}
0 голосов
/ 12 февраля 2019

После того, как вы проанализируете и создадите массив CLLLocation2D и добавите все координаты в этом массиве;

let polygon = MKPolygon(coordinates: yourArray, count: yourArray.count)
yourMapView.addOverlay(polygon)

Пожалуйста, проверьте перед созданием, что первый элемент координат должен совпадать с последним элементом ваших координат ..

Кстати, я предположил, что вы уже расширили свой контроллер вида и добавили ниже метод.Если вы не продлили, пожалуйста, запишите расширение и делегируйте себя.

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {


    let renderer = MKPolygonRenderer(overlay: overlay)
    renderer.lineWidth = 5 //Customize as you wish
    renderer.fillColor = .green
    renderer.strokeColor = .red
    return renderer 
}
...