如何使用 DbGeography 沿线串插入一个点?
How can I interpolate a point along a line string using DbGeography?
我有一个线串 DbGeography 对象,我想在给定总距离的分数值的情况下沿着线串找到一些点。例如,如果我给 0.5,我应该将线的中点作为带有点 WKT(众所周知的文本)的 DbGeography 对象。
我已经尝试挖掘 DbGeography 文档,但似乎不存在明显的 "easy" 方法。
我认为此方法类似于 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"由于浮点数的舍入误差。如果我们有无限的精度,显然你只需要没有填充的缓冲区,然后交集就会给你你正在寻找的确切点。
我有一个线串 DbGeography 对象,我想在给定总距离的分数值的情况下沿着线串找到一些点。例如,如果我给 0.5,我应该将线的中点作为带有点 WKT(众所周知的文本)的 DbGeography 对象。
我已经尝试挖掘 DbGeography 文档,但似乎不存在明显的 "easy" 方法。
我认为此方法类似于 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"由于浮点数的舍入误差。如果我们有无限的精度,显然你只需要没有填充的缓冲区,然后交集就会给你你正在寻找的确切点。