我有一个线串 DbGeography 对象,我想在给定总距离的小数值的情况下沿着线串找到一些点。例如,如果我给出 0.5,我应该将线的中点作为带有点 WKT(众所周知的文本)的 DbGeography 对象。
我尝试过深入研究 DbGeography 文档,但似乎不存在明显的“简单”方法。
我认为这种方法类似于 Google Maps JS API 球面几何插值方法。有什么建议么?
我有一个线串 DbGeography 对象,我想在给定总距离的小数值的情况下沿着线串找到一些点。例如,如果我给出 0.5,我应该将线的中点作为带有点 WKT(众所周知的文本)的 DbGeography 对象。
我尝试过深入研究 DbGeography 文档,但似乎不存在明显的“简单”方法。
我认为这种方法类似于 Google Maps JS API 球面几何插值方法。有什么建议么?
在使用以下方法之前,我已经这样做了:
遍历 LineString 的点,直到找到目标点必须位于其间的一对相邻点(目标距离是给定的,或者可以很容易地从您提到的距离分数中计算出来);然后
DbGeography.Buffer
在两点中的每一个上使用,为第一点和第二点提供"remaining distance to the target" + "small distance padding"
*"distance between the two points" - "remaining distance to the target" + "small distance padding"
;然后
在两个点上使用DbGeography.Intersection
,获得一个小多边形,而不是一个点;然后
将该多边形转换为DbGeometry
对象并获取其Centroid
; 然后
如果需要,将该结果点转换回DbGeography
对象。
请注意,这在技术上并不是最精确的,因为几何质心通常与地理中心不同。然而,在这种情况下几乎可以肯定它已经足够好了,因为从中获取质心的多边形可能非常小(例如,使用 1 米作为缓冲距离填充)。
*:提供距离填充是为了尽量避免由于浮点舍入误差而导致的“near misses”。如果我们有无限的精度,显然你只需要没有填充的缓冲区,然后交集会给你你正在寻找的确切点。