如何使用 DbGeography 沿线串插入一个点?

How can I interpolate a point along a line string using DbGeography?

我有一个线串 DbGeography 对象,我想在给定总距离的分数值的情况下沿着线串找到一些点。例如,如果我给 0.5,我应该将线的中点作为带有点 WKT(众所周知的文本)的 DbGeography 对象。

我已经尝试挖掘 DbGeography 文档,但似乎不存在明显的 "easy" 方法。

我认为此方法类似于 Google Maps JS API 球面几何插值方法。有什么建议吗?

我在使用以下方法之前已经完成了此操作:

  1. 遍历 LineString 的点,直到找到目标点必须位于其间的一对相邻点(目标距离是给定的,或者可以根据您提到的距离分数轻松计算);然后

  2. 在两个点中的每一个上使用 DbGeography.Buffer,提供 "remaining distance to the target" + "small distance padding"* 第一个和 "distance between the two points" - "remaining distance to the target" + "small distance padding"第二;然后

  3. 在两个点上使用DbGeography.Intersection,得到一个小多边形,不是一个点;然后

  4. 将该多边形转换为 DbGeometry 对象并获取其 Centroid;然后

  5. 如果需要,将该结果点转换回 DbGeography 对象。

请注意,这在技术上不是最精确的,因为几何质心通常与地理中心不同。然而,在这种情况下它几乎肯定足够好,因为从中获取质心的多边形可能非常小(例如,使用 1 米作为缓冲距离填充)。

*:提供距离填充是为了尽量避免"near misses"由于浮点数的舍入误差。如果我们有无限的精度,显然你只需要没有填充的缓冲区,然后交集就会给你你正在寻找的确切点。