Linq to Sqlを使用して半径距離内の郵便番号を見つける
-
22-07-2019 - |
質問
郵便番号と緯度/経度のデータベーステーブルがあります。私は、郵便番号と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
所属していません StackOverflow