¿Determinar si el punto se cruza con un radio de 35 km alrededor de otro punto? ¿Posible en Linq?

StackOverflow https://stackoverflow.com/questions/2954820

  •  23-10-2019
  •  | 
  •  

Pregunta

Suponga que tengo un punto en la siguiente ubicación:

Latitud: 47 ° 36′N Longitud: 122 ° 19′W

Alrededor del punto anterior, dibujo un radio de 35 km. Tengo otro punto ahora o varios y quiero ver si caen dentro del radio de 35 km. ¿Cómo puedo hacer esto? ¿Es posible con Linq dadas las coordenadas (LAT, Long) de ambos puntos?

¿Fue útil?

Solución

Por supuesto. Suponga que tiene una función que calcula la distancia de Haversine entre dos posiciones (que consiste en una coordenada de latitud y longitud). Si no lo haces, puedes encontrar uno aquí. Luego, simplemente use la función como selector en una cláusula Where. Si usa Linq a SQL, deberá materializarlos a los objetos de su posición para que pueda usar la función Haversine en ellos como Linq a objetos; No hay una traducción a SQL, aunque probablemente podría crear una función con valor de mesa que haga lo mismo si realmente no desea devolver todos los puntos primero.

var origin = new Position( 47.6, 122.3 );
var close = positions.Where( p => Haversine.Distance( origin, p, DistanceType.Km ) <= 35 );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top