Usando LINQ to SQL para encontrar códigos postais dentro do raio de distância

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

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma tabela de banco de dados de códigos postais com a sua Lat / Longs. Eu estou tentando encontrar algum código que mostra uma consulta que tem um CEP e milhas x e depois retornar conjunto de resultados que incluem todos os códigos postais que estão dentro desse raio (precisão não é muito importante - contanto que é perto).

Isso pode ser feito com uma consulta LINQ to SQL, então eu não tenho que usar um procedimento armazenado?

Foi útil?

Solução

Eu percebi isso e ele realmente não era tão difícil, uma vez que eu encontrei na equação.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top