2

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

我尝试过深入研究 DbGeography 文档,但似乎不存在明显的“简单”方法。

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

4

1 回答 1

2

在使用以下方法之前,我已经这样做了:

  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”。如果我们有无限的精度,显然你只需要没有填充的缓冲区,然后交集会给你你正在寻找的确切点。

于 2015-06-23T16:40:26.953 回答