Usando Linq to Sql para encontrar códigos postales dentro de una distancia de radio

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

  •  22-07-2019
  •  | 
  •  

Pregunta

Tengo una tabla de base de datos de códigos postales con sus Lat / Longs. Estoy tratando de encontrar algún código que muestre una consulta que tome un código postal y x millas y luego devuelva un conjunto de resultados que incluya todos los códigos postales que están dentro de ese radio (la precisión no es muy importante, siempre que esté cerca).

¿Se puede hacer esto con una consulta de Linq a SQL para que no tenga que usar un procedimiento almacenado?

¿Fue útil?

Solución

Lo descubrí y en realidad no fue tan difícil una vez que encontré la ecuación.

Public Function SearchStudents(ByVal SearchZip As String, ByVal Miles As Double) As IEnumerable(Of Student)
                Dim dc As New IMDataContext()

                Dim lat As Double
                Dim lng As Double
                Dim maxlat As Double
                Dim minlat As Double
                Dim maxlng As Double
                Dim minlng As Double

                Dim zip As ZipCode = (From z In dc.ZipCodes Where z.ZipCode = SearchZip).SingleOrDefault()

                lat = zip.Latitude
                lng = zip.Longitude

                maxlat = lat + Miles / 69.17
                minlat = lat - (maxlat - lat)
                maxlng = lng + Miles / (Math.Cos(minlat * Math.PI / 180) * 69.17)
                minlng = lng - (maxlng - lng)

                Dim ziplist = From z In dc.ZipCodes Where z.Latitude >= minlat _
                       And z.Latitude <= maxlat _
                       And z.Longitude >= minlng _
                       And z.Longitude <= maxlng Select z.ZipCode

                Return From i In dc.Students Where ziplist.Contains(i.Zip)
            End Function
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top