如何从 json 文件中绘制多边形?

How to draw a polygon from a json file?

我正在尝试根据地理 json 文件在 google 地图上绘制多边形。我知道如何从几个坐标绘制路径,但我无法从 google map

绘制路径

这是我的 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 地图

是动态方式而不是静态方式

谢谢

解析并创建 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 
}

试试这个方法可能会有帮助:)

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

创建 2 个结构

@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
}