/// <summary>
        /// Visual clustering.
        /// </summary>
        /// <param name="pins"></param>
        /// <param name="index"></param>
        /// <param name="direction"></param>
        /// <param name="currentClusterPin"></param>
        /// <param name="zoomLevel"></param>
        /// <param name="minClusterDistance"></param>
        private void addClusteredPinsWithinRange(List <ClusteredPin> pins, int index, int direction, ClusteredPin currentClusterPin, int zoomLevel, int minClusterDistance)
        {
            bool finished = false;
            int  searchindex;

            searchindex = index + direction;
            while (!finished)
            {
                if (searchindex >= pins.Count || searchindex < 0)
                {
                    finished = true;
                }
                else
                {
                    if (!pins[searchindex].IsClustered)
                    {
                        if (Math.Abs(pins[searchindex].GetPixelX(zoomLevel) - pins[index].GetPixelX(zoomLevel)) < minClusterDistance)     //within the same x range
                        {
                            if (Math.Abs(pins[searchindex].GetPixelY(zoomLevel) - pins[index].GetPixelY(zoomLevel)) < minClusterDistance) //within the same y range = cluster needed
                            {
                                //add to cluster
                                currentClusterPin.CombineClusteredPins(pins[searchindex]);

                                //stop any further clustering
                                pins[searchindex].IsClustered = true;
                            }
                        }
                        else
                        {
                            finished = true;
                        }
                    }
                    ;
                    searchindex += direction;
                }
            }
        }
        /// <summary>
        /// Visual clustering. 
        /// </summary>
        /// <param name="pins"></param>
        /// <param name="index"></param>
        /// <param name="direction"></param>
        /// <param name="currentClusterPin"></param>
        /// <param name="zoomLevel"></param>
        /// <param name="minClusterDistance"></param>
        private void addClusteredPinsWithinRange(List<ClusteredPin> pins, int index, int direction, ClusteredPin currentClusterPin, int zoomLevel, int minClusterDistance)
        {
            bool finished = false;
            int searchindex;
            searchindex = index + direction;
            while (!finished)
            {
                if (searchindex >= pins.Count || searchindex < 0)
                {
                    finished = true;
                }
                else
                {
                    if (!pins[searchindex].IsClustered)
                    {
                        if (Math.Abs(pins[searchindex].GetPixelX(zoomLevel) - pins[index].GetPixelX(zoomLevel)) < minClusterDistance) //within the same x range
                        {
                            if (Math.Abs(pins[searchindex].GetPixelY(zoomLevel) - pins[index].GetPixelY(zoomLevel)) < minClusterDistance) //within the same y range = cluster needed
                            {
                                //add to cluster
                                currentClusterPin.CombineClusteredPins(pins[searchindex]);

                                //stop any further clustering
                                pins[searchindex].IsClustered = true;
                            }
                        }
                        else
                        {
                            finished = true;
                        }
                    };
                    searchindex += direction;
                }
            }
        }