-1

我有两个具有相同坐标系(Wgs84)的几何图形,但它们的数据单位不同,一个是度数,另一个是米。我需要对它们执行一些操作,例如:

var g1 = GeometryEngine.Difference(geometry1, geometry2);

但我得到一个错误:

System.ArgumentException:'Invalid argument: geometry1 and geometry2 must have equivalent spatial references.'

所以我想将度数的数据转换成米的数据,我不知道该怎么做。

以米为单位的数据来自 shp 文件。这个 shp 文件被加载到 SceneView。

度数数据来自 SceneView 的 PreviewMouseLeftButtonDown 事件:

// Get the mouse position.
Point cursorSceenPoint = mouseEventArgs.GetPosition(MySceneView);

// Get the corresponding MapPoint.
MapPoint onMapLocation = MySceneView.ScreenToBaseSurface(cursorSceenPoint);

然后想了想是否可以通过设置修改单位SceneView.SpatialReference.Unit,但是是只读的。

.NET 解决方案是最好的,其他语言也是可以接受的。

4

2 回答 2

0

大多数几何引擎操作要求所有几何都在同一个空间参考中。正如错误所指出的那样,情况并非如此。在执行任何几何引擎操作之前,您可以使用以下代码将geometry2 带过来以匹配geometry1 的空间参考(反之亦然):

if (!geometry1.SpatialReference.IsEqual(geometry2.SpatialReference))
   geometry2 = GeometryEngine.Project(geometry2, geometry1.SpatialReference);

SceneView 始终以 wgs84 纬度/经度返回坐标。

于 2020-11-04T20:36:55.413 回答
0
var point1 = ...;
var point2= GeometryEngine.Project(point1, YourNewSpatialReference) as MapPoint;
public static Geometry? Project(Geometry geometry, SpatialReference outputSpatialReference);
public static Geometry? Project(Geometry geometry, SpatialReference outputSpatialReference, DatumTransformation? datumTransformation);
于 2020-11-04T07:14:01.863 回答