예제 #1
0
 public Communication(string path)
 {
     SRTM       = new SRTMtile(path);
     peekFilter = new PeekFilter();
 }
예제 #2
0
        public string[,] PeekArray(SRTMtile tile, Coordinates coordinates, int range)
        {
            //Make values ascending
            float[] ycoordinatesASC = (float[])tile.ycoordinates.Reverse().ToArray();
            float[] xcoordinatesASC = (float[])tile.xcoordinates;

            //Starting threads
            GetClosest gety = new GetClosest();
            GetClosest getx = new GetClosest();

            Thread getyThread = new Thread(() => { gety = new GetClosest(coordinates.y, ycoordinatesASC); });
            Thread getxThread = new Thread(() => { getx = new GetClosest(coordinates.x, xcoordinatesASC); });

            getyThread.Start();
            getxThread.Start();
            getyThread.Join();


            //Getting y-values
            int   starty = gety.index - 1 - range;
            float miny   = ycoordinatesASC[starty];
            int   endy   = gety.index + 1 + range;
            float maxy   = ycoordinatesASC[endy];

            getxThread.Join();

            //Getting x-values
            int   startx = getx.index - 1 - range;
            float minx   = xcoordinatesASC[startx];
            int   endx   = getx.index + 1 + range;
            float maxx   = xcoordinatesASC[endx];

            OSMreader   or            = new OSMreader();
            List <Peek> peeks         = or.peeks;
            List <Peek> filteredPeeks = new List <Peek>();

            //filtering peeks
            foreach (Peek peek in peeks)
            {
                if ((miny <= peek.coordinates.y) && (maxy >= peek.coordinates.y))
                {
                    if ((minx <= peek.coordinates.x) && (maxx >= peek.coordinates.x))
                    {
                        filteredPeeks.Add(peek);
                    }
                }
            }

            //Put in stringarray, simmilar to heights array
            string[,] peekMatrix = new string[(range * 2 + 1), (range * 2 + 1)];

            foreach (Peek peek in filteredPeeks)
            {
                GetClosest closesty = new GetClosest();
                GetClosest closestx = new GetClosest();

                Thread closestyThread = new Thread(() => { closesty = new GetClosest(peek.coordinates.y, ycoordinatesASC); });
                Thread closestxThread = new Thread(() => { closestx = new GetClosest(peek.coordinates.x, xcoordinatesASC); });
                closestyThread.Start();
                closestxThread.Start();
                closestyThread.Join();
                closestxThread.Join();

                int y = closesty.index - starty - 1;
                int x = closestx.index - startx - 1;

                //reverse y back
                //y = (range * 2) - y;

                peekMatrix[y, x] = peek.name;
            }

            return(peekMatrix);
        }