ArcGIS Pro SDK (九)几何 16 单位

ArcGIS Pro SDK (九)几何 16 单位

环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 角度单位

1.1 在度和弧度之间转换

// 将 45 度转换为弧度
double radians = AngularUnit.Degrees.ConvertToRadians(45);

// 将 PI 转换为度
double degrees = AngularUnit.Degrees.ConvertFromRadians(Math.PI);

1.2 使用工厂代码创建角度单位

try
{
    // 创建一个格拉德单位
    var grad = AngularUnit.CreateAngularUnit(9105);
    string unitName = grad.Name;                        // Grad
    double conversionFactor = grad.ConversionFactor;    // 0.015708
    double radiansPerUnit = grad.RadiansPerUnit;
    int factoryCode = grad.FactoryCode;                 // 9105

    // 将 10 格拉德转换为度
    double val = grad.ConvertTo(10, AngularUnit.Degrees);

    // 将 10 弧度转换为格拉德
    val = grad.ConvertFromRadians(10);
}
catch (ArgumentException)
{
    // 在以下场景中,CreateAngularUnit 将抛出 ArgumentException:
    // - 如果使用的工厂代码是非角度工厂代码(例如,它对应于平方米,这是一个面积单位代码)
    // - 如果使用的工厂代码无效(例如,它是负数或不对应任何工厂代码)
}

1.3 创建自定义角度单位

// 自定义单位 - 每单位 3 弧度
var myAngularUnit = AngularUnit.CreateAngularUnit("myCustomAngularUnit", 3);
string Name = myAngularUnit.Name;                   // myCustomAngularUnit
double Factor = myAngularUnit.ConversionFactor;     // 3
int Code = myAngularUnit.FactoryCode;               // 0 因为它是自定义角度单位
double radiansUnit = myAngularUnit.RadiansPerUnit;  // 3

// 将 10 度转换为自定义单位
double converted = AngularUnit.Degrees.ConvertTo(10, myAngularUnit);
// 将其转换回度
converted = myAngularUnit.ConvertTo(converted, AngularUnit.Degrees);

// 将 1 弧度转换为自定义角度单位
converted = myAngularUnit.ConvertFromRadians(1);

// 获取 WKT
string wkt = myAngularUnit.Wkt;

// 从此 WKT 创建一个角度单位
var anotherAngularUnit = AngularUnit.CreateAngularUnit(wkt);
// anotherAngularUnit.ConversionFactor = 3
// anotherAngularUnit.FactoryCode = 0    
// anotherAngularUnit.RadiansPerUnit = 3

2 线性单位

2.1 在英尺和米之间转换

// 将 10 英尺转换为米
double metres = LinearUnit.Feet.ConvertToMeters(10);

// 将 20 米转换为英尺
double feet = LinearUnit.Feet.ConvertFromMeters(20.0);

2.2 在厘米和毫米之间转换

// 将 11 厘米转换为毫米
double mm = LinearUnit.Centimeters.ConvertTo(11, LinearUnit.Millimeters);

// 将结果转换回厘米
double cm = LinearUnit.Millimeters.ConvertTo(mm, LinearUnit.Centimeters);

// 将毫米结果转换回米
double meters = LinearUnit.Millimeters.ConvertToMeters(mm);

2.3 使用工厂代码创建线性单位

try
{
    // 创建一个 1936 年英国英尺单位
    var britFoot = LinearUnit.CreateLinearUnit(9095);
    string unitName = britFoot.Name;                        //  "Foot_British_1936"
    double conversionFactor = britFoot.ConversionFactor;    // 0.3048007491
    double metersPerUnit = britFoot.MetersPerUnit;
    int factoryCode = britFoot.FactoryCode;                 // 9095

    // 将 10 个 1936 年英国英尺转换为厘米
    double val = britFoot.ConvertTo(10, LinearUnit.Centimeters);

    // 将 10 米转换为 1936 年英国英尺
    val = britFoot.ConvertFromMeters(10);
}
catch (ArgumentException)
{
    // 在以下场景中,CreateLinearUnit 将抛出 ArgumentException:
    // - 如果使用的工厂代码是非线性工厂代码(例如,它对应于平方米,这是一个面积单位代码)
    // - 如果使用的工厂代码无效(例如,它是负数或不对应任何工厂代码)
}

2.4 创建自定义线性单位

// 创建一个自定义每 myLinearUnit 有 0.33 米
var myLinearUnit = LinearUnit.CreateLinearUnit("myCustomLinearUnit", 0.33);
string name = myLinearUnit.Name;                          // myCustomLinearUnit
double convFactor = myLinearUnit.ConversionFactor;        // 0.33
int code = myLinearUnit.FactoryCode;                      // 0 自定义单位
double metersUnit = myLinearUnit.MetersPerUnit;           // 0.33
string toString = myLinearUnit.ToString();                // 与 Name 相同 - myCustomLinearUnit

// 将 10 厘米转换为 myLinearUnit 
double convertedVal = LinearUnit.Centimeters.ConvertTo(10, myLinearUnit);


// 获取 WKT
string lu_wkt = myLinearUnit.Wkt;

// 从此 WKT 创建一个线性单位
var anotherLinearUnit = LinearUnit.CreateLinearUnit(lu_wkt);
// anotherLinearUnit.ConversionFactor = 0.33
// anotherLinearUnit.FactoryCode = 0    
// anotherLinearUnit.MetersPerUnit = 0.33

3 面积单位

3.1 在平方英尺和平方米之间转换

// 将 700 平方米转换为平方英尺
double sqFeet = AreaUnit.SquareFeet.ConvertFromSquareMeters(700);

// 将 1000 平方英尺转换为平方米
double sqMeters = AreaUnit.SquareFeet.ConvertToSquareMeters(1000);

3.2 在公顷和英亩之间转换

// 将 2 公顷转换为英亩
double acres = AreaUnit.Hectares.ConvertTo(2, AreaUnit.Acres);

3.3 在公顷和平方英里之间转换

// 将 300 公顷转换为平方英里
double sqMiles = AreaUnit.Hectares.ConvertTo(300, AreaUnit.SquareMiles);

3.4 各种单位的平方米数

double sqMetersPerUnit = AreaUnit.Acres.SquareMetersPerUnit;
sqMetersPerUnit = AreaUnit.Ares.SquareMetersPerUnit;
sqMetersPerUnit = AreaUnit.Hectares.SquareMetersPerUnit;
sqMetersPerUnit = AreaUnit.SquareKilometers.SquareMetersPerUnit;
sqMetersPerUnit = AreaUnit.SquareMiles.SquareMetersPerUnit;
sqMetersPerUnit = AreaUnit.SquareYards.SquareMetersPerUnit;

3.5 创建面积单位

try
{
    var myFactoryCodeInit = AreaUnit.CreateAreaUnit(109439);     // 109439 是平方英里的工厂代码

    var myWktUnit = AreaUnit.CreateAreaUnit("HECTARE_AREAUNIT[\"H\",10000.0]");

    var myCustomUnit = AreaUnit.CreateAreaUnit("myAreaUnit", 12);
}
catch (ArgumentException)
{
    // 在以下场景中,CreateAreaUnit 将抛出 ArgumentException:
    // - 如果使用的工厂代码是非面积工厂代码(例如,它对应于度,这是一个角度单位代码)
    // - 如果使用的工厂代码无效(例如,它是负数或不对应任何工厂代码)
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ArcGIS Pro SDK是用于创建ArcGIS Pro加载项的开发工具包。您可以使用ArcGIS Pro SDK来扩展ArcGIS Pro的功能,添加自定义工具、面板、任务和其他功能。\[1\] 要安装ArcGIS Pro SDK 3.0,您需要使用Visual Studio 2022,并从Visual Studio Marketplace搜索并安装以下三个扩展:ArcGIS Pro SDK for .NET,ArcGIS Pro SDK for .NET(Utilities),ArcGIS Pro SDK for .NET(Migration)\[1\]。请注意,ArcGIS Pro SDK for .NET扩展只能集成到Visual Studio 2022中,建议使用版本17.2或更高版本\[2\]。 ArcGIS Pro SDK for .NET提供了三个不同的扩展名(.vsix文件):ArcGIS Pro SDK for .NET用于创建ArcGIS Pro加载项的工程和项模板的集合,ArcGIS Pro SDK for .NET(Utilities)用于帮助创建ArcGIS Pro加载项的实用程序的集合,ArcGIS Pro SDK for .NET(Migration)用于将ArcGIS Pro SDK 2.x扩展模块迁移到ArcGIS Pro SDK 3.0 for .NET\[3\]。 总结来说,ArcGIS Pro SDK是用于创建ArcGIS Pro加载项的开发工具包,您可以使用它来扩展ArcGIS Pro的功能。要安装ArcGIS Pro SDK 3.0,您需要使用Visual Studio 2022,并从Visual Studio Marketplace安装相应的扩展。 #### 引用[.reference_title] - *1* *2* *3* [VS2022中ArcGIS Pro SDK for .NET安装和卸载指南](https://blog.csdn.net/u012685544/article/details/126317090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WineMonk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值