//1397.08.26 //why this methods calls multiple time. enable break point to see why private void UpdateEdgeLables() { this._edgeLabelLayer.Items.Clear(); //if (this._webMercatorGeometry?.GetAllPoints().Length <= 1) ////if (this._webMercatorGeometry.NumberOfPoints <= 1 || temp <= 1) //{ // return; //} if (Options.IsEdgeLabelVisible) { var edges = _webMercatorGeometry.GetLineSegments().Select(i => ToEdgeLengthLocatable(i.Start, i.End)); foreach (var item in edges) { _edgeLabelLayer.Items.Add(item); } } if (Options.IsMeasureVisible) { var point = this._webMercatorGeometry?.GetMeanOrLastPoint(); if (point == null) { return; } var element = new View.MapMarkers.RectangleLabelMarker(MeasureLabel); //do not show length/area when geometry has just one/two point or new part has just one/two point if (double.IsNaN(MeasureValue)) { return; } element.TooltipValue = MeasureValue.ToInvariantString(); var offset = _screenToMap(20); _edgeLabelLayer.Items.Add(new Locateable(Model.AncherFunctionHandlers.BottomCenter) { Element = element, X = point.X + offset, Y = point.Y + offset }); } }
private Locateable ToEdgeLengthLocatable(Point first, Point second) { Func <Point, Point> toGeodeticWgs84 = p => MapProjects.WebMercatorToGeodeticWgs84(p); var edge = new LineSegment <Point>(first, second); var element = new View.MapMarkers.RectangleLabelMarker(edge.GetLengthLabel(toGeodeticWgs84)); //var offset = _screenToMap(15); return(new Locateable(Model.AncherFunctionHandlers.BottomCenter) { Element = element, X = edge.Middle.X, Y = edge.Middle.Y }); }