我有一个线串 DbGeography 对象,我想在给定总距离的小数值的情况下找到沿线串的某个点。例如,如果我给出 0.5,我应该将线的中点作为带有点 WKT(众所周知的文本)的 DbGeography 对象获取。
我尝试深入研究 DbGeography 文档,但似乎不存在明显的“简单”方法。
我认为此方法类似于 Google Maps JS API 球形几何插值方法。有什么建议吗?
最佳答案
我在使用以下方法之前已经完成了此操作:
迭代 LineString 的点,直到找到目标点必须位于其间的一对相邻点(目标距离要么是给定的,要么可以根据您提到的距离分数轻松计算出来);然后
在两个点中的每一个上使用
DbGeography.Buffer
,提供“到目标的剩余距离”+“小距离填充”
* 第一个,“两点之间的距离” - “到目标的剩余距离”+“小距离填充”
第二个;然后在两个点上使用
DbGeography.Intersection
,得到一个小多边形,不是一个点;然后将该多边形转换为
DbGeometry
对象并获取其质心
;然后如果需要,将该结果点转换回
DbGeography
对象。
请注意,这在技术上并不是最精确的,因为几何质心通常与地理中心不同。然而,在这种情况下,它几乎肯定足够好,因为从中获取质心的多边形可能非常小(例如,使用 1 米作为缓冲距离填充)。
*:提供距离填充是为了尽量避免由于浮点舍入错误而导致的“险些发生”。如果我们有无限的精度,显然你只需获取没有填充的缓冲区,然后交集就会给你你正在寻找的确切点。
关于.net - 如何使用 DbGeography 沿线串插入点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948363/