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