Usando LINQ to SQL para encontrar códigos postais dentro do raio de distância
-
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?
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