我有一个带有纬度/经度的邮政编码数据库表。我试图找到一些代码来显示一个查询,该查询需要一个邮政编码和 x 英里,然后返回一组结果,其中包括该半径内的所有邮政编码(精度不是很重要——只要它很接近)。
这可以通过 Linq to SQL 查询来完成,这样我就不必使用存储过程了吗?
我有一个带有纬度/经度的邮政编码数据库表。我试图找到一些代码来显示一个查询,该查询需要一个邮政编码和 x 英里,然后返回一组结果,其中包括该半径内的所有邮政编码(精度不是很重要——只要它很接近)。
这可以通过 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