GISTools は、地理情報システム(GIS)向けに設計されたオープンソースライブラリであり、座標変換、幾何計算、空間参照管理、GeoJSON 拡張などのコア機能を提供する。以下では、これらの機能を詳細に解説し、実際のコード例を交えて紹介する。
座標系変換機能
このライブラリは、WGS84(世界測地系)、GCJ-02(中国国家測地局による暗号化座標系)、BD-09(百度独自の座標系)間の相互変換をサポートしている。
主な変換メソッド
wgs84ToGcj02()/gcj02ToWgs84()gcj02ToBd09()/bd09ToGcj02()wgs84ToBd09()/bd09ToWgs84()
使用例
import gistools.geometry.*
func main() {
let src = Point(x: 116.1211, y: 38.4564)
let gcj = CoordinateTransformer.wgs84ToGcj02(src)
let bd = CoordinateTransformer.gcj02ToBd09(gcj)
let rev = CoordinateTransformer.bd09ToWgs84(bd)
print("GCJ-02: \(gcj)")
print("BD-09 : \(bd)")
print("復元 : \(rev)")
}
注意点
- 変換アルゴリズムは中国国内の座標にのみ適用される
- 複数回の往復変換により微小な誤差が蓄積される可能性がある
- バッチ処理時はストリーム処理でパフォーマンスを最適化可能
幾何演算機能
ポイント、ライン、ポリゴンといった基本的なジオメトリ型をサポートし、面積や距離の計算を提供する。
ジオメトリ型の定義
abstract class Geometry {
var srs: SpatialReference
func toJson() -> JsonValue
}
面積計算メソッド
GeometryCalculator.mercatorArea(poly):Web メルカトル投影に基づく面積GeometryCalculator.sphericalArea(poly):球面三角法による地球表面積GeometryCalculator.planarArea(poly):平面直角座標系での面積
使用例
let poly = Polygon(
rings: [[
[116.1211, 38.4564],
[116.1211, 38.4664],
[116.1311, 38.4664],
[116.1211, 38.4564]
]],
srs: .wgs84
)
let area = GeometryCalculator.sphericalArea(poly)
print("面積: \(area) m²")
空間参照システム(SRS)管理
空間参照は SpatialReference クラスを通じて統一的に扱われる。
よく使われる SRS の作成
let wgs84 = SpatialReference.epsg(4326)
let webMercator = SpatialReference.epsg(3857)
let gcj02 = SpatialReference.custom(name: "GCJ-02", epsg: 4490)
WKID 照会
print(wgs84.wkid) // 出力: 4326
拡張 GeoJSON 形式
標準 GeoJSON に spatialReference フィールドを追加し、座標系情報を保持できるように拡張している。
拡張形式の例(Point)
{
"geometry": {
"type": "Point",
"coordinates": [116.1211, 38.4564],
"spatialReference": 4326
}
}
対応 EPSG コード
| EPSG | 名称 | 用途 |
|---|---|---|
| 4326 | WGS84 | GPS 標準 |
| 3857 | Web Mercator | Web 地図 |
| 4490 | GCJ-02 | 中国国内地図 |
| 4555 | BD-09 | 百度地図 |
シリアライズ例
let pt = Point(x: 116.1211, y: 38.4564, srs: .wgs84)
print(pt.toJson())
プロジェクトは GitCode で公開されており、座標変換や空間解析を必要とする GIS アプリケーション開発に活用できる。
リポジトリ: https://gitcode.com/Cangjie-TPC/GISTools