Utilizzando Linq a Sql per trovare i codici postali entro la distanza del raggio

StackOverflow https://stackoverflow.com/questions/1647521

  •  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?

È stato utile?

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
scroll top