欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > ArcGIS Pro SDK (九)几何 2 坐标

ArcGIS Pro SDK (九)几何 2 坐标

2024/11/30 6:49:12 来源:https://blog.csdn.net/szy13323042191/article/details/140406190  浏览:    关键词:ArcGIS Pro SDK (九)几何 2 坐标

ArcGIS Pro SDK (九)几何 2 坐标

文章目录

  • ArcGIS Pro SDK (九)几何 2 坐标
    • 1 矢量极坐标
    • 2 获取矢量倾角
    • 3 获取矢量方位角
    • 4 向量运算
    • 5 2D 矢量操作
    • 6 生成器

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

1 矢量极坐标

Coordinate3D polarVector = new Coordinate3D(0, 7, 0);
Tuple<double, double, double> polarComponents = polarVector.QueryPolarComponents();
// polarComponents.Item1 = 0  (方位角)
// polarComponents.Item2 = 0 (倾角)
// polarComponents.Item3 = 7 (大小)polarVector.SetPolarComponents(Math.PI / 4, Math.PI / 2, 8);
polarComponents = polarVector.QueryComponents();
// polarComponents.Item1 = 0 (x)
// polarComponents.Item2 = 0 (y)
// polarComponents.Item3 = 7 (z)

2 获取矢量倾角

Coordinate3D v = new Coordinate3D(0, 0, 7);
double inclination = v.Inclination;         // inclination = PI/2v.SetComponents(-2, -3, 0);
inclination = v.Inclination;                // inclination = 0v.SetComponents(0, 0, -2);
inclination = v.Inclination;                // inclination = -PI/2

3 获取矢量方位角

Coordinate3D vector = new Coordinate3D(0, 7, 0);
double azimuth = vector.Azimuth;      // azimuth = 0vector.SetComponents(1, 1, 42);
azimuth = vector.Azimuth;
double degrees = AngularUnit.Degrees.ConvertFromRadians(azimuth);       // degrees = 45vector.SetComponents(-8, 8, 2);
azimuth = vector.Azimuth;
degrees = AngularUnit.Degrees.ConvertFromRadians(azimuth);              // degrees = 315

4 向量运算

// 简单的3D向量
Coordinate3D v = new Coordinate3D(0, 1, 0);
// v.Magnitude = 1Coordinate3D other = new Coordinate3D(-1, 0, 0);
// other.Magnitude = -1double dotProduct = v.DotProduct(other);      // dotProduct = 0Coordinate3D crossProduct = v.CrossProduct(other);
// crossProduct.X = 0
// crossProduct.Y = 0
// crossProduct.Z = 1Coordinate3D addVector = v.AddCoordinate3D(other);
// addVector.X = -1
// addVector.Y = 1
// addVector.Z = 0// 绕x轴旋转
Coordinate3D w = v;
w.Rotate(Math.PI, other);
// w.X = 0
// w.Y = -1
// w.Z = 0w.Scale(0.5);
// w.X = 0
// w.Y = -0.5
// w.Z = 0w.Scale(-4);
// w.X = 0
// w.Y = 2
// w.Z = 0
// w.Magnitude = 2w.Move(3, 2, 0);
// w.X = 3
// w.Y = 4
// w.Z = 0
// w.Magnitude = 5Coordinate3D emptyVector = new Coordinate3D();
// emptyVector = (0, 0, 0)
emptyVector.SetEmpty();
// emptyVector = (Nan, Nan, Nan)Coordinate3D c1 = new Coordinate3D(2, 3, 4);
Coordinate3D c2 = new Coordinate3D(9, -1, 3);var result_add = c1 + c2;
// result_add = (11, 2, 7)
var result_sub = c1 - c2;
// result_sub = (-7, 4, 1)var b = result_sub != result_add;
// b = trueresult_add = emptyVector + c1;
// result_add = (Nan, Nan, Nan)b = result_add == emptyVector;
// b = true

5 2D 矢量操作

Coordinate2D v = new Coordinate2D(0, 1);
// v.Magnitude = 1Coordinate2D other = new Coordinate2D(-1, 0);
double dotProduct = v.DotProduct(other);
// dotProduct = 0Coordinate2D w = v + other;
// w = (-1, 1)w += other;
// w = (-2, 1)w -= other;
// w = (-1, 1)w = v;
w.Rotate(Math.PI, other);
// w = (-2, -1)w = other;w.Scale(-4);
// w = (4, 0)
// w.Magnitude = 4w.Move(-1, 4);
// w = (3, 4)
// w.Magnitude = 5w.Move(-6, -1);
Tuple<double, double> components = w.QueryComponents();
// components = (-3, 3)
// w.Magnitude = 3 * Math.Sqrt(2)Coordinate2D unitVector = w.GetUnitVector();
// w = (-Math.Sqrt(2) / 2, Math.Sqrt(2) / 2)
// w.Magnitude = 1w.SetComponents(3, 4);

6 生成器

// 点列表
List<MapPoint> points = new List<MapPoint>
{MapPointBuilderEx.CreateMapPoint(0, 0, 2, 3, 1),MapPointBuilderEx.CreateMapPoint(1, 1, 5, 6),MapPointBuilderEx.CreateMapPoint(2, 1, 6),MapPointBuilderEx.CreateMapPoint(0, 0)
};// 将有属性,因为它是通过便捷方法创建的
Polyline polylineWithAttrs = PolylineBuilderEx.CreatePolyline(points);
bool hasZ = polylineWithAttrs.HasZ;          // hasZ = true
bool hasM = polylineWithAttrs.HasM;          // hasM = true
bool hasID = polylineWithAttrs.HasID;        // hasID = true// 将没有属性,因为它被指定为参数
Polyline polylineWithoutAttrs = PolylineBuilderEx.CreatePolyline(points, AttributeFlags.None);
hasZ = polylineWithoutAttrs.HasZ;          // hasZ = false
hasM = polylineWithoutAttrs.HasM;          // hasM = false
hasID = polylineWithoutAttrs.HasID;        // hasID = false// 将有属性,因为它是通过便捷方法创建的
Polygon polygonWithAttrs = PolygonBuilderEx.CreatePolygon(points);
hasZ = polygonWithAttrs.HasZ;               // hasZ = true
hasM = polygonWithAttrs.HasM;               // hasM = true
hasID = polygonWithAttrs.HasID;             // hasID = true// 将没有属性,因为它被指定为参数
Polygon polygonWithoutAttrs = PolygonBuilderEx.CreatePolygon(points, AttributeFlags.None);
hasZ = polygonWithoutAttrs.HasZ;               // hasZ = false
hasM = polygonWithoutAttrs.HasM;               // hasM = false
hasID = polygonWithoutAttrs.HasID;             // hasID = false// 将没有属性,因为它被指定为参数
PolylineBuilderEx polylineB = new PolylineBuilderEx(points, AttributeFlags.None);
hasZ = polylineB.HasZ;                      // hasZ = false
hasM = polylineB.HasM;                      // hasM = false
hasID = polylineB.HasID;                    // hasID = false// 将有属性,因为它传递了一个带属性的折线
polylineB = new PolylineBuilderEx(polylineWithAttrs);
hasZ = polylineB.HasZ;                      // hasZ = true
hasM = polylineB.HasM;                      // hasM = true
hasID = polylineB.HasID;                    // hasID = true// 将没有属性,因为它传递了一个不带属性的折线
polylineB = new PolylineBuilderEx(polylineWithoutAttrs);
hasZ = polylineB.HasZ;                      // hasZ = false
hasM = polylineB.HasM;                      // hasM = false
hasID = polylineB.HasID;                    // hasID = false// 将没有属性,因为它被指定为参数
PolygonBuilderEx polygonB = new PolygonBuilderEx(points, AttributeFlags.None);
hasZ = polygonB.HasZ;                       // hasZ = false
hasM = polygonB.HasM;                       // hasM = false
hasID = polygonB.HasID;                     // hasID = false// 将有属性,因为它传递了一个带属性的多边形
polygonB = new PolygonBuilderEx(polygonWithAttrs);
hasZ = polygonB.HasZ;                       // hasZ = true
hasM = polygonB.HasM;                       // hasM = true
hasID = polygonB.HasID;                     // hasID = true// 将没有属性,因为它传递了一个不带属性的多边形
polygonB = new PolygonBuilderEx(polygonWithoutAttrs);
hasZ = polygonB.HasZ;                       // hasZ = true
hasM = polygonB.HasM;                       // hasM = true
hasID = polygonB.HasID;                     // hasID = true

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com