Поможет, если вы поймете, что
- GeoCoordinate и Location совместимы.
- Прямоугольник отсечения преднамеренно несколько больше, чем карта, так что край маркера для точек, немного смещенных от карты, будет виден, предлагая пользователю выполнить панорамирование.
Настройка метода расширения.
public static class ExtensionMethods
{
public static bool Contains(this LocationRect r, GeoCoordinate p)
{
double w = r.West - 0.2;
double e = r.East + 0.2;
double s = r.South - 0.2;
double n = r.North + 0.2;
return w <= p.Longitude && p.Longitude <= e && s <= p.Latitude && p.Latitude <= n;
}
}
Проверьте, находится ли каждый штифт в границах карты с таким выражением.
map.TargetBoundingRectangle.Contains(pin.Location)
Если ваши точки находятся в IEnumerable, импортируйте LINQ, и вы можете обработать их все за один раз с помощью выражения, подобного этому, которое возвращает коллекцию, содержащую только те булавки, которые вам нужно показать.
pushpins.Where(pin => map.TargetBoundingRectangle.Contains(pin.Location))
Выполните отсечение в обработчике события ViewChangeEnd карты. Если у вас много булавок, ответом на следующий вопрос будет «quadtree». Посмотри.