예제 #1
0
        private void OrderPoints(string[] strArrayPoints, CustomMapPoint mpac, CustomMapPoint loc1, CustomMapPoint loc2, int node)
        {
            int index;

            if (Isclost(mpac, loc1, 0.001))
            {
                for (index = 0; index < strArrayPoints.Length - 1; index++)
                {
                    var tmoloc = new CustomMapPoint(double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[1]),
                                                    double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[0]))
                    {
                        Node = node
                    };
                    carloc.Add(tmoloc);
                }
            }
            else
            {
                for (index = strArrayPoints.Length - 1; index >= 0; index--)
                {
                    var tmoloc1 = new CustomMapPoint(double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[1]),
                                                     double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[0]))
                    {
                        Node = node
                    };
                    carloc.Add(tmoloc1);
                }
            }
        }
예제 #2
0
        private bool IsCloset(CustomMapPoint loc, CustomMapPoint loc1, CustomMapPoint loc2)
        {
            bool   isclose = false;
            double x       = Math.Pow((loc.X - loc1.X), 2) + Math.Pow((loc.Y - loc1.Y), 2);
            double y       = Math.Pow((loc.X - loc2.X), 2) + Math.Pow((loc.Y - loc2.Y), 2);

            if (x > y)
            {
                isclose = true;
            }
            return(isclose);
        }
예제 #3
0
        private void TimerCompleted(object sender, EventArgs e)
        {
            CarGraphic c = GetCarByName("car", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer);

            if (carloc.Count > 0)
            {
                CustomMapPoint lc = carloc.ElementAt(_cari);
                if (lc != null)
                {
                    c.Node     = lc.Node;
                    c.Geometry = lc;
                }
                if (_cari % 10 == 0 && cbxLocCar.IsChecked == true)
                {
                    MyMap.PanTo(lc);
                }
            }
            fcarloc.Clear();
            var cmp = GetCarByName("car", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer);

            foreach (var trigger in carloc.Where(trigger => trigger.Node == cmp.Node))
            {
                fcarloc.Add(trigger);
            }

            if (fcarloc.Count > 25)
            {
                for (int k = 0; k < fcarloc.Count - 1; k++)
                {
                    var cp = fcarloc.ElementAt(k);
                    if (Isclost(cmp.Geometry as CustomMapPoint, cp, 0.00001))
                    {
                        if (fcarloc.Count - k > 18)
                        {
                            _isgetlocing = true;
                        }
                    }
                }
            }


            //if (_isgetlocing == false)
            //{
            timer.Begin();
            //}


            if (_cari < carloc.Count - 1)
            {
                _cari++;
            }
        }
예제 #4
0
        private bool IsInLine(CustomMapPoint cmp, string[] strings)
        {
            bool isclost = false;

            for (int i = 0; i < strings.Length - 1; i++)
            {
                var tmoloc =
                    new CustomMapPoint(
                        double.Parse(otmpFirstArrays[i].Split(new char[] { ' ' })[1]),
                        double.Parse(otmpFirstArrays[i].Split(new char[] { ' ' })[0]));
                if (Isclost(cmp, tmoloc, 0.00001))
                {
                    isclost = true;
                }
            }
            return(isclost);
        }
예제 #5
0
        void RscGetBeginRoadCompleted(object sender, GetBeginRoadCompletedEventArgs e)
        {
            string[] strArray = e.Result[0].Split(new char[] { ';' });
            _beginNum = int.Parse(strArray[2]);

            if (_lastNum == 0)
            {
                _fristArray = strArray[strArray.Length - 1].Split(new char[] { ',' });
                fcarloc.Clear();

                for (int i = 0; i < _fristArray.Length - 1; i++)
                {
                    var tmoloc =
                        new CustomMapPoint(
                            double.Parse(_fristArray[i].Split(new char[] { ' ' })[1]),
                            double.Parse(_fristArray[i].Split(new char[] { ' ' })[0]))
                    {
                        Node = _beginNum
                    };

                    fcarloc.Add(tmoloc);
                }
            }

            if (_lastNum != 0)
            {
                GetRouting("routing", _beginNum, _lastNum);
            }
            else
            {
                CarGraphic c = GetCarByName("终点", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer);
                if (c != null)
                {
                    GetLastPoint((c.Geometry as MapPoint).Y, (c.Geometry as MapPoint).X, 100);
                }
            }

            //BaseGeometry bg = GetItemByID("routing", "last");
        }
예제 #6
0
        void RscGetRoutingCompleted(object sender, GetRoutingCompletedEventArgs e)
        {
            if (e.Result.Count() == 0)
            {
                Dtimer.Stop();
                timer.Stop();
                Ltimer.Stop();
                return;
            }
            carloc.Clear();
            _cari = 0;
            var lineLayer = MyMap.Layers["MyLineLayer"] as GraphicsLayer;

            if (lineLayer != null) lineLayer.ClearGraphics();
            var builder = new StringBuilder();
            if (e.Error == null)
            {
                Color color = Colors.Blue;
                for (int i = 0; i < e.Result.Count; i++)
                {

                    string[] strArray = e.Result[i].Split(new char[] { ';' });
                    builder.Length = 0;
                    int index = 2;
                    while (index < (strArray.Length - 1))
                    {
                        builder.Append(strArray[index] + ": ");
                        index++;
                    }
                    string[] strArray2 = strArray[strArray.Length - 1].Split(new char[] { ',' });
                    string[] strArrayPoints = strArray[strArray.Length - 2].Split(new char[] { ',' });
                    int beginNode = int.Parse(strArray[3]);
                    if (i==0)
                    {
                        otmpFirstArrays = strArrayPoints;
                    }

                    if ((strArray2.Length == 1) && (strArray2[0].Length > 1))
                    {
                        //面
                    }
                    else
                    {
                        var locations = new ESRI.ArcGIS.Client.Geometry.PointCollection();
                        CustomMapPoint location2;
                        CustomMapPoint locPoint;
                        if (strArray2[0].Equals(strArray2[strArray2.Length - 1]))
                        {

                        }
                        else
                        {
                            var polyline = new ESRI.ArcGIS.Client.Geometry.Polyline();

                            for (index = strArray2.Length - 1; index >= 0; index--)
                            {
                                location2 = new CustomMapPoint(
                                    double.Parse(strArray2[index].Split(new char[] {' '})[1]),
                                    double.Parse(strArray2[index].Split(new char[] {' '})[0])) {Node = beginNode};
                                locations.Add(location2);

                            }

                            //添加坐标到小车轨迹
                            if (fcarloc.Count>0)
                            {
                                //取出轨迹数据的第一个点
                                var floc1 = new CustomMapPoint(double.Parse(otmpFirstArrays[0].Split(new char[] { ' ' })[1]),
                                                        double.Parse(otmpFirstArrays[0].Split(new char[] { ' ' })[0]));

                                var ffloc1 = fcarloc.ElementAt(0);

                                var loc1 = new CustomMapPoint(double.Parse(strArrayPoints[0].Split(new char[] { ' ' })[1]),
                                                        double.Parse(strArrayPoints[0].Split(new char[] { ' ' })[0]));
                                var loc2 = new CustomMapPoint(double.Parse(strArrayPoints[strArrayPoints.Length - 1].Split(new char[] { ' ' })[1]),
                                                        double.Parse(strArrayPoints[strArrayPoints.Length - 1].Split(new char[] { ' ' })[0]));
                                CustomMapPoint oPoint = GetCarByName("car", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer).Geometry as CustomMapPoint;

                                if (i==0)
                                {
                                    //当前车辆不在在轨迹上
                                    if (!IsInLine(oPoint, otmpFirstArrays))
                                    {

                                        //调节车辆最后所在轨迹段顺序
                                        if (!Isclost(ffloc1, loc1, 0.0001) && !Isclost(ffloc1, loc2, 0.0001))
                                        {
                                            for (index = 0; index < fcarloc.Count - 1; index++)
                                            {
                                                var tmoloc = fcarloc.ElementAt(index);

                                                carloc.Add(tmoloc);

                                            }

                                        }
                                        else
                                        {

                                            for (index = fcarloc.Count - 1; index >= 0; index--)
                                            {
                                                var tmoloc1 = fcarloc.ElementAt(index);
                                                carloc.Add(tmoloc1);
                                            }

                                        }
                                    }

                                }

                                if (i == 1)
                                {
                                    //调节第一段轨迹段顺序
                                    if (!Isclost(floc1, loc1, 0.00001) && !Isclost(floc1, loc2, 0.00001))
                                    {

                                        for (index = 0; index < otmpFirstArrays.Length - 1; index++)
                                        {
                                            var tmoloc =
                                                new CustomMapPoint(
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] {' '})[1]),
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] {' '})[0]))
                                                    {Node = beginNode};
                                            carloc.Add(tmoloc);

                                        }

                                    }
                                    else
                                    {

                                        for (index = otmpFirstArrays.Length - 1; index >= 0; index--)
                                        {
                                            var tmoloc1 =
                                                new CustomMapPoint(
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] {' '})[1]),
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] {' '})[0]))
                                                    {Node = beginNode};
                                            carloc.Add(tmoloc1);
                                        }
                                    }

                                    OrderPoints(strArrayPoints, carloc.ElementAt(carloc.Count - 1), loc1, loc2, beginNode);
                                }

                                if(i>1)
                                {
                                    OrderPoints(strArrayPoints, carloc.ElementAt(carloc.Count - 1), loc1, loc2, beginNode);
                                }

                            }
                            polyline.Paths.Add(locations);
                            if (lineLayer != null)
                                lineLayer.Graphics.Add(new Graphic()
                                {
                                    Geometry = polyline,
                                    Symbol = DefaultLineSymbol
                                });
                        }
                    }

                }

            }
            CustomMapPoint c = GetCarByName("car", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer).Geometry as CustomMapPoint;
                for (int i = 0; i < carloc.Count-1; i++)
                {
                    var item = carloc.ElementAt(i);
                    if (Isclost(c, item, 0.0001))
                    {

                        for (int y = 0; y < i + 2; y++)
                        {
                            if (carloc.Count > y + 1)
                            {
                                carloc.RemoveAt(0);
                            }
                        }

                    }
                }

            _isgetlocing = false;
            timer.Begin();
        }
예제 #7
0
        void RscGetBeginRoadCompleted(object sender, GetBeginRoadCompletedEventArgs e)
        {
            string[] strArray = e.Result[0].Split(new char[] { ';' });
            _beginNum = int.Parse(strArray[2]);

            if (_lastNum==0)
            {
                _fristArray = strArray[strArray.Length - 1].Split(new char[] { ',' });
                fcarloc.Clear();

                for (int i = 0; i < _fristArray.Length - 1; i++)
                {
                    var tmoloc =
                        new CustomMapPoint(
                            double.Parse(_fristArray[i].Split(new char[] { ' ' })[1]),
                            double.Parse(_fristArray[i].Split(new char[] { ' ' })[0])) { Node = _beginNum };

                    fcarloc.Add(tmoloc);
                }

            }

            if (_lastNum!=0)
            {

                GetRouting("routing", _beginNum, _lastNum);
            }
            else
            {
                CarGraphic c = GetCarByName("终点", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer);
                if (c != null)
                {

                    GetLastPoint((c.Geometry as MapPoint).Y, (c.Geometry as MapPoint).X, 100);
                }
            }

            //BaseGeometry bg = GetItemByID("routing", "last");
        }
예제 #8
0
        private void OrderPoints(string[] strArrayPoints, CustomMapPoint mpac, CustomMapPoint loc1, CustomMapPoint loc2,int node)
        {
            int index;
            if (Isclost(mpac, loc1, 0.001))
            {

                for (index = 0; index < strArrayPoints.Length - 1; index++)
                {
                    var tmoloc = new CustomMapPoint(double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[1]),
                                                    double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[0])) { Node = node };
                    carloc.Add(tmoloc);
                }

            }
            else
            {
                for (index = strArrayPoints.Length - 1; index >= 0; index--)
                {
                    var tmoloc1 = new CustomMapPoint(double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[1]),
                                                     double.Parse(strArrayPoints[index].Split(new char[] { ' ' })[0])) { Node = node };
                    carloc.Add(tmoloc1);
                }
            }
        }
예제 #9
0
        private bool IsInLine(CustomMapPoint cmp,string[] strings)
        {
            bool isclost=false;
            for (int i = 0; i < strings.Length-1; i++)
            {

                var tmoloc =
                    new CustomMapPoint(
                        double.Parse(otmpFirstArrays[i].Split(new char[] {' '})[1]),
                        double.Parse(otmpFirstArrays[i].Split(new char[] {' '})[0]));
                if (Isclost(cmp, tmoloc, 0.00001))
                {
                    isclost = true;
                }

            }
            return isclost;
        }
예제 #10
0
 private bool IsCloset(CustomMapPoint loc, CustomMapPoint loc1, CustomMapPoint loc2)
 {
     bool isclose = false;
     double x = Math.Pow((loc.X - loc1.X), 2) + Math.Pow((loc.Y - loc1.Y), 2);
     double y = Math.Pow((loc.X - loc2.X), 2) + Math.Pow((loc.Y - loc2.Y), 2);
     if (x > y)
     {
         isclose = true;
     }
     return isclose;
 }
예제 #11
0
 private static bool Isclost(CustomMapPoint c, CustomMapPoint item,double l)
 {
     return Math.Abs(Math.Round(item.X, 7) - Math.Round(c.X, 7)) < l && Math.Abs(Math.Round(item.Y, 7) - Math.Round(c.Y, 7)) < l;
 }
예제 #12
0
 private static bool Isclost(CustomMapPoint c, CustomMapPoint item, double l)
 {
     return(Math.Abs(Math.Round(item.X, 7) - Math.Round(c.X, 7)) < l && Math.Abs(Math.Round(item.Y, 7) - Math.Round(c.Y, 7)) < l);
 }
예제 #13
0
        void RscGetRoutingCompleted(object sender, GetRoutingCompletedEventArgs e)
        {
            if (e.Result.Count() == 0)
            {
                Dtimer.Stop();
                timer.Stop();
                Ltimer.Stop();
                return;
            }
            carloc.Clear();
            _cari = 0;
            var lineLayer = MyMap.Layers["MyLineLayer"] as GraphicsLayer;

            if (lineLayer != null)
            {
                lineLayer.ClearGraphics();
            }
            var builder = new StringBuilder();

            if (e.Error == null)
            {
                Color color = Colors.Blue;
                for (int i = 0; i < e.Result.Count; i++)
                {
                    string[] strArray = e.Result[i].Split(new char[] { ';' });
                    builder.Length = 0;
                    int index = 2;
                    while (index < (strArray.Length - 1))
                    {
                        builder.Append(strArray[index] + ": ");
                        index++;
                    }
                    string[] strArray2      = strArray[strArray.Length - 1].Split(new char[] { ',' });
                    string[] strArrayPoints = strArray[strArray.Length - 2].Split(new char[] { ',' });
                    int      beginNode      = int.Parse(strArray[3]);
                    if (i == 0)
                    {
                        otmpFirstArrays = strArrayPoints;
                    }

                    if ((strArray2.Length == 1) && (strArray2[0].Length > 1))
                    {
                        //面
                    }
                    else
                    {
                        var            locations = new ESRI.ArcGIS.Client.Geometry.PointCollection();
                        CustomMapPoint location2;
                        CustomMapPoint locPoint;
                        if (strArray2[0].Equals(strArray2[strArray2.Length - 1]))
                        {
                        }
                        else
                        {
                            var polyline = new ESRI.ArcGIS.Client.Geometry.Polyline();


                            for (index = strArray2.Length - 1; index >= 0; index--)
                            {
                                location2 = new CustomMapPoint(
                                    double.Parse(strArray2[index].Split(new char[] { ' ' })[1]),
                                    double.Parse(strArray2[index].Split(new char[] { ' ' })[0]))
                                {
                                    Node = beginNode
                                };
                                locations.Add(location2);
                            }

                            //添加坐标到小车轨迹
                            if (fcarloc.Count > 0)
                            {
                                //取出轨迹数据的第一个点
                                var floc1 = new CustomMapPoint(double.Parse(otmpFirstArrays[0].Split(new char[] { ' ' })[1]),
                                                               double.Parse(otmpFirstArrays[0].Split(new char[] { ' ' })[0]));

                                var ffloc1 = fcarloc.ElementAt(0);

                                var loc1 = new CustomMapPoint(double.Parse(strArrayPoints[0].Split(new char[] { ' ' })[1]),
                                                              double.Parse(strArrayPoints[0].Split(new char[] { ' ' })[0]));
                                var loc2 = new CustomMapPoint(double.Parse(strArrayPoints[strArrayPoints.Length - 1].Split(new char[] { ' ' })[1]),
                                                              double.Parse(strArrayPoints[strArrayPoints.Length - 1].Split(new char[] { ' ' })[0]));
                                CustomMapPoint oPoint = GetCarByName("car", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer).Geometry as CustomMapPoint;


                                if (i == 0)
                                {
                                    //当前车辆不在在轨迹上
                                    if (!IsInLine(oPoint, otmpFirstArrays))
                                    {
                                        //调节车辆最后所在轨迹段顺序
                                        if (!Isclost(ffloc1, loc1, 0.0001) && !Isclost(ffloc1, loc2, 0.0001))
                                        {
                                            for (index = 0; index < fcarloc.Count - 1; index++)
                                            {
                                                var tmoloc = fcarloc.ElementAt(index);

                                                carloc.Add(tmoloc);
                                            }
                                        }
                                        else
                                        {
                                            for (index = fcarloc.Count - 1; index >= 0; index--)
                                            {
                                                var tmoloc1 = fcarloc.ElementAt(index);
                                                carloc.Add(tmoloc1);
                                            }
                                        }
                                    }
                                }


                                if (i == 1)
                                {
                                    //调节第一段轨迹段顺序
                                    if (!Isclost(floc1, loc1, 0.00001) && !Isclost(floc1, loc2, 0.00001))
                                    {
                                        for (index = 0; index < otmpFirstArrays.Length - 1; index++)
                                        {
                                            var tmoloc =
                                                new CustomMapPoint(
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] { ' ' })[1]),
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] { ' ' })[0]))
                                            {
                                                Node = beginNode
                                            };
                                            carloc.Add(tmoloc);
                                        }
                                    }
                                    else
                                    {
                                        for (index = otmpFirstArrays.Length - 1; index >= 0; index--)
                                        {
                                            var tmoloc1 =
                                                new CustomMapPoint(
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] { ' ' })[1]),
                                                    double.Parse(otmpFirstArrays[index].Split(new char[] { ' ' })[0]))
                                            {
                                                Node = beginNode
                                            };
                                            carloc.Add(tmoloc1);
                                        }
                                    }

                                    OrderPoints(strArrayPoints, carloc.ElementAt(carloc.Count - 1), loc1, loc2, beginNode);
                                }


                                if (i > 1)
                                {
                                    OrderPoints(strArrayPoints, carloc.ElementAt(carloc.Count - 1), loc1, loc2, beginNode);
                                }
                            }
                            polyline.Paths.Add(locations);
                            if (lineLayer != null)
                            {
                                lineLayer.Graphics.Add(new Graphic()
                                {
                                    Geometry = polyline,
                                    Symbol   = DefaultLineSymbol
                                });
                            }
                        }
                    }
                }
            }
            CustomMapPoint c = GetCarByName("car", MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer).Geometry as CustomMapPoint;

            for (int i = 0; i < carloc.Count - 1; i++)
            {
                var item = carloc.ElementAt(i);
                if (Isclost(c, item, 0.0001))
                {
                    for (int y = 0; y < i + 2; y++)
                    {
                        if (carloc.Count > y + 1)
                        {
                            carloc.RemoveAt(0);
                        }
                    }
                }
            }

            _isgetlocing = false;
            timer.Begin();
        }