2015-06-19 50 views
1

我有一个线形字符串DbGeography对象,我想沿线索找到一些点,给出总距离的一个小数值。例如,如果我给0.5,我应该将该行的中点作为具有点WKT(已知文本)的DbGeography对象。如何使用DbGeography插入沿线串的点?

我试过挖掘DbGeography文档,但没有明显的“简单”方法似乎存在。

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

回答

2

我做这个使用下面的方法之前:直到你找到对相邻点之间的目标点必须位于

  1. 迭代通过线段形式的点(目标距离要么给予或可以很容易地从你提到的距离分数中计算出来);然后

  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米作为缓冲距离填充)。

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