Предположим, у меня есть база данных, хранящая 1000000 геолокаций разных пользователей в городе. Было бы больно, если сервер выполнит команду SearchNearbyUsers(myLocation, 50)
, если я использую список или массив для хранения всех геолокаций и сравнения расстояний один за другим.Реализация функции "Найти близлежащих пользователей" на сервере
Сервер закодирован на C# с веб-интерфейсом API 2. Есть ли библиотека, предназначенная для таких расчетов с геолокациями?
Если библиотеки нет, какую структуру данных следует использовать, чтобы сделать этот расчет проще? Раньше я смотрел на R-tree, но, честно говоря, я не понимаю логику, и это кажется довольно сложным.
Это то, что класс геолокации выглядит следующим образом:
public class GeoLocation
{
public float latitude { get; set; }
public float longitude { get; set; }
}
И широта и долготы направляются клиентами. Значения получены через navigator.geolocation.getCurrentPosition()
.
Если вы используете систему баз данных, такую как MongoDB или MySQL, она может выполнить эту работу за вас, вам просто нужно сначала ее настроить. Для MySQL внимательно прочитайте эту главу: http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html. В противном случае (и я надеюсь, что у вас есть веская причина не делать этого), R-деревья - это путь, вы должны изучить их! – Rerito