crs-ios 1.0.5

crs-ios 1.0.5

Giat AppsTeamDaniel Barela 维护。



crs-ios 1.0.5

坐标参考系统 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];

构建

Build & Test

使用 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)