Zoeken naar berichten waarvan de positieafstand kleiner of gelijk is aan de dynamische waarde

Ik heb hulp nodig met een architecturaal probleem waar ik mee werk. De gebruiker voert een positie en een radius in (bijvoorbeeld afstand). De software zoekt in een (gigantische = paar van 100k posts) databasetabel naar posts waar de gebruikerslocatie en de "posts" -afstand tot elkaar minder zijn dan de ingevoerde afstand.

Het is voor mij moeilijk om het uit te leggen, maar stel je een tabel met twee berichten voor, punt a en punt c, punt U is de locatie van de gebruiker. De gebruiker heeft een positie en een straal ingevoerd en de positie en straal voor a en c zijn vooraf gedefinieerd (opgeslagen in een database).

Crossmatching areas

In dit geval zou ik alleen geïnteresseerd zijn in het punt A, omdat de twee gebieden elkaar kruisen. Hoe moet ik dit op een effectieve manier omzetten in een database met een paar honderdduizend berichten? In de database bewaar ik de lengtegraad, breedtegraad en straal.

1

1 antwoord

Afhankelijk van welke databaseserver u gebruikt, maar kijk eens naar de GIS-mogelijkheden die mogelijk aanwezig zijn. MS SQL Server 2008 heeft bijvoorbeeld een ingebouwd geometrietype en PostgreSQL heeft PostGIS. Oracle heeft zoiets ook. Hoe dan ook - deze native GIS-indelingen worden geleverd met ruimtelijke queryfuncties die het soort dingen doen waar je het over hebt - zoeken naar matches binnen bepaalde afstanden, enz. Het is vrij eenvoudig om eenmaal te bereiken om over te schakelen naar het juiste datatype.

bewerken

Since you're using SQL 2008, and your data is lat/long, I suggest the "geography" rather than the "geometry" datatype. Take a look here: http://msdn.microsoft.com/en-us/library/cc280766.aspx

2
toegevoegd
Bedankt voor je reactie. Ik zal er dieper op ingaan. We zullen SQL Server 2008 R2 gebruiken
toegevoegd de auteur Anton Gildebrand, de bron
Zie update hierboven
toegevoegd de auteur Jake Feasel, de bron