Определить, пересекает ли точка радиус 35 км вокруг другой точки? Можно в Линке? - PullRequest
1 голос
/ 02 июня 2010

Предположим, у меня есть точка в следующем месте:

Широта: 47 ° 36′N Долгота: 122 ° 19′W

Вокруг вышеупомянутой точки я рисую радиус 35 км. У меня есть другая точка сейчас или несколько, и я хочу посмотреть, попадают ли они в радиус 35 км? Как я могу это сделать? Возможно ли с Linq, учитывая координаты (широта, долгота) обеих точек?

1 Ответ

4 голосов
/ 02 июня 2010

Конечно.Предположим, у вас есть функция, которая вычисляет расстояние Хаверсайна между двумя положениями (состоящее из координаты широты и долготы).Если вы не можете найти один здесь .Затем просто используйте функцию в качестве селектора в предложении Where.Если вы используете LINQ to SQL, вам нужно материализовать их для ваших объектов Position, чтобы вы могли использовать для них функцию Haversine как LINQ для объектов;нет перевода на SQL, хотя вы, вероятно, могли бы создать табличную функцию, которая делает то же самое, если вы действительно не хотите сначала вернуть все точки.

var origin = new Position( 47.6, 122.3 );
var close = positions.Where( p => Haversine.Distance( origin, p, DistanceType.Km ) <= 35 );
...