GEOSwift с Google Maps iOS SDK (нарисуйте многоугольник)

Я использую библиотеку GEOSwift ( https://github.com/GEOSwift/GEOSwift)

Мне нужна помощь в:

1 - Как я могу нарисовать данные геометрии многоугольника на Google Maps, вот код:

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

2 - Как я могу получить координаты (широта, долгота) из геометрии (geometry) обратно в виде строки или CLLocationCoordiantes

Спасибо...

1 ответ

Решение

Я предполагаю, что вы используете Google Maps SDK для iOS версии 3.3.0 и GEOSwift версии 5.1.0.

У вас есть многоугольник (без отверстий), представленный как WKT, и вы хотите показать его на карте Google. В частности, вы, вероятно, хотите в конечном итоге с GMSPolygon

Если вы знаете, что ваш WKT всегда будет многоугольником, вы можете написать

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

Если вы не можете этого гарантировать, вы можете сделать то, что написали изначально

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

а затем извлечь полигон, используя 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
}

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

Когда у вас есть polygon: PolygonВы можете получить точки, которые представляют его внешность:

let points = polygon.exterior.points

Polygon.exterior дает вам Polygon.LinearRing а также Polygon.LinearRing.points дает вам массив Point,

Теперь, когда у вас есть pointsвы можете отобразить их в массив CLLocationCoordinate2D

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

Обратите внимание, что у идет с широтой, а х идет с долготой.

Теперь, когда у вас есть coordsВы можете создать GMSPath используя его изменяемый подкласс, GMSMutablePath:

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

Вы можете использовать этот путь для создания GMSPolygon:

let polygon = GMSPolygon(path: path)

Тогда вам просто нужно добавить его на карту:

polygon.map = yourMap
Другие вопросы по тегам