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); } } }
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); }
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++; } }
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); }
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"); }
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(); }
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"); }
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); } } }
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; }
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; }
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; }
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); }
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(); }