private bool ObjectIsInViewRegion(GeoObject obj)
 {
     if (BoundingBox == null)
     {
         return(true);
     }
     return(BoundingBox.Contains(obj.Point.Position));
 }
 public void AddObject(GeoObject obj)
 {
     if (!Objects.Contains(obj))
     {
         Objects.Add(obj);
         if (ObjectIsInViewRegion(obj))
         {
             ObjectsInView.Add(obj);
         }
     }
 }
 private void OnPositionChanged(GeoObject obj)
 {
     if (!ObjectFilter(obj))
     {
         return;
     }
     // TODO optimize with indexing
     if (ObjectIsInViewRegion(obj))
     {
         if (!ObjectsInView.Contains(obj))
         {
             ObjectsInView.Add(obj);
         }
     }
     else
     {
         ObjectsInView.Remove(obj);
     }
 }
 public void MoveObjectTo(GeoObject obj, double latitude, double longitude)
 {
     obj.MoveTo(latitude, longitude);
 }
 public void MoveObjectTo(GeoObject obj, BasicGeoposition pos)
 {
     obj.MoveTo(pos);
 }
 public void RemoveObject(GeoObject obj)
 {
     ObjectsInView.Remove(obj);
     Objects.Remove(obj);
 }