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

时间:2015-06-19 22:46:08

标签: .net geospatial spatial-interpolation

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

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

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

1 个答案:

答案 0 :(得分: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对象。

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

    *:提供距离填充以尽量避免"接近未命中"由于浮点舍入错误。如果我们有无限的精度,显然你只需要没有填充的缓冲区然后交叉点就会给你你正在寻找的确切点。