0

I am using GEOSwift library (https://github.com/GEOSwift/GEOSwift)

I need help in:

1 - How can I draw polygon geometry data on Google Maps, Here is the code:

let geometry = try! Geometry(wkt: "POLYGON((35 10, 45 45.5, 15 40, 10 20, 35 10))")

2 - How can I get Coordinates (lat, long) from the Geometry (geometry) back in form of string or CLLocationCoordiantes

Thanks ...

4

1 回答 1

3

I'll assume you're using Google Maps SDK for iOS version 3.3.0 and GEOSwift version 5.1.0.

You have a polygon (without holes) represented as WKT and you want to show it on a Google Map. Specifically, you probably want to end up with a GMSPolygon

If you know that your WKT will always be a polygon, you can actually write

let polygon = try! Polygon(wkt: "POLYGON((35 10, 45 45.5, 15 40, 10 20, 35 10))")

If you can't guarantee that, you can do what you wrote initially

let geometry = try! Geometry(wkt: "POLYGON((35 10, 45 45.5, 15 40, 10 20, 35 10))")

and then extract the polygon using if case let/guard case let/switch case let:

switch geometry {
case let .polygon(polygon):
    // Do something with polygon
default:
    // handle other types of Geometry or fail here
}

Check the definition of Geometry that shows the other cases you might care to handle.

Once you have polygon: Polygon, you can get the points that represent its exterior:

let points = polygon.exterior.points

Polygon.exterior gives you a Polygon.LinearRing and Polygon.LinearRing.points gives you an array of Point.

Now that you have points, you can map them into an array of CLLocationCoordinate2D

let coords = points.map { p in CLLocationCoordinate2D(latitude: p.y, longitude: p.x) }

Note that y goes with latitude and x goes with longitude.

Now that you have coords, you can create a GMSPath using its mutable subclass, GMSMutablePath:

let path = GMSMutablePath()
for c in coords {
    path.addCoordinate(c)
}

You can use that path to create a GMSPolygon:

let polygon = GMSPolygon(path: path)

Then you just need to add it to you map:

polygon.map = yourMap
于 2019-08-31T23:59:37.170 回答