Utilizzando Linq a Sql per trovare i codici postali entro la distanza del raggio
-
22-07-2019 - |
Domanda
Ho una tabella di database di codici postali con i loro Lat / Longs. Sto cercando di trovare un codice che mostri una query che richieda un codice postale e x miglia e quindi restituisca una serie di risultati che includano tutti i codici postali che si trovano all'interno di quel raggio (la precisione non è molto importante, purché vicina).
Questo può essere fatto con una query Linq to SQL, quindi non devo usare una Stored Procedure?
Soluzione
L'ho capito e in realtà non è stato poi così difficile una volta trovata l'equazione.
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow