質問

郵便番号と緯度/経度のデータベーステーブルがあります。私は、郵便番号と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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top