坐标参考系统 iOS
坐标参考系统库
坐标参考系统库是在国家地理空间情报局(NGA)和BIT Systems的合作下开发的。政府有“无限权利”,并且通过向开发者提供新的方向机会,发布此软件来增加政府投资的效益。软件的使用、修改和分发权利由MIT 许可证规定。
拉取请求
如果您想为此项目做出贡献,请提交一个拉取请求。我们将审查拉取请求并讨论更改。本项目所有拉取请求贡献都将根据 MIT 许可证发布。
之前以开源许可证发布并由 NGA 员工修改的软件源代码被视为“共同作品”(参见 17 USC § 101);它是部分版权、部分公有领域,整体受非政府作者的版权保护,并且必须根据原始开源许可证的条款发布。
关于
坐标参考系统是 OGC 的 '地理信息 - 坐标参考系统的已知文本表示法'(《18-010r7》)规范的 iOS 库实现。
关于坐标之间投影转换,见投影。
使用方法
查看最新的 Appledoc
// NSString *wkt = ...
CRSObject *crs = [CRSReader read:wkt];
enum CRSType type = crs.type;
enum CRSCategoryType category = crs.categoryType;
NSString *text = [CRSWriter write:crs];
NSString *prettyText = [CRSWriter writePretty:crs];
switch(category){
case CRS_CATEGORY_CRS:
{
CRSCoordinateReferenceSystem *coordRefSys = (CRSCoordinateReferenceSystem *) crs;
switch (type) {
case CRS_TYPE_BOUND:
{
CRSBoundCoordinateReferenceSystem *bound = (CRSBoundCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_COMPOUND:
{
CRSCompoundCoordinateReferenceSystem *compound = (CRSCompoundCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_DERIVED:
{
CRSDerivedCoordinateReferenceSystem *derived = (CRSDerivedCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_ENGINEERING:
{
CRSEngineeringCoordinateReferenceSystem *engineering = (CRSEngineeringCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_GEODETIC:
case CRS_TYPE_GEOGRAPHIC:
{
CRSGeoCoordinateReferenceSystem *geo = (CRSGeoCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_PARAMETRIC:
{
CRSParametricCoordinateReferenceSystem *parametric = (CRSParametricCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_PROJECTED:
{
CRSProjectedCoordinateReferenceSystem *projected = (CRSProjectedCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_TEMPORAL:
{
CRSTemporalCoordinateReferenceSystem *temporal = (CRSTemporalCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
case CRS_TYPE_VERTICAL:
{
CRSVerticalCoordinateReferenceSystem *vertical = (CRSVerticalCoordinateReferenceSystem *) coordRefSys;
// ...
break;
}
default:
break;
}
// ...
break;
}
case CRS_CATEGORY_METADATA:
{
CRSCoordinateMetadata *metadata = (CRSCoordinateMetadata *) crs;
// ...
break;
}
case CRS_CATEGORY_OPERATION:
{
CRSOperation *operation = (CRSOperation *) crs;
switch (type) {
case CRS_TYPE_CONCATENATED_OPERATION:
{
CRSConcatenatedOperation *concatenatedOperation = (CRSConcatenatedOperation *) operation;
// ...
break;
}
case CRS_TYPE_COORDINATE_OPERATION:
{
CRSCoordinateOperation *coordinateOperation = (CRSCoordinateOperation *) operation;
// ...
break;
}
case CRS_TYPE_POINT_MOTION_OPERATION:
{
CRSPointMotionOperation *pointMotionOperation = (CRSPointMotionOperation *) operation;
// ...
break;
}
default:
break;
}
// ...
break;
}
}
PROJ
// NSString *wkt = ...
CRSObject *crs = [CRSReader read:wkt];
CRSProjParams *projParamsFromCRS = [CRSProjParser paramsFromCRS:crs];
NSString *projTextFromCRS = [CRSProjParser paramsTextFromCRS:crs];
CRSProjParams *projParamsFromWKT = [CRSProjParser paramsFromText:wkt];
NSString *projTextFromWKT = [CRSProjParser paramsTextFromText:wkt];
构建
使用 Xcode 和/或 CocoaPods 构建此存储库
pod repo update
pod install
在 Xcode 中打开 crs-ios.xcworkspace 或从命令行构建
xcodebuild -workspace 'crs-ios.xcworkspace' -scheme crs-ios build
从 Xcode 或从命令行运行测试
xcodebuild test -workspace 'crs-ios.xcworkspace' -scheme crs-ios -destination 'platform=iOS Simulator,name=iPhone 15'
包含库
使用支持的选项在 Podfile 中指定它以包含此存储库。
从 CocoaPods 拉取
pod 'crs-ios', '~> 1.0.5'
从 GitHub 拉取
pod 'crs-ios', :git => 'https://github.com/ngageoint/coordinate-reference-systems-ios.git', :branch => 'master'
pod 'crs-ios', :git => 'https://github.com/ngageoint/coordinate-reference-systems-ios.git', :tag => '1.0.5'
作为本地项目包含
pod 'crs-ios', :path => '../coordinate-reference-systems-ios'
Swift
要从 Swift 使用,从 Swift 项目的桥接头中导入 crs-ios 桥接头
#import "crs-ios-Bridging-Header.h"
// var wkt: String = ...
let crs : CRSObject = CRSReader.read(wkt)
var type : CRSType = crs.type
var category : CRSCategoryType = crs.categoryType()
let text : String = CRSWriter.write(crs)
let prettyText : String = CRSWriter.writePretty(crs)
switch category{
case CRS_CATEGORY_CRS:
let coordRefSys : CRSCoordinateReferenceSystem = crs as! CRSCoordinateReferenceSystem
switch type {
case CRS_TYPE_BOUND:
let bound : CRSBoundCoordinateReferenceSystem = coordRefSys as! CRSBoundCoordinateReferenceSystem
// ...
break
case CRS_TYPE_COMPOUND:
let compound : CRSCompoundCoordinateReferenceSystem = coordRefSys as! CRSCompoundCoordinateReferenceSystem
// ...
break
case CRS_TYPE_DERIVED:
let derived : CRSDerivedCoordinateReferenceSystem = coordRefSys as! CRSDerivedCoordinateReferenceSystem
// ...
break
case CRS_TYPE_ENGINEERING:
let engineering : CRSEngineeringCoordinateReferenceSystem = coordRefSys as! CRSEngineeringCoordinateReferenceSystem
// ...
break
case CRS_TYPE_GEODETIC, CRS_TYPE_GEOGRAPHIC:
let geo : CRSGeoCoordinateReferenceSystem = coordRefSys as! CRSGeoCoordinateReferenceSystem
// ...
break
case CRS_TYPE_PARAMETRIC:
let parametric : CRSParametricCoordinateReferenceSystem = coordRefSys as! CRSParametricCoordinateReferenceSystem
// ...
break
case CRS_TYPE_PROJECTED:
let projected : CRSProjectedCoordinateReferenceSystem = coordRefSys as! CRSProjectedCoordinateReferenceSystem
// ...
break
case CRS_TYPE_TEMPORAL:
let temporal : CRSTemporalCoordinateReferenceSystem = coordRefSys as! CRSTemporalCoordinateReferenceSystem
// ...
break
case CRS_TYPE_VERTICAL:
let vertical : CRSVerticalCoordinateReferenceSystem = coordRefSys as! CRSVerticalCoordinateReferenceSystem
// ...
break
default:
break
}
// ...
break
case CRS_CATEGORY_METADATA:
let metadata : CRSCoordinateMetadata = crs as! CRSCoordinateMetadata
// ...
break
case CRS_CATEGORY_OPERATION:
let operation = crs as! CRSOperation
switch type {
case CRS_TYPE_CONCATENATED_OPERATION:
let concatenatedOperation : CRSConcatenatedOperation = operation as! CRSConcatenatedOperation
// ...
break
case CRS_TYPE_COORDINATE_OPERATION:
let coordinateOperation : CRSCoordinateOperation = operation as! CRSCoordinateOperation
// ...
break
case CRS_TYPE_POINT_MOTION_OPERATION:
let pointMotionOperation : CRSPointMotionOperation = operation as! CRSPointMotionOperation
// ...
break
default:
break
}
// ...
break
default:
break
}
PROJ
// var wkt: String = ...
let crs : CRSObject = CRSReader.read(wkt)
let projParamsFromCRS : CRSProjParams = CRSProjParser.params(fromCRS: crs)
let projTextFromCRS : String = CRSProjParser.paramsText(fromCRS: crs)
let projParamsFromWKT : CRSProjParams = CRSProjParser.params(fromText: wkt)
let projTextFromWKT : String = CRSProjParser.paramsText(fromText: wkt)