带有 Google 地图 iOS SDK 的 GEOSwift(绘制多边形)
GEOSwift with Google Maps iOS SDK (Draw a polygon)
我正在使用 GEOSwift 库 (https://github.com/GEOSwift/GEOSwift)
我需要帮助:
1 - 如何在 Google 地图上绘制多边形几何数据,代码如下:
let geometry = try! Geometry(wkt: "POLYGON((35 10, 45 45.5, 15 40, 10 20, 35 10))")
2 - 如何从几何 (geometry
) 中以字符串或 CLLocationCoordiantes
的形式获取坐标(纬度、经度)
谢谢...
我假设您使用 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
}
检查 definition of 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) }
请注意,y 随纬度而 x 随经度。
现在您已经有了 coords
,您可以使用其可变子类 GMSMutablePath:
创建一个 GMSPath
let path = GMSMutablePath()
for c in coords {
path.addCoordinate(c)
}
您可以使用该路径创建 GMSPolygon:
let polygon = GMSPolygon(path: path)
然后你只需要将它添加到你的地图中:
polygon.map = yourMap
我正在使用 GEOSwift 库 (https://github.com/GEOSwift/GEOSwift)
我需要帮助:
1 - 如何在 Google 地图上绘制多边形几何数据,代码如下:
let geometry = try! Geometry(wkt: "POLYGON((35 10, 45 45.5, 15 40, 10 20, 35 10))")
2 - 如何从几何 (geometry
) 中以字符串或 CLLocationCoordiantes
谢谢...
我假设您使用 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
}
检查 definition of 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) }
请注意,y 随纬度而 x 随经度。
现在您已经有了 coords
,您可以使用其可变子类 GMSMutablePath:
GMSPath
let path = GMSMutablePath()
for c in coords {
path.addCoordinate(c)
}
您可以使用该路径创建 GMSPolygon:
let polygon = GMSPolygon(path: path)
然后你只需要将它添加到你的地图中:
polygon.map = yourMap