这是一个仅使用 Swift 编写的库,用于计算和绘制地图投影。
目前仍处于早期阶段,存在一些小问题,尚未稳定。
此库是 Maparoni 映射相关 Swift 库套件的一部分,并依赖于
如上所述,此库尚未稳定!
要使用 Swift Package Manager 安装 GeoProjector,请将以下软件包添加到您的 Package.swift 文件或 Xcode 中的 dependencies
中
.package(
name: "GeoProjector", url: "https://github.com/maparoni/geoprojector",
branch: "main" // no tagged versions yet
)
投影是使用 Projection
协议定义的,该协议定义了预期的 project
方法,以及一些附加信息,例如投影的地图边界的形状。
投影本身可通过 Projections
命名空间(即,一个无 case 枚举)获得,该命名空间提供了不同投影的实现。请注意,这些实现基于弧度,但有各种辅助方法可用于处理 GeoJSON 和以度为单位的坐标。
用法示例
import GeoProjector
let projection = Projections.Orthographic(
reference: GeoJSON.Position(latitude: 0, longitude: 100)
)
let sydney = GeoJSON.Position(latitude: -33.8, longitude: 151.3)
let projected = projection.point(
for: sydney,
size: .init(width: 100, height: 100) // the maximum size of the canvas
)?.0
请注意,投影点与平台上常见的点对齐,因此 macOS 的 (x: 0, y: 0)
用于左下角地图坐标 (latitude: -180, longitude: -90)
,而其他平台的 (x: 0, y: 0)
用于左上角地图坐标 (latitude: -180, longitude: 90)
。
GeoDrawer 库包含一个名为 GeoMapView 的 NSView 和一个名为 GeoMap 的相应 SwiftUI 视图。您可以使用它们来获取地图视图以在上面绘制内容。
import SwiftUI
import GeoDrawer
struct MyMap: View {
var body: some View {
GeoMap(
contents: try! GeoDrawer.Content.world(),
projection: Projections.Cassini()
)
}
}
此仓库中的代码全部由我自己,Adrian Schönig 编写,但如果没有以下宝贵资源的帮助,它不可能如此顺利地完成
此库在 MIT 许可证 下可用。请根据这些条款随意使用它。
示例 是公共领域,可以自由改编。