3

我有一个带有纬度/经度的邮政编码数据库表。我试图找到一些代码来显示一个查询,该查询需要一个邮政编码和 x 英里,然后返回一组结果,其中包括该半径内的所有邮政编码(精度不是很重要——只要它很接近)。

这可以通过 Linq to SQL 查询来完成,这样我就不必使用存储过程了吗?

4

1 回答 1

1

我想通了,一旦我找到了方程式,实际上并没有那么难。

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
于 2009-10-31T13:19:13.640 回答