Используя Linq to Sql, чтобы найти почтовые индексы на расстоянии радиуса

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

  •  22-07-2019
  •  | 
  •  

Вопрос

У меня есть база данных почтовых индексов с их широтой / долготой. Я пытаюсь найти код, который показывает запрос, который принимает почтовый индекс и х миль, а затем возвращает набор результатов, который включает все почтовые индексы, которые находятся в пределах этого радиуса (точность не очень важна - пока она близка).

Можно ли это сделать с помощью запроса Linq to SQL, чтобы мне не приходилось использовать хранимую процедуру?

Это было полезно?

Решение

Я понял это, и на самом деле все было не так сложно, когда я нашел уравнение

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top