1

假设我在以下位置有一点:

纬度:47°36′N 经度:122°19′W

围绕上述点,我画了一个 35Km 的半径。我现在有另一个点或几个点,我想看看它们是否在 35Km 半径范围内?我怎样才能做到这一点?给定两个点的坐标(纬度,经度),Linq 是否可行?

4

1 回答 1

4

当然。假设您有一个函数可以计算两个位置之间的 Haversine 距离(由纬度和经度坐标组成)。如果你没有,你可以在这里找到一个。然后只需将该函数用作 Where 子句中的选择器。如果使用 LINQ to SQL,您需要将它们具体化为您的 Position 对象,以便您可以在它们上使用 Haversine 函数作为 LINQ to 对象;没有对 SQL 的转换,但如果您真的不想首先返回所有点,您可能会创建一个执行相同操作的表值函数。

var origin = new Position( 47.6, 122.3 );
var close = positions.Where( p => Haversine.Distance( origin, p, DistanceType.Km ) <= 35 );
于 2010-06-02T03:44:37.323 回答