вторник, 11 декабря 2018 г.

Визуализация секторов

По аналогии с визуализацией массива маркеров, нанёс на карту сектора.



Для того, чтобы различать сектора разных диапазонов используем разную длину и толщину линий, символизирующих эти сектора. Например, для диапазона 900 задаем длину линии 0.25 км и толщину 1; для диапазона 1800 - 0.125 км, толщина 3.



GMapOverlay sectors = new GMapOverlay("sectors");

GMapRoute[] sector = new GMapRoute[10000];


            int i = 0;
            while (dataReader.Read())
            {
                
                double Lat = Convert.ToDouble(dataReader["LATITUDE"]);
                double Lon = Convert.ToDouble(dataReader["LONGITUDE"]);
                double Azimuth = Convert.ToDouble(dataReader["AZIMUTH"]);
                double Band = Convert.ToInt32(dataReader["BAND"]);
                double GsmCellLen = 0;
                int SectorThickness = 0;

                if (Band == 900)
                {
                    GsmCellLen = 0.25;
                    SectorThickness = 1;
                }
                else { GsmCellLen = 0.125; SectorThickness = 3; }

                double LenLon1Degree = Convert.ToInt32((6400 * Math.Cos(Lat * Math.PI / 180) * Math.PI * 1) / 180);
                
                double LatServCell = Lat + (GsmCellLen * Math.Cos(Azimuth * Math.PI / 180)) / 111;
                double LonServCell = Lon + (GsmCellLen * Math.Sin(Azimuth * Math.PI / 180)) / LenLon1Degree;

                List points = new 
                {
                    new PointLatLng(Lat, Lon),
                    new PointLatLng(LatServCell, LonServCell)
                };

                sector[i] = new GMapRoute(points, Convert.ToString(dataReader["CELL"]))
                {
                    Stroke = new Pen(Color.Blue, SectorThickness)
                };
                
                sectors.Routes.Add(sector[i]);

                i++;
            }

            gmap.Overlays.Add(sectors);

Комментариев нет:

Отправить комментарий