/// <summary> /// 更新圆心坐标和半径 /// </summary> /// <param name="centerDot"></param> /// <param name="radius"></param> public void UpdatePosition(Core.Model.MapLngLat centerDot, double radius) { listPoint[0] = centerDot; //listPoint[1] = GetPointByDistanceAndAngle(radius, centerDot); listPoint[1] = MapFrame.Core.Common.Utils.GetPointByDistanceAndAngle((float)radius, listPoint[0], 180); DrawNewCircle(listPoint); }
/// <summary> /// 更新多边形的某一点坐标 /// </summary> /// <param name="oldLngLat">老坐标</param> /// <param name="newLngLat">新坐标</param> /// <returns></returns> public bool UpdatePosition(Core.Model.MapLngLat oldLngLat, Core.Model.MapLngLat newLngLat) { Dosomething((Action)(delegate { IPoint oldPoint = new PointClass() { X = oldLngLat.Lng, Y = oldLngLat.Lat }; IPoint newPoint = new PointClass() { X = newLngLat.Lng, Y = newLngLat.Lat }; for (int i = 0; i < pointCollection.PointCount; i++) { if (pointCollection.get_Point(i).Compare(oldPoint) == 0) { pointCollection.RemovePoints(i, 1); pointCollection.AddPoint(newPoint); //坐标点集合 pointList.Remove(oldLngLat); pointList.Add(newLngLat); break; } } base.Geometry = (IGeometry)pointCollection; }), true); Update(); return(true); }
private void mapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { if (eventInited == 1) { ICommand command = mapControl.CurrentTool as ICommand; if (command != null && command.Name == "ControlToolsMapNavigation_Pan") { //更新标牌 IPoint targetPoint = base.Geometry as IPoint; Core.Model.MapLngLat startPoint = new Core.Model.MapLngLat(targetPoint.X, targetPoint.Y); int x = -1; int y = -1; mapControl.FromMapPoint(targetPoint, ref x, ref y); mapLabel.UpdateLabelLocation(new System.Drawing.Point(x, y)); //更新线 IPoint labelPoint = mapControl.ToMapPoint(mapLabel.Location.X, mapLabel.Location.Y); Core.Model.MapLngLat endPoint = new Core.Model.MapLngLat(labelPoint.X, labelPoint.Y); MapFrame.Core.Interface.IMFElement element = BelongLayer.GetElement("标牌线"); if (element == null) { return; } IMFLine lineElement = element as IMFLine; List <Core.Model.MapLngLat> lnglatList = new List <Core.Model.MapLngLat>(); lnglatList.Add(startPoint); lnglatList.Add(endPoint); lineElement.UpdatePosition(lnglatList); } } }
/// <summary> /// 获取当前位置 /// </summary> /// <returns></returns> public Core.Model.MapLngLat GetLngLat() { IPoint point = base.Geometry as IPoint; Core.Model.MapLngLat lnglat = new Core.Model.MapLngLat(point.X, point.Y); return(lnglat); }
// 鼠标移动事件 private void mapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { // 鼠标指针 IPoint point = new PointClass(); point.PutCoords(e.mapX, e.mapY); var elementenum = graphicsContainer.LocateElements(point, 0); if (elementenum != null) { mapControl.MousePointer = esriControlsMousePointer.esriPointerCrosshair; mapControl.CurrentTool = null; } else { if (isLeftBtnDown == false) { mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault; } } if (isLeftBtnDown == false) { return; } Core.Model.MapLngLat lnglat = new Core.Model.MapLngLat(e.mapX, e.mapY); editElement.UpdatePosition(lnglat); // 重新给位置 }
/// <summary> /// 屏幕坐标转地理坐标 /// </summary> /// <param name="x">屏幕X</param> /// <param name="y">屏幕Y</param> /// <returns></returns> public Core.Model.MapLngLat SceneToGeographyPoint(int x, int y) { IPoint point = mapControl.ToMapPoint(x, y); Core.Model.MapLngLat lnglat = new Core.Model.MapLngLat(point.X, point.Y); return(lnglat); }
/// <summary> /// 更新位置 /// </summary> /// <param name="lngLat">经纬度</param> public void UpdatePosition(Core.Model.MapLngLat lngLat) { IPoint point = new PointClass(); point.PutCoords(lngLat.Lng, lngLat.Lat); base.Geometry = point; Update(); }
/// <summary> /// 屏幕坐标转地理坐标 /// </summary> /// <param name="x">屏幕X</param> /// <param name="y">屏幕Y</param> /// <returns></returns> public Core.Model.MapLngLat SceneToGeographyPoint(int x, int y) { float lon = 0, lat = 0; mapControl.MgsAppXYtoBL(0, x, y, ref lon, ref lat); Core.Model.MapLngLat lnglat = new Core.Model.MapLngLat(lon, lat); return(lnglat); }
/// <summary> /// 增加坐标点 /// </summary> /// <param name="lngLat"></param> public void AddPoint(Core.Model.MapLngLat lngLat) { var index = listPoint.FindIndex(o => o.Lng == lngLat.Lng && o.Lat == lngLat.Lat); if (index == -1) { listPoint.Add(lngLat); DrawNewLine(listPoint); } }
/// <summary> /// 移除某个坐标点 /// </summary> /// <param name="lngLat"></param> public void RemovePoint(Core.Model.MapLngLat lngLat) { var index = listPoint.FindIndex(o => o.Lng == lngLat.Lng && o.Lat == lngLat.Lat); if (index == -1 || listPoint.Count <= 2) { return; } listPoint.RemoveAt(index); DrawNewLine(listPoint); }
/// <summary> /// 屏幕坐标转地理坐标 /// </summary> /// <param name="x">屏幕X</param> /// <param name="y">屏幕Y</param> /// <returns></returns> public MapLngLat SceneToGeographyPoint(int x, int y) { double dLat, dLon, dAlt; IGlobeDisplay pGlobeDisplay = mapControl.GlobeDisplay; ISceneViewer pViewer = mapControl.GlobeDisplay.ActiveViewer; IGlobeViewUtil pGlobeViewUtil = mapControl.GlobeCamera as IGlobeViewUtil; pGlobeViewUtil.WindowToGeographic(pGlobeDisplay, pViewer, x, y, true, out dLon, out dLat, out dAlt); Core.Model.MapLngLat lnglat = new Core.Model.MapLngLat(dLon, dLat, dAlt); return(lnglat); }
/// <summary> /// 定位 /// </summary> /// <param name="lngLat"></param> /// <param name="zoomLevel"></param> public void ZoomToPosition(Core.Model.MapLngLat lngLat, int?zoomLevel = null) { ISceneViewer m_ActiveView = mapControl.Globe.GlobeDisplay.ActiveViewer; IEnvelope enve = new EnvelopeClass(); enve.PutCoords(lngLat.Lng, lngLat.Lat, lngLat.Lng, lngLat.Lat); enve.ZMin = lngLat.Alt * 10; enve.ZMax = lngLat.Alt * 10; mapControl.GlobeCamera.SetToZoomToExtents(enve, mapControl.Globe, m_ActiveView); m_ActiveView.Redraw(false); }
/// <summary> /// 更新某个坐标点 /// </summary> /// <param name="oldLngLat"></param> /// <param name="newLngLat"></param> /// <returns></returns> public bool UpdatePosition(Core.Model.MapLngLat oldLngLat, Core.Model.MapLngLat newLngLat) { var index = listPoint.FindIndex(o => o.Lng == oldLngLat.Lng && o.Lat == oldLngLat.Lat); if (index == -1) { return(false); } listPoint[index] = newLngLat; return(DrawNewPolygon(listPoint)); }
/// <summary> /// 标牌移动移动线的位置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void mapLabel_Move(object sender, EventArgs e) { IPoint targetPoint = base.Geometry as IPoint; Core.Model.MapLngLat startPoint = new Core.Model.MapLngLat(targetPoint.X, targetPoint.Y);//目标点 MapFrame.ArcMap.Windows.MapLabel label = sender as MapFrame.ArcMap.Windows.MapLabel; IPoint labelLocation = mapControl.ToMapPoint(label.Location.X, label.Location.Y); Core.Model.MapLngLat endPoint = new Core.Model.MapLngLat(labelLocation.X, labelLocation.Y);//标牌点 MapFrame.Core.Interface.IMFElement element = BelongLayer.GetElement("标牌线"); if (element == null) { return; } IMFLine lineElement = element as IMFLine; List <Core.Model.MapLngLat> lnglatList = new List <Core.Model.MapLngLat>(); lnglatList.Add(startPoint); lnglatList.Add(endPoint); lineElement.UpdatePosition(lnglatList);//更新位置 }
/// <summary> /// 更新圆心坐标 /// </summary> /// <param name="centerDot"></param> public void UpdatePosition(Core.Model.MapLngLat centerDot) { this.listPoint[0] = centerDot; DrawNewCircle(listPoint); }
/// <summary> /// 跳转 /// </summary> /// <param name="lngLat">经纬度</param> /// <param name="zoomLevel">显示比例</param> public void ZoomToPosition(Core.Model.MapLngLat lngLat, int?zoomLevel = null) { ReleaseTool(); mapControl.moveMapTo(lngLat.Lng, lngLat.Lat); }
/// <summary> /// 更新位置 /// </summary> /// <param name="lngLat">经纬度</param> public void UpdatePosition(Core.Model.MapLngLat lngLat) { mapControl.setMoveObjectPositon(moveObj, lngLat.Lng, lngLat.Lat, 1); Update(); }
/// <summary> /// 更新位置 /// </summary> /// <param name="lngLat">经纬度</param> public void UpdatePosition(Core.Model.MapLngLat lngLat) { this.UpdatePosition(lngLat.Lng, lngLat.Lat, lngLat.Alt); }
/// <summary> /// 定位 /// </summary> /// <param name="lngLat">经纬度</param> /// <param name="zoomLevel"></param> public void ZoomToPosition(Core.Model.MapLngLat lngLat, int?zoomLevel = null) { ESRI.ArcGIS.Geometry.IPoint point = new PointClass(); point.PutCoords(lngLat.Lng, lngLat.Lat); mapControl.CenterAt(point); }