0
public double CalculateDistance(
      Coordinate c,
      Coordinate a,
      Coordinate b,
      LineMode mode)

参数:

c 类型:SpatialLite.Core.API.Coordinate 计算距离的坐标。

a 类型:SpatialLite.Core.API.Coordinate 线的一个点。

b 类型:SpatialLite.Core.API.Coordinate 线的另一点。

mode 类型:SpatialLite.Core.Algorithms.LineMode LineMode 值,指定 AB 应被视为无限线还是线段。

返回值 C 到 AB 线的距离,坐标单位。

我正在使用SpatialLite库中的上述方法。返回的变量是 double 类型,如文档中所述,它是以坐标为单位的距离。我不明白“坐标单位”到底是什么。如何将它们转换为米?

源代码在这里

4

2 回答 2

1

单位可能是也可能不是米,具体取决于您的空间参考系统。假设您有一个地理系统(例如 WGS84),这意味着您以度为单位分配坐标,您以度为单位。但是,在矩形参考系统上,您可能以米为单位。另一个单位是像素,它是显示器的距离单位 - 例如您的浏览器。这里的坐标 (0; 0) 表示左上角,而地理系统中的 (0, 0) 表示在大西洋的某个地方。

我很确定 SpatialLite 有一种方法可以将一个坐标从一个空间参考系统投影到另一个空间参考系统(这就是您需要寻找的)。

编辑:我已经找到了可以满足您需要的用于 spatialLite 的方法将需要距离的点转换为目标空间参考系统,然后使用简单的代数计算距离。或者将整个数据重新投影到 UTM34。因此,您可以使用您已经提到的方法,因为您不需要任何需要很长时间的即时转换。但是,您会永久更改您的数据。

于 2015-05-04T13:31:43.717 回答
1

CalculateDistance方法可在具有两种不同默认实现的接口上找到:Euclidean2DCalculatorSphere2DCalculator. 欧几里得实现假设一个无单位的笛卡尔坐标空间并计算两个坐标之间的直线距离。这就是你所得到的。

如果您正在寻找球坐标,那么您需要实例化Sphere2DCalculator. 我不熟悉库的使用,只是在谷歌代码上挖掘代码。

球体算法返回两点之间的大圆距离(以米为单位),假设球形地球的半径为 6371010 米。

球形地球不是最好的表示,但根据您的应用程序可能就足够了。当前制图在WGS 84上标准化,该库不支持该表示。

于 2015-05-04T13:46:47.127 回答