У меня есть коллекция моих собственных PointOfInterest
классов (около 1500), каждый из которых имеет свои двойные свойства Latitude
и Longitude
.
Я пытаюсь нарисовать их на своем экране, но вопределенный логический уровень масштабирования, нет смысла показывать некоторые из них, потому что они так близко друг к другу.
Как я могу очень эффективно сгруппировать POI по их свойствам?
У меня есть такие вещи:
var pointOfInterests = (from p in PointsOfInterest select p).Distinct(new EqualityComparer()).ToList();
, где EqualityComparer
:
public class EqualityComparer : IEqualityComparer<PointOfInterest>
{
public bool Equals(PointOfInterest x, PointOfInterest y)
{
return Math.Round(x.Latitude.Value, PointOfInterest.DecimalPlaceFilterLevel) == Math.Round(y.Latitude.Value, PointOfInterest.DecimalPlaceFilterLevel) &&
Math.Round(x.Longitude.Value, PointOfInterest.DecimalPlaceFilterLevel) == Math.Round(y.Longitude.Value, PointOfInterest.DecimalPlaceFilterLevel);
}
public int GetHashCode(PointOfInterest obj)
{
return Math.Round(obj.Latitude.Value, PointOfInterest.DecimalPlaceFilterLevel).GetHashCode() ^ Math.Round(obj.Longitude.Value, PointOfInterest.DecimalPlaceFilterLevel).GetHashCode();
}
}
и PointOfInterest.DecimalPlaceFilterLevel
- это статическое свойство int, которое я устанавливаю, когда пользователь имеет определенный уровень масштабирования.
Но это не работает, я продолжаю получать перекрывающиеся POI, и это не оченьбыстро ... так как я разговариваю по телефону, мне нужно, чтобы он работал очень хорошо.
Спасибо за любую помощь, которую вы можете оказать